在当今的网络安全攻防对抗中,SSRF漏洞(Server-Side Request Forgery,服务器端请求伪造) 已成为渗透测试和红队行动中的“黄金钥匙”。它不仅能够突破网络边界限制,访问内网敏感服务,还能结合Redis、FastCGI等组件实现远程代码执行(RCE),最终拿下服务器权限。

本文将作为一篇全网最详实的SSRF实战指南,带你从零理解SSRF的成因、利用方式,并通过多个真实场景案例深入剖析其攻击流程与防御策略。无论你是刚入门的安全爱好者,还是希望提升实战能力的初级安全工程师,这篇文章都值得你收藏并反复研读。
什么是SSRF?—— 漏洞原理深度解析
1.1 SSRF定义
SSRF(Server-Side Request Forgery)即服务器端请求伪造,是一种由攻击者构造恶意请求,诱导服务端程序向内网或本地系统发起任意HTTP或其他协议请求的安全漏洞。
由于服务器通常具备访问内部网络资源的权限,而外部用户无法直接访问这些资源,因此SSRF成为了打通外网与内网隔离屏障的关键突破口。
✅ 一句话总结: SSRF = 攻击者控制 → 服务端代发请求 → 扫描/攻击内网资源
1.2 漏洞成因
当Web应用提供了如下功能时,若未对目标地址进行严格校验,则极易产生SSRF漏洞:
图片下载/抓取(如头像上传)
网页内容抓取(如文章预览)
在线翻译、RSS阅读器
URL分享、链接检测工具
常见存在风险的PHP函数包括:
例如一个简单的图片加载功能:
如果$_GET['url']参数未做任何过滤,攻击者即可传入http://127.0.0.1:8080/admin来探测本地后台服务,甚至使用file:///etc/passwd读取系统文件!
SSRF能做什么?—— 核心攻击能力盘点
| 能力类型 | 具体用途 |
|---|---|
| 🔍 内网扫描 | 探测开放端口、获取Banner信息 |
| 📁 文件读取 | 利用file://协议读取配置文件、数据库凭证 |
| 💣 协议攻击 | 使用gopher://、dict://攻击Redis、MySQL等服务 |
| 🧱 指纹识别 | 访问默认路径判断CMS类型(如Tomcat、phpMyAdmin) |
| ⚔️ 命令执行 | 结合Redis写SSH密钥、定时任务反弹Shell |
| 🔄 绕过WAF | DNS Rebinding、302跳转、IP进制转换绕过黑名单 |
SSRF实战攻击案例解析
案例一:利用SSRF探测内网端口 & 读取本地文件
假设某网站提供“远程图片加载”功能:
步骤1:探测内网存活主机
尝试访问常见内网IP:
观察响应时间、错误码或返回内容判断是否存活。
步骤2:端口扫描
通过响应差异判断端口状态:
成功连接但无服务:可能返回空或超时
连接失败:报错“Connection refused”
存在服务:返回特定Banner(如SSH、Redis)
示例探测Redis:
若返回类似 $6\r\nPONG\r\n 表明Redis服务开启。
步骤3:读取敏感文件
使用file://协议读取关键文件:
成功后会将文件内容保存为图片输出,右键另存为文本即可查看。
案例二:[网鼎杯 2020] SSRFMe —— 复杂过滤下的SSRF绕过
题目源码片段:
攻击思路:
check_inner_ip()函数通过DNS解析后的IP判断是否为内网地址。可使用 DNS Rebinding(DNS重绑定) 技术绕过:
首次请求返回公网IP(如
8.8.8.8)二次请求返回内网IP(如
127.0.0.1)或使用
0.0.0.0、localhost@127.0.0.1等方式绕过解析限制。最终payload:
成功访问提示:Redis password is root
构造Gopher协议Payload攻击Redis,实现GetShell。
案例三:WebLogic SSRF漏洞(CVE-2014-4210)实战
影响版本:WebLogic Server 10.0.2.0, 10.3.6.0
漏洞点:
攻击流程:
使用该接口探测内网Redis端口:
若返回
+PONG,说明Redis开放且无密码。利用Gopher协议构造命令写入SSH公钥或Crontab反弹Shell。
🛠️ Gopher Payload 示例(Redis写计划任务):
SSRF绕过技巧大全(Bypass WAF/Filter)
| 绕过方法 | 示例 |
|---|---|
| 🌐 DNS Rebinding | attacker.com → 解析为 8.8.8.8 和 127.0.0.1 |
| 🔁 302跳转 | 请求A,A重定向至http://127.0.0.1:8080 |
| 🔤 @符号绕过 | http://evil.com@127.0.0.1 |
| 🧮 IP进制转换 | 127.0.0.1 → 2130706433(十进制)或 0x7f000001(十六进制) |
| 📎 短网址服务 | 使用t.cn、is.gd等缩短恶意URL |
| 🌀 协议变种 | http://0/, http://127.0.0.1.xip.io |
💡 小贴士:
.xip.io、.nip.io等域名支持自动DNS映射,非常适合测试环境。
如何有效防御SSRF?
5.1 开发层面防御建议
✅ 白名单校验协议
仅允许 http:// 和 https://,禁用 file://, gopher://, dict:// 等高危协议。
✅ 禁止访问内网IP段
使用filter_var() + 黑名单IP段检查:
✅ 统一错误信息
避免泄露端口状态(如“Connection refused”),统一返回“Request failed”。
✅ 限制请求端口
只允许常见Web端口:80, 443, 8080, 8443。
✅ 使用代理模式
不直接请求用户输入URL,而是通过中间代理服务处理。
5.2 安全产品防护
Web应用防火墙(WAF)配置规则拦截
file://、gopher://等协议网络层ACL限制服务器出站流量,仅允许可信IP通信
日志监控异常请求行为(高频内网探测、非常规协议调用)
SSRF是通向内网的大门
SSRF不仅是OWASP Top 10中的常客,更是CTF竞赛和真实渗透项目中的高频考点。掌握其攻击链路设计、协议利用技巧和绕过手法,是你成为一名合格渗透测试工程师的必经之路。
🔐 安全提醒:本文所有技术仅供学习交流,请勿用于非法用途。遵守法律法规,做一名有责任的白帽黑客。
📌 关注我,获取更多网络安全干货





















