服务器端请求伪造(SSRF)攻击详解
字数 1133 2025-11-06 22:53:22
服务器端请求伪造(SSRF)攻击详解
1. 攻击描述
服务器端请求伪造(SSRF)是一种安全漏洞,攻击者诱使服务器向非预期目标发起恶意请求。利用该漏洞,攻击者可访问服务器本地的敏感资源(如内网服务)、扫描内网拓扑,甚至通过服务器作为跳板攻击第三方系统。SSRF通常出现在需要请求外部URL的功能中(如网页爬虫、文件下载、Webhook回调等)。
2. 攻击原理
- 漏洞成因:
应用未对用户提供的URL进行严格校验(如协议、域名、路径),导致服务器可被操纵请求任意地址。 - 关键风险:
- 访问内部系统:服务器通常位于内网,可访问防火墙后的服务(如数据库管理界面、Redis未授权访问)。
- 协议滥用:利用
file://、dict://、gopher://等协议读取本地文件或与内网服务交互。 - 绕过防御:通过服务器IP发起请求,可绕过IP白名单或身份验证。
3. 攻击步骤示例
假设一个在线工具提供“网页截图”功能,用户输入URL后服务器会访问该URL并生成图片。
步骤1:探测漏洞
攻击者输入内网地址(如http://192.168.1.1:8080),若服务器返回内网服务的响应内容,则存在SSRF。
步骤2:利用协议扩展攻击面
- 读取本地文件:
输入file:///etc/passwd,服务器可能返回系统敏感文件内容。 - 扫描内网端口:
尝试请求http://192.168.1.1:22,通过响应时间或错误信息判断端口开放状态。
步骤3:构造高级攻击
利用gopher://协议发送自定义TCP数据包(如攻击内网Redis服务):
gopher://192.168.1.10:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$10%0d%0aevilcode%0d%0a*4%0d%0a$4%0d%0asave%0d%0a
此Payload会向Redis发送命令,写入恶意数据。
4. 防御措施
- 输入校验:
- 禁止用户输入包含内网IP或域名(如
192.168.0.0/16、localhost)。 - 限制协议仅允许
HTTP/HTTPS。
- 禁止用户输入包含内网IP或域名(如
- URL映射:
将用户输入的URL映射为白名单内的域名或IP,避免直接请求。 - 网络层防护:
- 服务器出站流量限制,禁止访问内网网段。
- 使用代理服务器并配置目标地址过滤。
- 最小权限原则:
运行服务器的进程使用低权限账户,减少本地文件读取风险。
5. 进阶技巧与绕过
- 重定向绕过:
攻击者控制一个公网域名,返回302重定向至内网地址,部分应用会跟随重定向。 - DNS解析混淆:
使用xip.io类域名(如192.168.1.1.xip.io)绕过简单字符串过滤。 - IPv6或特殊格式:
利用[::ffff:127.0.0.1]、八进制IP(0300.0250.0.1)等绕过检测。
通过理解SSRF的攻击链和防御逻辑,可更全面地评估应用的安全性。