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