导语:这篇文章我介绍“我如何能够利用HTTP参数污染(HPP)漏洞的接管用户帐户。
正如标题所示,这篇文章我介绍“我如何能够利用HTTP参数污染(HPP)漏洞的接管用户帐户。HPP是什么,为什么可以接管?以下是一些说明。
HTTP参数污染(如名称所示)Web应用程序的HTTP参数,以执行与Web应用程序的预期行为不符的攻击。HTTP参数污染,简单的讲就是给相同名称参数赋上两个或两个以上的值,导致应用程序以意外方式解释值而出现漏洞。现在的HTTP标准没有提及在遇到相同参数多个赋值时应该怎样处理。因此web程序组件在遇到这类问题时采取的方法也不完全相同。
如以下案列:
search.php?id=110&id=911
这就是典型的相同参数,多个赋值的情况,针对于这种情况,由于HTTP标准没有规定如何处理,是由Werserver来处理这个事情,但是每个Webserver处理时又不相同,针对于这种情况我们可以进行攻击。
最近,我一直在阅读很多相关文章,一些hackerone 报告以及不同的应用程序如何处理它,这使我更清楚如何针对它。我在其中一个印度在线购物网站找到了相同的漏洞,然后我接管了用户帐户。让我们看看我是如何做到的。
https://www.redacted.com/zephyr-mini-alphaboard/p/&pid = ETYDBYSKDDZQGDJD&vi=XXXX
这是一个简单的HPP漏洞,其中添加参数'u'(https://www.redacted.com/zephyr-mini-alphaboard/p/?u=http://www.evil.com&pid=ETYDBYSKDDZQGDJD&vi=XXXX)并在Facebook上分享它,将内容更改为https://www.facebook.com/sharer.php?u=https://www.redacted.com/zephyr-mini-alphaboard/ p /?u-http://www.evil.com&pid=ETYDBYSKDDZQGDJD&vi=XXXX而不是共享刚开始项目,此刻“evil.com”网站的内容正在受害者的Facebook页面上分享。
现在我知道HPP的出现是由于不同的Web服务器和开发框架处理多个相同值参数导致的问题,因此认定基本上是一个后端应用程序技术问题。它既然可以发生在社交分享按钮上,也可以出现在应用程序的其他部分中。在研究更多利用方式时,我想到去测试登录验证页面,其中有一个重置密码功能。
在此之前,我使用“Wappalyzer”分析了后端应用程序框架,显示“JSP和Apache”。现在,提供受害者的邮件ID并提交它,触发以下HTTP请求如下
根据找回密码功能,它生成重置密码链接,取值为“[email protected]”修改这个邮箱指定的密码,并将重置密码链接发送到这个邮件ID。
我测试提供多个“mail”参数但值不相同是否导致后端应用程序框架以不同的方式工作。我添加了攻击者的电子邮件ID,被篡改的请求看起来像(如下图)
后端应用程序(在本例中为JSP)使用第一个“email”参数的值来生成密码重置链接,并使用第二个“email”参数值“[email protected]"中接收重置链接的邮件。第二个“email”参数中邮箱的地址为我们自己的地址,所以邮件我们可控,邮件发送到我们可控的邮箱后,我打开链接, 重新设置了受害者帐户密码并能够登录到这个帐户,这就是我通过HTTP参数污染来破坏任何用户帐户的方式。