SSRF(Server-Side Request Forgery,服务端请求伪造)
1、概述
在服务器端请求伪造 (SSRF) 攻击中,攻击者可以滥用服务器端的功能来读取或更新内部资源。攻击者可以提供或修改服务器端运行的代码会读取或提交数据的 URL,通过精心选择 URL,攻击者可能能够读取服务器配置(例如 AWS 元数据)、连接到内部服务(例如启用 HTTP 的数据库)或向不应公开的内部服务发送 POST 请求。
2、描述
目标应用程序可能具有从 URL 导入数据、向 URL 发布数据或以其他方式从 URL 读取数据的功能,而这些功能可能被篡改。攻击者通过提供完全不同的 URL 或操纵 URL 的构建方式(例如路径遍历)来修改对这些功能的调用。
当篡改后的请求发送到服务器时,服务器端代码会获取篡改后的 URL,并尝试从该 URL 读取数据。通过选择目标 URL,攻击者可能能够从未直接暴露在互联网上的服务中读取数据:
1.云服务器元数据 - AWS 等云服务提供了一个 REST 接口,可以从中http://169.254.169.254/提取重要的配置信息,有时甚至可以提取身份验证密钥。
2.数据库 HTTP 接口------诸如 MongoDB 之类的 NoSQL 数据库通过 HTTP 端口提供 REST 接口。如果数据库仅供内部使用,则身份验证可能被禁用,攻击者可以借此窃取数据。
3.内部 REST 接口。
4.文件 - 攻击者可能能够使用file://URI 读取文件。
3、常见的绕过技巧
当开发者设置了黑名单或正则校验时,攻击者常使用以下手段绕过:
进制转换: 将 IP 地址转为八进制、十六进制或长整型。
利用特殊域名: 使用 127.0.0.1.nip.io 或类似 xip.io 的服务,将其解析到内网 IP。
URL 伪造: 利用 @ 符号(如 http://10.10.10.1)欺骗解析器。
DNS 重绑定(DNS Rebinding): 通过控制 DNS 解析时间差,在校验阶段返回合法 IP,在请求阶段返回内网 IP。
短网址与 30x 跳转: 利用外部短网址服务或服务器自身的跳转功能。
4、SSRF 漏洞可能存在的web功能点
1、从 WEB 功能上寻找
分享:通过 URL 地址分享网页内容
转码服务:将原地址的网页内容转码为适合手机屏幕的格式
在线翻译:通过 URL 地址翻译对应文本内容(如百度、有道等服务)
图片加载 / 下载:通过 URL 加载或下载图片
图片、文章收藏功能
未公开的 API 或其他调用 URL 的功能
2、从 URL 关键字中寻找
常见关键词:share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
5. 防御方案
白名单机制(推荐): 仅允许访问预设的域名或 IP 段,从源头阻断对内网的探测。
禁用不常用协议: 只允许 http 和 https,禁止 file、gopher、dict 等危险协议。
统一解析与验证: 在发起请求前对 URL 进行 DNS 解析,验证解析后的真实 IP 是否为内网地址。
限制重定向: 默认关闭自动跟随 30x 跳转,或在跳转时重新进行安全检查。
6、pikachu-ssrf
- SSRF (curl)
该关卡利用 PHP 的 cURL 库 发起请求。后台代码通常直接接收 url 参数并执行 curl_exec()。
内网端口探测:
修改 url 参数为内网 IP 和端口,观察返回结果(如响应时间或错误提示)来判断端口是否开放。
?url=http://127.0.0.1:80 (探测 80)

?url=http://127.0.0.1:3306 (探测 MySQL)

利用 dict 协议:
dict 协议常用于探测内网服务指纹或执行简单命令(如mysql)。
?url=dict://127.0.0.1:3306

利用 file 协议读取文件:
?url=file:///etc/passwd 或 ?url=file:///C:/Windows/win.ini

可以尝试使用 Burp Suite 的 Intruder 模块对内网 IP(如 192.168.1.0/24)或常用端口(如 80, 443, 3306, 6379, 8080)进行批量自动化探测。
- SSRF (file_get_contents)
该关卡利用 file_get_contents() 函数读取资源内容。该函数在 allow_url_fopen 开启时可以读取 URL,同时也常用于读取本地文件系统。
读取敏感文件:
这是此函数最直接的利用方式。
?file=file:///C:/Windows/win.ini (读取win.ini )

请求内网 HTTP 服务:
?file=http://192.168.x.x:80

利用 php 伪协议:
如果后端对输入过滤不严,可以配合 php://filter 读取加密后的源码以绕过某些显示限制。
?file=php://filter/read=convert.base64-encode/resource=ssrf.php

7、推荐一个被动ssrf漏洞发现的burpsuite插件。

插件捕获BurpSuite流量的区域
被动扫描 指BurpSuite本身的被动扫描器
Proxy 指所有通过BurpSuite的MITM的流量,在Tab栏 Proxy -- Http history中可以看到这些流量
Repeater 指所有在BurpSuite Repeater中发送的流量

效果如下:

注意事项:该插件不支持旧版Burp Suite
wx关注【卡布奇诺的派对】回复AutoSSRF获取。
转载请注明出处及链接
本文参考:
https://owasp.org/www-community/attacks/Server_Side_Request_Forgery