白帽故事 · 2024年6月14日 0

XSS WAF绕过的一些基本思考

前言

遇到WAF相信大家会很沮丧,今天就分享一个绕过WAF实现XSS的基本思路。

file

通过上图可以看到中间的CloudFlare防火墙将作为右侧服务器的代理服务器。 服务器是labs.hackxpert.com,由XSSRat制作,请求不会直接发送到labs.hackxpert.com,而是通过CloudFlare转发。

故事开始

CloudFlare WAF 附带了许多开箱即用的安全工具,在设置任何规则之前,它通常会检查是否存在恶意用户代理,而实际上拥有自己的用户代理的工具之一是 sqlmap。

虽然本文是针对 XSS 的,但 sqlmap 也是可以检测 XSS的!它对于任何其它 XSS CLI 实用程序的工作方式都是相同的。

如果运行 sqlmap,它将显示带有状态代码的 403 错误,以及访问拒绝错误:

file

如果你尝试从‘防御方’检查该事件,它将显示 sqlmap 的用户代理:

file

为了绕过和欺骗WAF,使请求看起来像来自于常规浏览器,可以使用开发人员工具,或者使用 User Agent Editor插件:

file

file

使用-H参数再次运行sqlmap:

file

在测试单个网站一段时间后,你可能会发送过多的请求,那么你可能会被对方的安全团队‘盯上’,他们可能会ban掉你的 IP 地址。 一般的 IP 阻止规则会类似下面这样:

file

如果使用此类规则后,当你再次访问网站时:

file

一般大家常用的最简单方法就是使用 VPN,但有时候会有另一种情况 – 例如,当有一条规则只接受某些国家/地区的网站(如英国)时,就需要使用专门的英国VPN来实现绕过:

file

因此建议各位避免使用免费的 VPN,因为一是大多速度较慢,二是它们中大多数地址都包含了许多被列入黑名单的 IP。

简单的XSS阻止规则

常用的XSS的测试方法一般是使用其它标签,例如下划线或斜体标签,如下所示:

file

file

一旦标签起作用,那么下一步就可以尝试使用脚本标签,比如添加“”//>“` ,因为这些字符通常有助于转义上下文:

file

file

开发者可能会采取简单粗暴的方法,尝试通过包含脚本标记的 URL 查询字符串,从而进行阻止,WAF 规则会类似于以下内容:

file

该规则仅检查 URL 查询是否包含类似“script”的单词,作为攻击者,只需使用一些大小写字母的混合就可以轻松绕过:

file

file

更先进的防御技术可能会创建一个规则,将 URL 查询转换为小写,然后将其与字符串“script”进行比较:

file

因此,在这种情况下,无论使用哪种大小写,只要WAF看到字符串“script”,就会阻止。因此作为攻击者可以是尝试通过使用某些处理程序来使用其它标签,如下所示:

file
file

该Payload使用了imgHTML 标签,并使用 onerror 事件处理程序来运行指定的alert() 函数,上面的阻止规则轻易被绕过。

这里有一份XSS绕过备忘录,由Portswigger整理,相当完备,你会发现有很多标签可以与一些不需要交互的事件处理程序一起使用。

结语

本文仅仅接触了绕过WAF的皮毛,虽然这很基础,但可以使用这些技术来避免最常见的障碍。

在实际场景中,使用自动请求检测的网站可以更加安全,Cloudflare 或任何其它具有内置 AI 请求比较的 WAF 都具有一些令人惊叹的安全功能,因此绕过WAF也会越来越困难。

希望能对你有所帮助,以上内容由骨哥翻译并整理。

原文:https://ott3rly.medium.com/xss-web-application-firewall-bypass-techniques-510b04a727b1