深入探究:反向代理的攻击面 (下)
字数 1565 2025-08-26 22:11:34

反向代理攻击面深度分析(下)

服务端攻击:请求错误路由

Nginx路径遍历漏洞(例子2)

漏洞原理

  • Nginx的location规则匹配前缀/to_app时,会匹配任何以/to_app开头的路径
  • 代理规则会将匹配后的剩余部分与proxy_pass指定的路径拼接
  • 通过构造特殊路径可实现目录遍历

配置示例

location /to_app {
    proxy_pass http://server/any_path/;
}

攻击方法

GET /to_app../other_path HTTP/1.1

处理流程

  1. Nginx匹配/to_app前缀
  2. 提取剩余部分../other_path
  3. proxy_pass拼接为http://server/any_path/../other_path
  4. 后端服务器解析后实际访问http://server/other_path

Haproxy绝对URI绕过(例子3)

漏洞原理

  • Haproxy不支持绝对URI格式的请求
  • 但会直接转发此类请求到后端服务器
  • 可绕过基于Host头的路由限制

配置示例

frontend http-in
    acl host_example1 hdr(host) -i example1.com
    use_backend example1_backend if host_example1
backend example1_backend
    server server1 192.168.78.1:9999 maxconn 32

攻击方法

GET http://unsafe-value/path/ HTTP/1.1
Host: example1.com

特殊案例

  • Apache某些版本会从ProxyPass解析提取主机值
  • 可构造GET @evil.com HTTP/1.1实现SSRF攻击

客户端攻击

浏览器路径处理差异

各浏览器特性

  • Chrome/IE:不解码%2f,不规范化/path/anything/..%2f../
  • Firefox:旧版本不做URL解码,新版类似Chrome
  • Safari:不处理URL编码,直接发送/path/%2e%2e/another_path/
  • IE:对本地地址不处理路径

标头修改滥用攻击

案例场景

  • Nginx代理Tomcat后端
  • Tomcat默认设置X-Frame-Options: deny
  • /iframe_safe/路径需要iframe访问,Nginx配置删除该标头

配置示例

location /iframe_safe/ {
    proxy_pass http://tomcat_server/iframe_safe/;
    proxy_hide_header "X-Frame-Options";
}
location / {
    proxy_pass http://tomcat_server/;
}

攻击方法

<iframe src="http://nginx_with_tomcat/iframe_safe/..;/any_other_path">

攻击原理

  1. 浏览器不规范化路径
  2. Nginx匹配/iframe_safe/规则
  3. Tomcat解析..;/为路径参数
  4. 绕过X-Frame-Options限制,导致点击劫持

缓存相关攻击

缓存工作机制

关键点

  • 缓存基于主机头和路径
  • 检查Cache-ControlSet-Cookie标头
  • Set-Cookie存在则不缓存
  • Cache-Control决定缓存策略:
    • no-cache, no-store, must-revalidate:禁止缓存
    • public, max-age=31536000:允许缓存

Web缓存欺骗攻击

案例场景

  • Nginx强制缓存Tomcat的/images目录
  • 忽略后端Cache-Control标头

配置示例

location /images {
    proxy_cache my_cache;
    proxy_pass http://tomcat_server;
    proxy_cache_valid 200 302 60m;
    proxy_ignore_headers Cache-Control Expires;
}

攻击方法


攻击流程

  1. 受害者访问恶意URL
  2. Nginx匹配/images规则并转发
  3. Tomcat处理/index.jsp返回敏感数据
  4. Nginx缓存响应
  5. 攻击者获取缓存中的敏感信息

缓存中毒攻击

案例场景

  • Nuster(Haproxy缓存代理)缓存/img/目录
  • Web应用存在self-XSS漏洞

配置示例

nuster cache on
nuster rule img ttl 1d if { path_beg /img/ }

攻击方法

/img/..%2faccount/attacker/

攻击流程

  1. 构造特殊URL匹配缓存规则
  2. 后端返回XSS响应
  3. 代理服务器缓存XSS响应
  4. 其他用户访问时触发XSS

