服务器端请求伪造(SSRF)攻击详解
字数 1141 2025-11-22 05:48:16
服务器端请求伪造(SSRF)攻击详解
一、SSRF攻击描述
服务器端请求伪造(SSRF)是一种安全漏洞,攻击者诱使服务器向非预期目标发起恶意请求。由于请求由服务器发出,可能绕过防火墙或访问内部资源,导致敏感信息泄露、内部服务探测甚至远程代码执行。常见于依赖外部URL参数的功能(如网页抓取、文件处理、Webhook回调等)。
二、攻击原理与危害
-
核心机制:
- 应用未严格校验用户提供的URL参数,直接使用服务器权限发起请求。
- 服务器可能具备访问内网、云元数据接口(如AWS的169.254.169.254)或特殊协议(如file://、gopher://)的能力。
-
典型危害:
- 内网渗透:扫描内网服务(如Redis、MySQL),获取敏感数据。
- 云环境攻击:窃取云实例的元数据(如IAM凭证)。
- 协议滥用:利用gopher://等协议构造任意TCP流量,实现数据库或Redis未授权操作。
- 绕过防御:通过服务器IP绕过IP白名单限制。
三、攻击步骤分解
-
识别注入点:
- 查找接收URL参数的功能(如在线翻译、图片下载、API代理)。
- 示例参数:
url=、target=、api=。
-
探测服务器行为:
- 尝试访问公开服务(如http://example.com)确认功能正常。
- 测试协议处理:将参数改为
file:///etc/passwd或dict://localhost:6379/info,观察响应是否包含系统文件或服务信息。
-
内网服务探测:
- 使用常见内网IP段(如192.168.0.0/16)和端口扫描:
http://192.168.1.1:80 http://127.0.0.1:3306 - 通过响应时间或错误信息判断服务是否存在。
- 使用常见内网IP段(如192.168.0.0/16)和端口扫描:
-
利用云元数据接口:
- 尝试访问云服务元数据端点(如AWS):
http://169.254.169.254/latest/meta-data/iam/security-credentials/ - 成功时可获取临时访问密钥。
- 尝试访问云服务元数据端点(如AWS):
-
高级利用(协议扩展):
- Gopher协议:构造POST请求攻击内网Redis,实现命令执行:
gopher://127.0.0.1:6379/_SET%20key%20value - HTTP重定向:控制外部域名返回302跳转至内网地址,绕过直接URL黑名单。
- Gopher协议:构造POST请求攻击内网Redis,实现命令执行:
四、防御措施
-
输入校验:
- 白名单校验域名或IP,禁止内网地址(如10.0.0.0/8、127.0.0.0/8)。
- 禁用危险协议(如file://、gopher://)。
-
网络层隔离:
- 服务器出站流量限制,仅允许访问必要的公网服务。
- 使用网络策略禁止服务器访问内网关键系统。
-
代理与中间层:
- 通过专用代理服务转发请求,代理层实施额外校验。
- 避免服务器直接使用用户参数发起请求。
-
云环境加固:
- 配置云元数据服务为仅允许可信流量(如AWS IMDSv2需携带Token)。
五、总结
SSRF风险源于服务器对用户输入过度信任。防御需结合输入校验、网络隔离与最小权限原则,并通过持续测试(如SSRF自动化工具)验证有效性。