【HackerOne】HTTP参数污染+真实案例

admin 2022年7月11日22:08:05评论33 views字数 2028阅读6分45秒阅读模式

0x01 前言

本文参考视频https://www.freebuf.com/video/203522.html,我对内容进行了解读,以便大家更好的理解


0x02 什么是参数污染

【HackerOne】HTTP参数污染+真实案例

【HackerOne】HTTP参数污染+真实案例


一个站点,输入两个同名参数,赋值不同。

为什么输入的是同样的参数,不同的网站,实际取得值是不同的?

有些取的是前面参数的值,有些取得是后面参数的值,有些则是前后参数值都取


这其实取决于网站的后端,如下图所示:

【HackerOne】HTTP参数污染+真实案例


举一个简单的FaceBook的例子

【HackerOne】HTTP参数污染+真实案例


现在有这么一个网站,可以把你写的帖子,同时分享到FaceBook

【HackerOne】HTTP参数污染+真实案例


以上是分享到FaceBook后的链接,可以看到有两个参数,一个是u即你分享的帖子网址,一个是quote即你分享的帖子的标题


仔细看quote的值是cats&dogs,为什么渗透测试的时候,要加个&啊,这是为了验证,该网站是否会对参数进行编码,如果&没有被编码,则代表可以拼接任意参数,实现HTTP参数污染


最后,从上面FaceBook的网址,就可以知道,是PHP写的,那么根据上文图片的后端取值逻辑,我们可以知道,PHP取的是后面参数的值

【HackerOne】HTTP参数污染+真实案例


如果我们提交上面的payload,会发生什么呢?

【HackerOne】HTTP参数污染+真实案例

可以看到,攻击已经成功了,因为如果这样拼接参数的话,就代表会产生两个名为u的参数,而在PHP中,取得是后者,所以前面的u参数被忽略了,变成了攻击者的网址


0x03 利用参数污染ByPass WAF

【HackerOne】HTTP参数污染+真实案例


假如说,我们已知某网站存在sql注入,但是WAF会对payload进行拦截,怎么办?

【HackerOne】HTTP参数污染+真实案例

实行参数污染,提交两个同名参数

如果它的后端是Flask的话,它实际取得是第一个参数的值

如果它的后端是django的话,它实际取得是第二个参数的值

如果它的后端是Node,jsExpress框架的话,它实际取得是两个参数的值,以数组的形式返回


什么时候可以通过参数污染绕过WAF

【HackerOne】HTTP参数污染+真实案例


就是当WEB后端和WAF解析HTTP存在差异的时候,即它们取值不同,如WAF只检查第一个参数,但是WEB后端实际取第二个参数的值

【HackerOne】HTTP参数污染+真实案例


如果说,后端和WAF取的是全部的参数的值

我们就可以把payload进行拆分,分别放到多个同名参数里面


0x04 HackerOne真实案例

https://boards.greenhouse.io/embed/job_app?for=hackerone&token=795069;for=airbnb&b=https://www.hackerone.com/careers

以上请求,由一个GET方式的ifram表单产生

注意URL包括两个for参数,导致了参数污染

这个洞十分有趣,因为这个洞之前已经被修复了,把&给编码了

但还是被绕过了,值得一提的是,这里是通过分号“;”产生的攻击

如果&被编码或转义了,不妨试试分号

https://twitter.com/intent/tweet?text=another_site:https://hackerone.com/gorang_joshi&url=https://owncloud.com/blog-you-can-soon-be-fined/?url=https://vk.com&original_referer=

https://www.facebook.com/sharer.php?u=https://hackerone.com/blog/introducing-signal-and-impact?&u=https://vk.com/durov


以上两个例子,是通过分享功能产生的参数污染

我们将这个链接:https://hackerone.com/blog/introducing-signal-and-impact?&u=https://vk.com/durov发送给受害者,因为里面包含了与分享后的链接的同名参数(URL),所以如果此时受害者想分享这个页面到FaceBook或者Twitter的时候,前面的参数被覆盖了,就会导致攻击


https://www.digits.com/login?consumer_key=9I4iINIyd0R01qEPEwT9IC6RE&host=https://www.periscope.tv&host=https://attacker.com

这个请求,会将数据发送到指定的域名(由host参数控制),但是后端对host参数的值设置了白名单,并不能直接篡改host参数,但是如果提交两个host值,而后端只验证第一个host的值,但是实际接受到的是第二个host的值的话,就会实现参数

精彩推荐

【HackerOne】HTTP参数污染+真实案例

【HVV2022】攻防演练重点端口漏洞全复现(终章)

【hvv2022】溯源反制案例学习笔记,建议收藏!

【FireEye解读】钓鱼网站检测逃逸

【Fireeye解读】Dridex鱼叉式钓鱼攻击



欢迎关注我的公众号:韬光养晦安全
红蓝对抗日常分享,带给你国际安全视野

原文始发于微信公众号(韬光养晦安全):【HackerOne】HTTP参数污染+真实案例

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月11日22:08:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【HackerOne】HTTP参数污染+真实案例http://cn-sec.com/archives/1169931.html

发表评论

匿名网友 填写信息