服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解
字数 1853 2025-11-19 04:03:53

服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解

1. 知识点描述

服务端请求伪造(SSRF) 是一种由攻击者构造恶意请求,诱使服务端向内部或外部系统发起非预期网络请求的安全漏洞。进阶利用涉及绕过常见防御措施(如黑名单/白名单过滤、URL解析差异等),并利用协议处理差异或内部系统交互实现更深层次的攻击(如访问元数据服务、内网应用渗透、远程代码执行等)。

2. SSRF漏洞原理回顾

  • 核心机制:攻击者控制服务端发起的请求目标(如通过用户输入的URL参数)。
  • 常见场景
    • 网络爬虫或网页预览功能(用户提交URL,服务端获取内容)。
    • 文件上传/导入功能(服务端从指定URL下载文件)。
    • Webhook回调或API代理功能。

3. 进阶利用技术

3.1 绕过URL过滤规则

问题:防御代码可能通过黑名单(如禁止127.0.0.1localhost)或白名单(仅允许特定域名)限制请求目标。
绕过方法

  • IPv6与IPv4转换
    • 使用IPv6地址[::1]代替127.0.0.1,或缩写形式[::]
    • 利用IPv4映射的IPv6地址(如::ffff:127.0.0.1)。
  • 十进制/八进制IP编码
    • 127.0.0.1 → 十进制2130706433或八进制0177.0.0.1
  • 域名重定向
    • 攻击者控制一个域名(如evil.com),将其DNS解析指向内网IP(如192.168.1.1)。
  • URL解析歧义
    • 利用@符号:https://expected-domain.com@malicious-host.com(部分解析库将@前内容视为认证信息)。
    • 使用斜杠混淆:http://127.0.0.1:80%252fevil.com(双重URL编码绕过路径检查)。

