hacktricks/pentesting-web/parameter-pollution.md
2023-08-03 19:12:22 +00:00

6.9 KiB
Raw Blame History

参数污染

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

摘自 https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654

摘要:

HTTP参数污染HPP是指为了实现特定的恶意任务而污染Web应用程序的HTTP参数。它指的是操纵网站在HTTP请求期间接收到的参数的方式。它改变了网站的行为使其与预期的行为不同。HTTP参数污染是一种简单但有效的攻击方式。

当你污染任何参数时,代码只在服务器端运行,对我们来说是不可见的,但我们可以在屏幕上看到结果。中间的过程是一个黑盒子。

例如有一个URL https://www.anybank.com/send它有三个参数

  1. from
  2. to
  3. amount

URLhttps://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技术。下面是一些技术及其参数解析的屏幕截图。技术及其参数解析

Image for post

我想分享我发现的一个HPP漏洞我能够利用这个漏洞接管一个账户。

我是如何发现这个漏洞的?

  1. 我进入了该程序的登录页面它要求输入一个OTP进行登录

发送OTP

Image for post

  1. 我输入了一个电子邮件地址,并点击“发送一次性密码”

  2. 我使用burp suite拦截了请求并使用相同的参数添加了另一个电子邮件我为测试目的创建了两个电子邮件Burp请求

Image for post

  1. 我在我的另一个账户radhika....@gmail.com上收到了一个shrey....@gmail.com的OTP OTP

Image for post

  1. 我复制了OTP并在该程序的登录界面上输入了shrey....@gmail.com我输入了这个OTP然后我就进入了这个账户。接管账户

Image for post

所以这里发生的情况是后端应用程序使用第一个“email”参数的值生成了一个OTP并使用第二个“email”参数的值提供了这个值这意味着shrey....@gmail.com的OTP被发送到radhika....@gmail.com。

**注意:**在第4步的图像中我收到了一个发给radhika....@gmail.com的OTP我感到困惑因为消息上写着Hi Radhika所以我以为参数没有被污染OTP是给radhika....@gmail.com的但是当我在shrey....@gmail.com上尝试了这个OTP时它起作用了。

Flask和PHP

这篇文章你可以看到在运行在Apache HTTP服务器上的Flask和PHP中a=1&a=2这样的HTTP查询会被解释为不同的结果。在Flask中参数将是1第一次出现而在PHP中参数将是2(最后一次出现)。

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