HTTP参数污染(HPP)是指污染Web应用程序的HTTP参数以实现特定的恶意攻击。它指的是操纵网站如何处理它在 HTTP 请求期间接收到的参数,它改变了网站预期的行为。HTTP 参数污染是一种简单但有效的攻击方式。
当你污染任何参数时,代码只在服务器端运行,这是不可见的,但我们可以在屏幕上看到结果,中间的过程是一个黑盒。
例如,有一个 URL
https://www.anybank.com/send 具有三个参数:
from :
to :
amount :
URL:https://www.anybank.com/send/?from=accountA&to=accountB&amount=10000
现在这是一个正常的 URL,它将处理从 accountA 到 accountB 的 10000 交易,但是如果我们添加另一个相同的参数“from :”会怎么样?所以 URL 将类似于:
https://www.anybank.com/send/?from=accountA&to=accountB&amount=10000&from=accountC
当此 URL 将进行 10000 的交易时,将从 accountC 而不是 accountA 中扣除,这就是您在 HTTP 参数污染攻击中操纵参数的方式。此漏洞的范围不仅限于 GET 请求,您还可以对基于 POST 的请求执行此攻击。你可以在很多地方尝试这个漏洞,比如密码更改、2FA、评论、个人资料照片上传、传递 API 密钥的参数、OTP 等。
当你操纵任何参数时,它的结果取决于每种Web技术如何解析它们的参数。您可以使用“WAppalyzer”来识别 Web 技术。下面是部分技术及其参数解析的截图。
我想分享我在HPP 攻击中的一个案例,我可以利用这个漏洞接管一个帐户。
我如何找到这个漏洞?
1、我访问那个系统的登录页面,它要求一个 OTP 用于登录。
2. 我输入邮箱地址并点击“发送一次性密码”
3. 我使用 burpsuite 拦截请求并使用相同的参数添加了另一个邮箱地址(我创建了两个邮箱用于测试)
4. 我收到了一个 shrey……@gmAIl.com 的OTP ,在我的另一个帐户 radhika……@gmail.com中。
5. 我在那个系统的登录页面输入了这个 OTP ,并进入了shrey用户中心。
所以这里发生的是后端应用程序使用第一个“email”参数的值生成一个 OTP,并使用第二个“email”参数的值来接收该值,这意味着一个 shrey….@gmail.com 的 OTP 被发送到 radhika….@gmail.com。
注意:在第 4 步的图片中,我收到了 radhika…@gmail.com 的 OTP我很困惑,因为消息说你好 Radhika,所以我认为参数没有被污染,OTP 是给 radhika….@ gmail.com, 但当我在尝试 OTP 时 shrey…@gmail.com 它起作用了。
缓解:
应执行适当的输入验证以防止此类攻击。
参考及来源:
https://shahjerry33.medium.com/http-parameter-pollution-its-contaminated-85edc0805654