3.2 利用协议处理差异

  • file协议:若允许file://,可直接读取本地文件(如file:///etc/passwd)。
  • gopher协议
    • 支持发送任意TCP数据包,可构造HTTP、Redis、MySQL等协议请求。
    • 示例:通过gopher向内网Redis发送命令,实现未授权访问或主从复制攻击。
  • dict协议:泄露服务端口信息(如dict://127.0.0.1:6379/info获取Redis信息)。

3.3 攻击云元数据服务

  • 目标:云服务器(如AWS、GCP、Azure)的元数据接口(如169.254.169.254)可能暴露敏感信息(密钥、配置)。
  • 绕过技巧
    • 通过重定向:使服务端请求先访问攻击者控制的URL,返回302重定向至元数据接口。
    • 利用HTTP跳转:如http://evil.com/redirect返回Location: http://169.254.169.254/latest/meta-data/

3.4 链式利用内网应用

  • 攻击内网脆弱服务:如通过SSRF访问内网未授权Redis/Jenkins,执行命令或部署恶意负载。
  • 盲SSRF利用:即使无回显,可通过时间延迟(如Redisping命令)或DNS外带数据(如触发DNS查询到攻击者域名)确认漏洞。

4. 防御绕过实战示例

场景:某应用允许用户输入URL生成网页截图,防御代码检查域名是否在白名单(如example.com)。
攻击步骤

  1. 注册子域名evil.example.com,解析到127.0.0.1
  2. 提交URL:http://evil.example.com:8080/@169.254.169.254/metadata
  3. 服务端解析时,白名单验证通过(域名包含example.com),但实际请求发向本地元数据接口。

5. 防御措施进阶

  • 严格白名单:仅允许特定域名或IP,避免使用正则表达式误判。
  • 协议限制:禁用高风险协议(如gopherfiledict)。
  • URL标准化解析:使用统一库(如url.parse())解析后提取主机名,避免解析差异。
  • 网络层隔离:限制服务端出站流量(如防火墙规则禁止访问内网段)。
  • 请求验证:对响应内容类型/大小做限制,避免数据外泄。

6. 总结

SSRF进阶利用核心在于利用解析差异协议特性环境配置绕过表层防御。防御需结合多层级控制(输入验证、网络隔离、最小权限),并通过渗透测试模拟攻击路径查漏补缺。

服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解 1. 知识点描述 服务端请求伪造(SSRF) 是一种由攻击者构造恶意请求,诱使服务端向内部或外部系统发起非预期网络请求的安全漏洞。进阶利用涉及绕过常见防御措施(如黑名单/白名单过滤、URL解析差异等),并利用协议处理差异或内部系统交互实现更深层次的攻击(如访问元数据服务、内网应用渗透、远程代码执行等)。 2. SSRF漏洞原理回顾 核心机制 :攻击者控制服务端发起的请求目标(如通过用户输入的URL参数)。 常见场景 : 网络爬虫或网页预览功能(用户提交URL,服务端获取内容)。 文件上传/导入功能(服务端从指定URL下载文件)。 Webhook回调或API代理功能。 3. 进阶利用技术 3.1 绕过URL过滤规则 问题 :防御代码可能通过黑名单(如禁止 127.0.0.1 、 localhost )或白名单(仅允许特定域名)限制请求目标。 绕过方法 : IPv6与IPv4转换 : 使用IPv6地址 [::1] 代替 127.0.0.1 ,或缩写形式 [::] 。 利用IPv4映射的IPv6地址(如 ::ffff:127.0.0.1 )。 十进制/八进制IP编码 : 127.0.0.1 → 十进制 2130706433 或八进制 0177.0.0.1 。 域名重定向 : 攻击者控制一个域名(如 evil.com ),将其DNS解析指向内网IP(如 192.168.1.1 )。 URL解析歧义 : 利用 @ 符号: https://expected-domain.com@malicious-host.com (部分解析库将 @ 前内容视为认证信息)。 使用斜杠混淆: http://127.0.0.1:80%252fevil.com (双重URL编码绕过路径检查)。 3.2 利用协议处理差异 file协议 :若允许 file:// ,可直接读取本地文件(如 file:///etc/passwd )。 gopher协议 : 支持发送任意TCP数据包,可构造HTTP、Redis、MySQL等协议请求。 示例:通过gopher向内网Redis发送命令,实现未授权访问或主从复制攻击。 dict协议 :泄露服务端口信息(如 dict://127.0.0.1:6379/info 获取Redis信息)。 3.3 攻击云元数据服务 目标 :云服务器(如AWS、GCP、Azure)的元数据接口(如 169.254.169.254 )可能暴露敏感信息(密钥、配置)。 绕过技巧 : 通过重定向:使服务端请求先访问攻击者控制的URL,返回302重定向至元数据接口。 利用HTTP跳转:如 http://evil.com/redirect 返回 Location: http://169.254.169.254/latest/meta-data/ 。 3.4 链式利用内网应用 攻击内网脆弱服务 :如通过SSRF访问内网未授权Redis/Jenkins,执行命令或部署恶意负载。 盲SSRF利用 :即使无回显,可通过时间延迟(如Redis ping 命令)或DNS外带数据(如触发DNS查询到攻击者域名)确认漏洞。 4. 防御绕过实战示例 场景 :某应用允许用户输入URL生成网页截图,防御代码检查域名是否在白名单(如 example.com )。 攻击步骤 : 注册子域名 evil.example.com ,解析到 127.0.0.1 。 提交URL: http://evil.example.com:8080/@169.254.169.254/metadata 。 服务端解析时,白名单验证通过(域名包含 example.com ),但实际请求发向本地元数据接口。 5. 防御措施进阶 严格白名单 :仅允许特定域名或IP,避免使用正则表达式误判。 协议限制 :禁用高风险协议(如 gopher 、 file 、 dict )。 URL标准化解析 :使用统一库(如 url.parse() )解析后提取主机名,避免解析差异。 网络层隔离 :限制服务端出站流量(如防火墙规则禁止访问内网段)。 请求验证 :对响应内容类型/大小做限制,避免数据外泄。 6. 总结 SSRF进阶利用核心在于利用 解析差异 、 协议特性 和 环境配置 绕过表层防御。防御需结合多层级控制(输入验证、网络隔离、最小权限),并通过渗透测试模拟攻击路径查漏补缺。