服务器端请求伪造(SSRF)漏洞与防护(进阶实战篇)
字数 1559 2025-11-30 23:01:03

服务器端请求伪造(SSRF)漏洞与防护(进阶实战篇)

描述
服务器端请求伪造(SSRF)是一种安全漏洞,攻击者通过操纵服务器端应用程序发起非预期的网络请求,从而访问或攻击内部资源、云元数据服务或第三方系统。与基础SSRF不同,进阶实战场景涉及复杂绕过技术、多协议利用(如gopher、dict、file)、链式攻击(如结合Redis未授权访问)以及云环境特定风险(如AWS/Azure元数据服务)。防护需结合输入验证、协议限制、网络层隔离等多层防御。

解题过程

  1. 理解漏洞根源

    • 漏洞成因:应用程序未严格验证用户提供的URL或主机名,直接使用后端服务(如cURL、HTTP客户端)发起请求。
    • 关键风险点:
      • 内部系统探测:通过请求http://192.168.1.1/admin扫描内网。
      • 云元数据访问:例如AWS元数据接口http://169.254.169.254/latest/meta-data/泄露敏感信息。
      • 协议处理不当:利用file://协议读取本地文件,或gopher://协议与Redis/Memcached交互。
  2. 识别攻击向量

    • 常见入口
      • Webhook配置、URL预览、文件导入、PDF生成等需要外部资源获取的功能。
      • 参数名如urltargetendpoint,可能通过GET/POST/Header传递。
    • 进阶绕过技术
      • DNS重绑定:利用短TTL域名,首次解析为合法IP通过验证,第二次解析为内网IP。
      • URL解析混淆:使用@符号(如http://evil.com@内网IP)、IPv6或Unicode编码。
      • 302重定向:控制外部服务返回重定向响应,指向内网地址。
  3. 利用链构造示例

    • 场景:结合Redis未授权访问
      1. 用户输入URL被服务器请求:gopher://redis-server:6379/_*3%0d%0a$3%0d%0aSET%0d%0a$5%0d%0akey1%0d%0a$5%0d%0avalue%0d%0a*1%0d%0a$4%0d%0aSAVE%0d%0a(编码后的Redis命令)。
      2. 服务器解析gopher协议并向内网Redis发送命令,导致数据篡改或持久化。
    • 云元数据利用
      • 请求http://169.254.169.254/latest/meta-data/iam/security-credentials/角色名获取临时凭据,进一步控制云资源。
  4. 防护策略分层实施

    • 输入验证层
      • 白名单校验:仅允许预期域名或IP(如api.trusted.com),拒绝私有IP段(如10.0.0.0/8)。
      • 协议限制:禁用高危协议(gopher、file、dict),仅允许HTTP/HTTPS。
    • 网络层
      • 出口防火墙:限制后端服务出站流量,禁止访问元数据服务(169.254.169.254)或内网段。
      • 代理策略:强制所有外部请求经安全代理,代理配置IP黑名单。
    • 代码层
      • 使用URL解析库(如url.parse())并设置allow_follow_redirects: false,避免重定向攻击。
      • 为HTTP客户端设置超时和响应大小限制,防止数据外泄。
    • 云环境加固
      • 配置IAM角色最小权限,元数据服务强制使用IMDSv2(需请求头认证)。
  5. 测试与验证

    • 工具扫描:使用SSRFmap、Gopherus等工具检测漏洞。
    • 手动测试:尝试输入不同协议和地址(如http://burpcollaborator.net观察回调)。
    • 防护验证:模拟攻击请求,确认返回错误(如"Invalid URL")且无实际网络流量。

通过以上步骤,可系统化理解SSRF进阶利用手法并实施深度防护,减少内部资产暴露风险。

服务器端请求伪造(SSRF)漏洞与防护(进阶实战篇) 描述 服务器端请求伪造(SSRF)是一种安全漏洞,攻击者通过操纵服务器端应用程序发起非预期的网络请求,从而访问或攻击内部资源、云元数据服务或第三方系统。与基础SSRF不同,进阶实战场景涉及复杂绕过技术、多协议利用(如gopher、dict、file)、链式攻击(如结合Redis未授权访问)以及云环境特定风险(如AWS/Azure元数据服务)。防护需结合输入验证、协议限制、网络层隔离等多层防御。 解题过程 理解漏洞根源 漏洞成因:应用程序未严格验证用户提供的URL或主机名,直接使用后端服务(如cURL、HTTP客户端)发起请求。 关键风险点: 内部系统探测:通过请求 http://192.168.1.1/admin 扫描内网。 云元数据访问:例如AWS元数据接口 http://169.254.169.254/latest/meta-data/ 泄露敏感信息。 协议处理不当:利用 file:// 协议读取本地文件,或 gopher:// 协议与Redis/Memcached交互。 识别攻击向量 常见入口 : Webhook配置、URL预览、文件导入、PDF生成等需要外部资源获取的功能。 参数名如 url 、 target 、 endpoint ,可能通过GET/POST/Header传递。 进阶绕过技术 : DNS重绑定:利用短TTL域名,首次解析为合法IP通过验证,第二次解析为内网IP。 URL解析混淆:使用 @ 符号(如 http://evil.com@内网IP )、IPv6或Unicode编码。 302重定向:控制外部服务返回重定向响应,指向内网地址。 利用链构造示例 场景:结合Redis未授权访问 用户输入URL被服务器请求: gopher://redis-server:6379/_*3%0d%0a$3%0d%0aSET%0d%0a$5%0d%0akey1%0d%0a$5%0d%0avalue%0d%0a*1%0d%0a$4%0d%0aSAVE%0d%0a (编码后的Redis命令)。 服务器解析gopher协议并向内网Redis发送命令,导致数据篡改或持久化。 云元数据利用 : 请求 http://169.254.169.254/latest/meta-data/iam/security-credentials/角色名 获取临时凭据,进一步控制云资源。 防护策略分层实施 输入验证层 : 白名单校验:仅允许预期域名或IP(如 api.trusted.com ),拒绝私有IP段(如 10.0.0.0/8 )。 协议限制:禁用高危协议(gopher、file、dict),仅允许HTTP/HTTPS。 网络层 : 出口防火墙:限制后端服务出站流量,禁止访问元数据服务(169.254.169.254)或内网段。 代理策略:强制所有外部请求经安全代理,代理配置IP黑名单。 代码层 : 使用URL解析库(如 url.parse() )并设置 allow_follow_redirects: false ,避免重定向攻击。 为HTTP客户端设置超时和响应大小限制,防止数据外泄。 云环境加固 : 配置IAM角色最小权限,元数据服务强制使用IMDSv2(需请求头认证)。 测试与验证 工具扫描:使用SSRFmap、Gopherus等工具检测漏洞。 手动测试:尝试输入不同协议和地址(如 http://burpcollaborator.net 观察回调)。 防护验证:模拟攻击请求,确认返回错误(如"Invalid URL")且无实际网络流量。 通过以上步骤,可系统化理解SSRF进阶利用手法并实施深度防护,减少内部资产暴露风险。