SSRF服务端请求伪造漏洞进阶与防护
字数 737 2025-11-08 10:03:28
SSRF服务端请求伪造漏洞进阶与防护
描述
SSRF(Server-Side Request Forgery)是一种由攻击者构造恶意请求,诱使服务端向非预期目标发起网络请求的漏洞。在进阶场景中,SSRF可能绕过常规防御(如黑名单/白名单校验),利用协议扩展(如gopher、dict、file等)、URL解析差异、云 metadata服务或内网应用交互链实现敏感信息窃取、内网渗透或远程代码执行。
解题过程
-
漏洞原理深化
- 服务端未对用户输入的URL进行严格校验时,攻击者可控制请求参数(如图片下载、网页抓取功能的URL参数),使服务端发起任意请求。
- 进阶风险点:
- 协议利用:除HTTP/HTTPS外,gopher协议可构造Redis/Memcached命令,dict协议可探测服务端口,file协议读取本地文件。
- URL解析绕过:利用@符号、域名重定向、IPv6地址、DNS重绑定等技术混淆目标地址。
- 云环境利用:访问云元数据接口(如169.254.169.254)获取实例凭证。
-
攻击场景示例
- 步骤1:基础探测
尝试通过HTTP请求访问内网资源:http://api.example.com/download?url=http://192.168.1.1:8080/admin - 步骤2:协议扩展攻击
利用gopher协议向内网Redis发送命令:gopher://192.168.1.2:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a - 步骤3:绕过防御
使用URL编码或特殊格式混淆目标:http://127.0.0.1@evil.com # 实际请求evil.com http://[::]:80/ # IPv6格式绕过正则匹配
- 步骤1:基础探测
-
进阶防护方案
- 白名单校验:仅允许访问预设域名或IP,拒绝非HTTP/HTTPS协议。
- 协议过滤:禁用file、gopher、dict等危险协议。
- 网络隔离:限制服务端出网流量,禁止访问内网段及元数据地址。
- DNS重绑定防护:校验域名解析结果是否在允许范围内。
- 沙箱代理:通过中间代理服务隔离用户请求与后端网络。
通过多层校验与网络约束,可显著降低SSRF进阶攻击的成功概率。