服务器端请求伪造(SSRF)攻击详解
字数 1133 2025-11-06 22:53:22

服务器端请求伪造(SSRF)攻击详解

1. 攻击描述
服务器端请求伪造(SSRF)是一种安全漏洞,攻击者诱使服务器向非预期目标发起恶意请求。利用该漏洞,攻击者可访问服务器本地的敏感资源(如内网服务)、扫描内网拓扑,甚至通过服务器作为跳板攻击第三方系统。SSRF通常出现在需要请求外部URL的功能中(如网页爬虫、文件下载、Webhook回调等)。


2. 攻击原理

  • 漏洞成因
    应用未对用户提供的URL进行严格校验(如协议、域名、路径),导致服务器可被操纵请求任意地址。
  • 关键风险
    1. 访问内部系统:服务器通常位于内网,可访问防火墙后的服务(如数据库管理界面、Redis未授权访问)。
    2. 协议滥用:利用file://dict://gopher://等协议读取本地文件或与内网服务交互。
    3. 绕过防御:通过服务器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/16localhost)。
    • 限制协议仅允许HTTP/HTTPS
  • 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的攻击链和防御逻辑,可更全面地评估应用的安全性。

服务器端请求伪造(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服务): 此Payload会向Redis发送命令,写入恶意数据。 4. 防御措施 输入校验 : 禁止用户输入包含内网IP或域名(如 192.168.0.0/16 、 localhost )。 限制协议仅允许 HTTP/HTTPS 。 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的攻击链和防御逻辑,可更全面地评估应用的安全性。