通过参数污染触发XSS
字数 838 2025-08-05 11:39:40

HTTP参数污染触发XSS漏洞分析与利用

基础知识

XSS类型概述

  1. 反射型XSS:恶意脚本来自当前HTTP请求
  2. 存储型XSS:恶意脚本来自网站的数据库
  3. 基于DOM的XSS:漏洞存在于客户端代码而不是服务器端代码中

HTTP参数污染(HPP)

HTTP参数污染会污染Web应用程序的HTTP参数,以执行或实现与Web应用程序预期行为不同的特定恶意任务/攻击。

漏洞发现过程

  1. 目标URL结构:

    https://site.com/out?callback=https://subdomain.site.com
    
    • 该URL使用callback参数将用户重定向到另一个域名
  2. 初始测试:

    • 修改callback参数值为https://bing.com
    • 确认网站未进行重定向验证,存在Open Redirect漏洞
  3. 深入分析:

    • callback参数值会反映在响应包的script标签中
    • 尝试注入%22等特殊字符时被拦截

参数污染绕过技术

基本绕过方法

  1. 添加重复参数:

    https://site.com/out?callback=anything&callback=random
    
    • 响应中会获得两个参数的值,用逗号分隔
  2. 注入测试:

    https://site.com/out?callback=anything&callback=%22;something%2f%2f
    
    • 第二个callback参数未被拦截

XSS触发

  1. 最终payload:
    https://site.com/out?callback=anything&callback=%22;alert%281%29;%2f%2f
    
    • 成功绕过过滤器触发XSS

技术要点总结

  1. 参数污染原理:当服务器接收多个同名参数时,处理方式可能不同

    • 某些框架会合并参数值
    • 某些框架会取第一个或最后一个值
    • 这种不一致性可被利用绕过安全检测
  2. 绕过技巧

    • 前端可能只验证第一个参数
    • 后端可能合并或使用最后一个参数
    • 通过添加多个同名参数可绕过单参数验证
  3. 防御建议

    • 统一参数处理逻辑
    • 严格验证所有同名参数
    • 实施输出编码
    • 使用内容安全策略(CSP)

实际应用场景

  1. 适用于存在参数反射且对特殊字符有过滤的场景

  2. 特别适合以下情况:

    • 参数值直接输出到JavaScript代码中
    • 网站对单参数有严格过滤
    • 后端框架对多参数处理不一致
  3. 扩展应用:

    • 可尝试结合其他技术如HTML注入、DOM操作等
    • 可用于绕过CSRF令牌验证等场景

参考资源

  1. XSS through Parameter Pollution
  2. OWASP关于HTTP参数污染的文档
  3. 各Web框架对多参数的处理规范
HTTP参数污染触发XSS漏洞分析与利用 基础知识 XSS类型概述 反射型XSS :恶意脚本来自当前HTTP请求 存储型XSS :恶意脚本来自网站的数据库 基于DOM的XSS :漏洞存在于客户端代码而不是服务器端代码中 HTTP参数污染(HPP) HTTP参数污染会污染Web应用程序的HTTP参数,以执行或实现与Web应用程序预期行为不同的特定恶意任务/攻击。 漏洞发现过程 目标URL结构: 该URL使用callback参数将用户重定向到另一个域名 初始测试: 修改callback参数值为 https://bing.com 确认网站未进行重定向验证,存在Open Redirect漏洞 深入分析: callback参数值会反映在响应包的script标签中 尝试注入 %22 等特殊字符时被拦截 参数污染绕过技术 基本绕过方法 添加重复参数: 响应中会获得两个参数的值,用逗号分隔 注入测试: 第二个callback参数未被拦截 XSS触发 最终payload: 成功绕过过滤器触发XSS 技术要点总结 参数污染原理 :当服务器接收多个同名参数时,处理方式可能不同 某些框架会合并参数值 某些框架会取第一个或最后一个值 这种不一致性可被利用绕过安全检测 绕过技巧 : 前端可能只验证第一个参数 后端可能合并或使用最后一个参数 通过添加多个同名参数可绕过单参数验证 防御建议 : 统一参数处理逻辑 严格验证所有同名参数 实施输出编码 使用内容安全策略(CSP) 实际应用场景 适用于存在参数反射且对特殊字符有过滤的场景 特别适合以下情况: 参数值直接输出到JavaScript代码中 网站对单参数有严格过滤 后端框架对多参数处理不一致 扩展应用: 可尝试结合其他技术如HTML注入、DOM操作等 可用于绕过CSRF令牌验证等场景 参考资源 XSS through Parameter Pollution OWASP关于HTTP参数污染的文档 各Web框架对多参数的处理规范