通过参数污染的XSS

什么是跨站脚本(XSS)?

跨站脚本(也称为 XSS)是一种 Web 安全漏洞,允许攻击者将恶意代码注入易受攻击的 Web 应用程序中。

XSS 攻击主要分为三种类型。这些都是:

什么是 HTTP 参数污染 (HPP)?

HTTP 参数污染,顾名思义,污染 Web 应用程序的 HTTP 参数,以便执行或实现与 Web 应用程序的预期行为不同的特定恶意任务/攻击。***

现在让我们开始……

在 Hackerone 和 Bugcrowd 的程序中呆了几天之后。我在这些程序上发现了一些漏洞,例如 CSRF 和业务逻辑缺陷。但是,我的所有报告都收到了副本。然后,我心想,这次去寻找一些VDP程序吧。

因此,我开始寻找VDP 程序中的一些错误。经过 2-3 小时的搜寻,我发现一个域在 URL 中使用回调参数将用户重定向到另一个子域。

而且,我不能透露目标的名字。因此,我们假设目标是site.com。而且,URL 看起来像这样:

https://site.com/out?callback=https://subdomain.site.com

而且,如果我打开上面的链接。然后,它会将我重定向到subdomain.site.com.

因此,在看到此重定向后,我尝试使用 https://bing.com 更改回调参数的值。因为我想确认一下,该网站是否正在进行任何类型的验证。如果网站正在进行验证或重定向仅允许 site.com 的子域,则该网站可能不易受到开放重定向的影响。而且,如果网站没有进行任何类型的验证,那么该网站就容易受到攻击。

并且,在更改回调参数的值之后。现在,URL 看起来像这样:

https://site.com/out?callback=https://bing.com

回调参数的值反映在响应中

而且,如果我打开上面的链接。然后,它还会将我重定向到 bing.com。这意味着该网站没有进行任何类型的验证,并且很容易受到开放重定向的影响。但是,在 Burpsuite 中看到它的响应后。我认为,也许这对于跨站点脚本来说也很容易受到攻击,因为回调参数的值也会反射回响应中。

因此,首先,我尝试破坏代码,因为该值反映在脚本标记中。对于,打破变量callbackUrl,我简单地放入anything%22;回调参数。但是,发送此请求后,我收到一个错误,阻止了我的请求。而且,对于其他一些值,我也遇到了相同的错误[like ‘,”]

阻止我的请求的错误

现在,我只有两个选择:

  • 第一个选项是将此问题报告为开放重定向。
  • 第二种选择是寻找绕过 XSS 的方法。

然后,我记得几周前,我观看了Pwnfunction关于HTTP参数污染的视频。因此,我选择第二个选项是寻找绕过 XSS 的方法。而且,我在 URL 中又添加了一个回调参数,用于进行参数污染攻击。现在,URL 看起来像这样:

https://site.com/out?callback=anything&callback=random

使用两个回调参数时的响应

而且,我注意到如果我在 URL 中添加两个相同的参数。然后,我将获取响应中用逗号分隔的两个参数的值。

[like ‘,”]而且,您还知道,当我使用当时的值时,我收到了一个阻止我的请求的错误。但现在,我有两个相同的参数。

于是,我再次尝试破坏变量callbackUrl。但这一次,我放入%22;something%2f%2f了第二个回调参数。添加值后,现在 URL 如下所示:

https://site.com/out?callback=anything&callback=%22;something%2f%2f

能够破坏callbackUrl变量

而且,它有效,我能够破解代码或绕过过滤器。这意味着网站没有对第二个回调参数进行任何验证。

这次,为了获取 XSS 警报,我输入%22;alert%281%29;%2f%2f了第二个回调参数。现在,URL 看起来像这样:

https://site.com/out?callback=anything&callback=%22;alert%281%29;%2f%2f

再次收到阻止请求

再次,该网站阻止了我使用括号的请求。所以,我用 替换了括号URL encoded or ``。但我仍然收到错误。因为网站还在对所有参数做一些验证。

然后,我再次使用``URL 编码(例如%60%60:)。最后,我成功绕过了过滤器。并且,最终 URL 如下所示:

https://site.com/out?callback=anything&callback=%22;alert%60XSS_POC_BY_SAAJAN_BHUJEL%60;%2f%2f

能够绕过过滤器

收到 XSS 警报

现在,我可以成功绕过过滤器并通过参数污染执行 XSS。而且,就我而言,我可以[like ‘,”]通过参数污染攻击绕过某些值的某些过滤器。

提示:-如果您发现您的目标正在对参数进行某种验证检查。然后,尝试添加一个或多个相同的参数。要查看网站响应的任何变化,也许您可​​以绕过验证检查。

感谢您阅读此博客,希望您能学到一些东西。

来源:https://saajan.bhujel.cyou/blog/web/2021-05-05-xss-through-parameter-pollution