Redis 在渗透测试中常见的利用方式
目录
Redis 在渗透测试中常见的利用方式
本文主要以 redis 未授权或已知 redis 口令为前提进行漏洞利用
1 写入 webshell
条件:
- 已知 web 目录绝对路径
- 拥有该目录下的可写权限
查看所有键,创建新键,键值为 webshell,这里以写入 phpinfo 进行一个演示。
因为创建新键赋键值会把原来的键值覆盖,所以需要在赋值的时候需要查看所有的键,然后选择一个没有的键创建赋值。
|
|
查看 redis 数据库配置信息,因为我们写 Webshell 会修改 dir
和 dbfilename
,所以这里查看配置信息主要记下原来的值,好在写入后修改回来。
|
|
设置 webshell 输出目录和文件名,然后写入 Webshell。
|
|
最后,再还原数据库配置。
2 写入 ssh 公钥
条件:
- 已知启动服务的用户
- 拥有 .ssh 目录
- 允许使用基于密钥认证的方式登陆
2.1 生成公私钥对
|
|
2.2 利用 redis config 写文件
|
|
2.3 利用公私钥对登录
|
|
3 写定时任务反弹 shell
条件:
- 拥有计划任务目录写权限
- 目标启动计划服务
|
|
4 主从复制
4.1 加载扩展模块执行系统命令
具体的原理在之前漏洞复现的文章中已经解释过。
脚本地址:https://github.com/Dliv3/redis-rogue-server
主动连接模式:
参数说明
--rpasswd
如果目标 Redis 服务开启了认证功能,可以通过该选项指定密码--rhost
目标 redis 服务 IP--rport
目标 redis 服务端口,默认为 6379--lhost
vps 的外网 IP 地址--lport
vps 监控的端口,默认为 21000
|
|
被动连接模式:
适用于目标Redis服务处于内网的情况
- 通过 SSRF 攻击 Redis
- 内网 Redis 未授权访问/已知 Redis 口令,Redis 需要反向连接 redis rogue server
|
|
4.2 主从复制写入纯净文件
在 linux 下,可以利用 SYNC 主从同步,来直接写入无杂质的文件,脚本如下:
https://github.com/r35tart/RedisWriteFile
此脚本是通过 Redis
主从写出无损文件,可用于 Windows
平台下写出无损的 EXE
、DLL
、 LNK
和 Linux
下的 SO
等二进制文件
也可以用无杂质覆写 Linux
中的 /etc/shadow
|
|
上述方法主要是针对 linux,当 windows 上未开启 web 服务时,该如何 getshell?
下面介绍下 redis 在 windows 下的常见打法:
- 系统
DLL
劫持 (目标重启或注销) - 针对特定软件的
DLL
劫持(目标一次点击) - 覆写目标的快捷方式 (目标一次点击)
- 覆写特定软件的配置文件达到提权目的 (目标无需点击或一次点击)
- 覆写
sethc.exe
等文件 (攻击方一次触发)
参考:http://r3start.net/index.php/2020/05/25/717
5 漏洞修复
- 设置密码认证
- 尽量以低权限来运行 Redis 服务
- 限制登录 IP