防御建议

  1. 路径规范化

    • 实现统一的路径规范化标准
    • 严格验证路径中的特殊字符
  2. 缓存策略

    • 避免过度宽松的缓存规则
    • 对敏感内容严格设置Cache-Control
    • 不要忽略后端的安全标头
  3. 标头处理

    • 谨慎修改安全相关标头
    • 对修改标头的规则进行严格测试
  4. 代理配置

    • 了解不同代理服务器的特性差异
    • 测试边界条件下的代理行为
  5. 持续监控

    • 监控异常的代理行为
    • 定期审计代理配置规则

扩展研究资源

  1. Web缓存欺骗研究
  2. 原始研究数据
  3. 实用Web缓存中毒技术
反向代理攻击面深度分析(下) 服务端攻击:请求错误路由 Nginx路径遍历漏洞(例子2) 漏洞原理 : Nginx的 location 规则匹配前缀 /to_app 时,会匹配任何以 /to_app 开头的路径 代理规则会将匹配后的剩余部分与 proxy_pass 指定的路径拼接 通过构造特殊路径可实现目录遍历 配置示例 : 攻击方法 : 处理流程 : Nginx匹配 /to_app 前缀 提取剩余部分 ../other_path 与 proxy_pass 拼接为 http://server/any_path/../other_path 后端服务器解析后实际访问 http://server/other_path Haproxy绝对URI绕过(例子3) 漏洞原理 : Haproxy不支持绝对URI格式的请求 但会直接转发此类请求到后端服务器 可绕过基于Host头的路由限制 配置示例 : 攻击方法 : 特殊案例 : Apache某些版本会从 ProxyPass 解析提取主机值 可构造 GET @evil.com HTTP/1.1 实现SSRF攻击 客户端攻击 浏览器路径处理差异 各浏览器特性 : Chrome/IE :不解码 %2f ,不规范化 /path/anything/..%2f../ Firefox :旧版本不做URL解码,新版类似Chrome Safari :不处理URL编码,直接发送 /path/%2e%2e/another_path/ IE :对本地地址不处理路径 标头修改滥用攻击 案例场景 : Nginx代理Tomcat后端 Tomcat默认设置 X-Frame-Options: deny /iframe_safe/ 路径需要iframe访问,Nginx配置删除该标头 配置示例 : 攻击方法 : 攻击原理 : 浏览器不规范化路径 Nginx匹配 /iframe_safe/ 规则 Tomcat解析 ..;/ 为路径参数 绕过X-Frame-Options限制,导致点击劫持 缓存相关攻击 缓存工作机制 关键点 : 缓存基于主机头和路径 检查 Cache-Control 和 Set-Cookie 标头 Set-Cookie 存在则不缓存 Cache-Control 决定缓存策略: no-cache, no-store, must-revalidate :禁止缓存 public, max-age=31536000 :允许缓存 Web缓存欺骗攻击 案例场景 : Nginx强制缓存Tomcat的 /images 目录 忽略后端 Cache-Control 标头 配置示例 : 攻击方法 : 攻击流程 : 受害者访问恶意URL Nginx匹配 /images 规则并转发 Tomcat处理 /index.jsp 返回敏感数据 Nginx缓存响应 攻击者获取缓存中的敏感信息 缓存中毒攻击 案例场景 : Nuster(Haproxy缓存代理)缓存 /img/ 目录 Web应用存在self-XSS漏洞 配置示例 : 攻击方法 : 攻击流程 : 构造特殊URL匹配缓存规则 后端返回XSS响应 代理服务器缓存XSS响应 其他用户访问时触发XSS 防御建议 路径规范化 : 实现统一的路径规范化标准 严格验证路径中的特殊字符 缓存策略 : 避免过度宽松的缓存规则 对敏感内容严格设置 Cache-Control 不要忽略后端的安全标头 标头处理 : 谨慎修改安全相关标头 对修改标头的规则进行严格测试 代理配置 : 了解不同代理服务器的特性差异 测试边界条件下的代理行为 持续监控 : 监控异常的代理行为 定期审计代理配置规则 扩展研究资源 Web缓存欺骗研究 原始研究数据 实用Web缓存中毒技术