服务器端请求伪造(SSRF)漏洞进阶与防护
字数 1081 2025-11-05 08:31:57

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

描述
SSRF(Server-Side Request Forgery)漏洞允许攻击者诱使服务器向任意域发起HTTP请求,从而访问内部资源或绕过网络边界控制。与基础SSRF不同,进阶场景涉及协议处理、绕过技巧及云环境下的风险升级。例如,攻击者可能利用URL解析差异或云元数据服务(如AWS的169.254.169.254)窃取敏感信息。

解题过程

  1. 漏洞原理深化

    • 服务器未严格校验用户输入的URL(如通过参数url=接收目标地址),直接使用curlfile_get_contents()等函数发起请求。
    • 进阶风险包括:
      • 协议滥用:利用file://dict://gopher://等协议读取本地文件或与内网服务交互(如Redis未授权访问)。
      • URL解析差异:某些库(如Python的requests与PHP的parse_url())对@#等符号解析规则不同,可用于绕过黑名单。
      • 云元数据接口:云服务器实例的元数据接口(如AWS/阿里云)通常可通过内网IP访问,泄露实例密钥、配置信息。
  2. 攻击场景示例

    • 步骤1:探测内网服务
      尝试将参数url=http://192.168.1.1:8080修改为url=http://169.254.169.254/latest/meta-data/,验证服务器是否可访问云元数据。
    • 步骤2:协议绕过防护
      若黑名单禁止http,可尝试:
      • 使用进制编码:url=http://2130706433(十进制IP 127.0.0.1
      • 利用重定向:先请求一个可控制的重定向服务(如Burp Collaborator),最终跳转到目标内网地址。
  3. 防护策略

    • 白名单校验:仅允许访问预设的域名或IP(如只允许api.trusted.com),拒绝非预期协议(如file://)。
    • 网络层隔离:限制服务器出站流量,禁止访问内网IP段(如10.0.0.0/8)和云元数据地址。
    • 代理层过滤:通过中间代理对出站请求进行二次校验,阻断非常规URL格式。
    • 代码层加固:使用urlparse等库严格解析URL,避免通过字符串拼接生成请求目标。
  4. 实际案例

    • 某电商平台通过SSRF访问内网Redis,利用gopher://协议发送命令,直接篡改数据库数据。
    • 修复方案:将Redis绑定到本地回环地址127.0.0.1,并设置密码认证。

通过以上步骤,可系统理解SSRF漏洞的进阶利用手法及多维防护措施。

服务器端请求伪造(SSRF)漏洞进阶与防护 描述 SSRF(Server-Side Request Forgery)漏洞允许攻击者诱使服务器向任意域发起HTTP请求,从而访问内部资源或绕过网络边界控制。与基础SSRF不同,进阶场景涉及协议处理、绕过技巧及云环境下的风险升级。例如,攻击者可能利用URL解析差异或云元数据服务(如AWS的169.254.169.254)窃取敏感信息。 解题过程 漏洞原理深化 服务器未严格校验用户输入的URL(如通过参数 url= 接收目标地址),直接使用 curl 、 file_get_contents() 等函数发起请求。 进阶风险包括: 协议滥用 :利用 file:// 、 dict:// 、 gopher:// 等协议读取本地文件或与内网服务交互(如Redis未授权访问)。 URL解析差异 :某些库(如Python的 requests 与PHP的 parse_url() )对 @ 、 # 等符号解析规则不同,可用于绕过黑名单。 云元数据接口 :云服务器实例的元数据接口(如AWS/阿里云)通常可通过内网IP访问,泄露实例密钥、配置信息。 攻击场景示例 步骤1:探测内网服务 尝试将参数 url=http://192.168.1.1:8080 修改为 url=http://169.254.169.254/latest/meta-data/ ,验证服务器是否可访问云元数据。 步骤2:协议绕过防护 若黑名单禁止 http ,可尝试: 使用进制编码: url=http://2130706433 (十进制IP 127.0.0.1 ) 利用重定向:先请求一个可控制的重定向服务(如Burp Collaborator),最终跳转到目标内网地址。 防护策略 白名单校验 :仅允许访问预设的域名或IP(如只允许 api.trusted.com ),拒绝非预期协议(如 file:// )。 网络层隔离 :限制服务器出站流量,禁止访问内网IP段(如 10.0.0.0/8 )和云元数据地址。 代理层过滤 :通过中间代理对出站请求进行二次校验,阻断非常规URL格式。 代码层加固 :使用 urlparse 等库严格解析URL,避免通过字符串拼接生成请求目标。 实际案例 某电商平台通过SSRF访问内网Redis,利用 gopher:// 协议发送命令,直接篡改数据库数据。 修复方案:将Redis绑定到本地回环地址 127.0.0.1 ,并设置密码认证。 通过以上步骤,可系统理解SSRF漏洞的进阶利用手法及多维防护措施。