服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解
字数 1370 2025-11-09 23:20:31

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

知识点描述
服务端请求伪造(SSRF)是一种由攻击者构造恶意请求,诱使服务器向内部或第三方系统发起请求的攻击。进阶利用涉及绕过基础防御、访问云元数据服务、利用协议处理差异等场景。防御绕过技术则针对黑名单过滤、URL解析混淆等方法。

攻击原理与危害

  1. 核心机制:攻击者控制服务器发起请求的目标,例如:
    • 通过修改参数(如url=http://内部IP)使服务器访问内网资源。
    • 利用服务器权限读取本地文件(如file:///etc/passwd)。
  2. 危害范围
    • 内网探测:扫描内网端口和服务。
    • 云环境风险:访问云厂商元数据接口(如AWS的169.254.169.254)获取临时凭证。
    • 绕过网络隔离:通过服务器作为跳板攻击受限系统。

进阶利用技术

  1. 协议利用
    • Gopher协议:支持发送任意TCP数据包,可伪装成POST请求或Redis命令。
      示例:gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0ax%0d%0a$1%0d%0ay%0d%0a 可向Redis插入数据。
    • Dict协议:探测端口信息(如dict://127.0.0.1:22返回SSH标识)。
  2. URL解析混淆
    • 利用解析差异绕过黑名单:
      • 十进制IP:http://2130706433(等同于127.0.0.1)。
      • 省略端口默认值:http://127.0.0.1:80/http://127.0.0.1可能被不同处理。
    • 特殊字符绕过:
      • 使用@符号:http://example.com@恶意IP
      • Unicode编码:将点号替换为(全角符号)或%2E
  3. 重定向利用
    • 控制外部域名返回302跳转到内网地址,绕过直接URL检测。
      示例:攻击者域名配置重定向到http://169.254.169.254/latest/meta-data/

防御绕过技术

  1. 黑名单绕过
    • 使用备用IP格式(如八进制IP0177.0.0.1或IPv6缩写[::])。
    • 域名指向内网IP:通过短域名服务或DNS别名解析。
  2. 白名单绕过
    • 利用子域名拼接:若白名单允许*.example.com,可注册evil.com.example.com
    • 通过基本认证参数嵌入:http://expected-domain.com@恶意IP
  3. 协议封装
    • 将HTTP请求封装到其他协议(如FTP、SFTP)中,利用库函数解析差异。

防御措施

  1. 输入验证
    • 使用白名单校验协议(仅允许HTTP/HTTPS)和域名。
    • 解析URL后提取主机名,避免通过正则表达式直接匹配。
  2. 网络层控制
    • 禁止服务器访问内网和元数据服务(通过防火墙规则或网络配置)。
    • 使用中间代理隔离请求,仅允许访问公网资源。
  3. 代码层防护
    • 禁用非常用协议(如file://gopher://)的库支持。
    • 对响应内容类型做严格检查,避免数据泄露。

总结
SSRF防御需结合多层级措施:输入校验、网络隔离、最小化服务器权限。攻击者常利用系统组件差异(如URL解析库与业务逻辑不一致)实现绕过,因此需定期测试边界情况。

服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解 知识点描述 服务端请求伪造(SSRF)是一种由攻击者构造恶意请求,诱使服务器向内部或第三方系统发起请求的攻击。进阶利用涉及绕过基础防御、访问云元数据服务、利用协议处理差异等场景。防御绕过技术则针对黑名单过滤、URL解析混淆等方法。 攻击原理与危害 核心机制 :攻击者控制服务器发起请求的目标,例如: 通过修改参数(如 url=http://内部IP )使服务器访问内网资源。 利用服务器权限读取本地文件(如 file:///etc/passwd )。 危害范围 : 内网探测:扫描内网端口和服务。 云环境风险:访问云厂商元数据接口(如AWS的 169.254.169.254 )获取临时凭证。 绕过网络隔离:通过服务器作为跳板攻击受限系统。 进阶利用技术 协议利用 : Gopher协议 :支持发送任意TCP数据包,可伪装成POST请求或Redis命令。 示例: gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0ax%0d%0a$1%0d%0ay%0d%0a 可向Redis插入数据。 Dict协议 :探测端口信息(如 dict://127.0.0.1:22 返回SSH标识)。 URL解析混淆 : 利用解析差异绕过黑名单: 十进制IP: http://2130706433 (等同于 127.0.0.1 )。 省略端口默认值: http://127.0.0.1:80/ 与 http://127.0.0.1 可能被不同处理。 特殊字符绕过: 使用 @ 符号: http://example.com@恶意IP 。 Unicode编码:将点号替换为 。 (全角符号)或 %2E 。 重定向利用 : 控制外部域名返回302跳转到内网地址,绕过直接URL检测。 示例:攻击者域名配置重定向到 http://169.254.169.254/latest/meta-data/ 。 防御绕过技术 黑名单绕过 : 使用备用IP格式(如八进制IP 0177.0.0.1 或IPv6缩写 [::] )。 域名指向内网IP:通过短域名服务或DNS别名解析。 白名单绕过 : 利用子域名拼接:若白名单允许 *.example.com ,可注册 evil.com.example.com 。 通过基本认证参数嵌入: http://expected-domain.com@恶意IP 。 协议封装 : 将HTTP请求封装到其他协议(如FTP、SFTP)中,利用库函数解析差异。 防御措施 输入验证 : 使用白名单校验协议(仅允许HTTP/HTTPS)和域名。 解析URL后提取主机名,避免通过正则表达式直接匹配。 网络层控制 : 禁止服务器访问内网和元数据服务(通过防火墙规则或网络配置)。 使用中间代理隔离请求,仅允许访问公网资源。 代码层防护 : 禁用非常用协议(如 file:// 、 gopher:// )的库支持。 对响应内容类型做严格检查,避免数据泄露。 总结 SSRF防御需结合多层级措施:输入校验、网络隔离、最小化服务器权限。攻击者常利用系统组件差异(如URL解析库与业务逻辑不一致)实现绕过,因此需定期测试边界情况。