HTTP参数污染


文档摘要

HTTP 参数污染 HTTP 参数污染 (HPP) 是一种 Web 攻击规避技术,攻击者可以通过构造 HTTP 请求来操纵 Web 逻辑或获取隐藏信息。这种规避技术的核心在于将攻击向量拆分到多个同名参数实例中(?param1=value&param1=value)。由于没有正式的 HTTP 参数解析方式,不同的 Web 技术在解析和读取同名 URL 参数时有着各自独特的处理方式:有的取第一个出现的值,有的取最后一个出现的值,还有的将其解析为数组。攻击者会利用这些行为差异来绕过基于模式的安全机制。 摘要 工具 方法论 参数污染表 参数污染载荷 参考文献 工具 Burp Suite: 手动修改请求以测试重复参数。 OWASP ZAP: 拦截并操作 HTTP 参数。

HTTP 参数污染

HTTP 参数污染 (HPP) 是一种 Web 攻击规避技术,攻击者可以通过构造 HTTP 请求来操纵 Web 逻辑或获取隐藏信息。这种规避技术的核心在于将攻击向量拆分到多个同名参数实例中(?param1=value&param1=value)。由于没有正式的 HTTP 参数解析方式,不同的 Web 技术在解析和读取同名 URL 参数时有着各自独特的处理方式:有的取第一个出现的值,有的取最后一个出现的值,还有的将其解析为数组。攻击者会利用这些行为差异来绕过基于模式的安全机制。

摘要

工具

  • Burp Suite: 手动修改请求以测试重复参数。
  • OWASP ZAP: 拦截并操作 HTTP 参数。

方法论

HTTP 参数污染 (HPP) 是一种 Web 安全漏洞,攻击者可以在请求中注入多个相同 HTTP 参数的实例。服务器在处理重复参数时的行为可能各不相同,从而导致意外或可被利用的行为。

HPP 可以针对两个层面:

  • 客户端 HPP:利用在客户端(浏览器)上运行的 JavaScript 代码进行攻击。
  • 服务器端 HPP:利用服务器对同名多个参数的处理方式实施攻击。

示例

/app?debug=false&debug=true /transfer?amount=1&amount=5000

参数污染表

当 ?par1=a&par1=b 时

技术 解析结果 结果 (par1=)
ASP.NET/IIS 所有出现的值 a,b
ASP/IIS 所有出现的值 a,b
Golang net/http - r.URL.Query().Get("param") First occurrence a
Golang net/http - r.URL.Query()["param"] 数组中的所有值 ['a','b']
IBM HTTP Server 第一个出现的值 a
IBM Lotus Domino 第一个出现的值 a
JSP,Servlet/Tomcat 第一个出现的值 a
mod_wsgi (Python)/Apache 第一个出现的值 a
Nodejs 所有出现的值 a,b
Perl CGI/Apache 第一个出现的值 a
PHP/Apache 最后一个出现的值 b
PHP/Zues 最后一个出现的值 b
Python Django 最后一个出现的值 b
Python Flask 第一个出现的值 a
Python/Zope 数组中的所有值 ['a','b']
Ruby on Rails 最后一个出现的值 b

参数污染载荷

  • 重复参数:

    param=value1&param=value2
  • 数组注入:

    param[]=value1 param[]=value1&param[]=value2 param[]=value1&param=value2 param=value1&param[]=value2
  • 编码注入:

    param=value1%26other=value2
  • 嵌套注入:

    param[key1]=value1&param[key2]=value2
  • JSON 注入:

    { "test": "user", "test": "admin" }

参考文献

免责声明
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言版本的文件为准。对于关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。


发布者: 作者: 转发
评论区 (0)
U