知了堂|WAF绕过思路

392 阅读6分钟

WAF在渗透测试中,是我们要面对的第一关卡,渗透测试人员对站点WAF的绕过过程就是渗透测试人员与网站管理员(或WAF开发者)进行PK的过程。在对WAF的渗透时,一般可以考虑采用以下方式展开。

一、增加WAF负担

WAF是为网站安全服务的,但是WAF的存在如果干扰了网站的正常运行,则会得不偿失,因此,网站管理员一般会恰当的配置WAF,起到在不会干扰网站正常运行的前提下,对用户的输入进行过滤的作用。因此,有些WAF就会设置如果数据包长度过长,就对部分数据包或者是数据包的部分内容进行无检测“放行”,根据这一原理,可以考虑以增加WAF负担的方式,进行绕过WAF。

1、增加变量参数个数

有些云WAF,因为配置的原因,在检测参数时,只会检测部分参数,如safedog,只会检测前100个参数,这样,就可以人为的加入很多没有意义的参数,然后把有用的参数放到最后面,就可以绕过云waf的检验了。

2、增加参数长度

此方式常见于文件上传漏洞中对于用户文件内容进行检测的场景,增加前面无意义的内容,把webshell放在文件的最后,即可绕过WAF的检验。此外,在进行SQL注入测试时,故意增加url的长度,并将其注释掉,也可以起到一定的效果。在进行XSS测试的时候,加入一些无意义的数据,也可以起到相应相应的作用。

3、增加WAF负载

采用这种方式一定要在有把握的情况下进行,原理是有些WAF在进行工作的时候,如果站点流量过大,则为了保证网站的可用性,会放弃对部分数据包的检验。因此,我们可以向WAF大量的发送正常的数据包,同时在其中夹杂异常的数据包,此时或许绕过WAF的检验。当然,在这种情况下,要谨慎的设置攻击模式,避免用此方式对站点造成的宕机。

二、构造异常数据包

WAF不是人,因此WAF在进行检验匹配的时候会比较死板(ps:有些云WAF,会采取基于大数据和机器学习算法的防御方式,这个时候就可能比较难以注入),尤其是在采取黑名单为基础的过滤方式情况下,更明显的表现在没有对WAF进行合理配置的情况下,在这种情况下,人为的故意发送异常的数据包,可能会起到绕过WAF的作用。(ps:当然了,构造的数据包也不能过于奇葩,导致服务器站点不能解析数据包中的内容,这样就没用了)

此外,WAF和网站的配合有时并不会那么完美,有些网站中间健所含有的漏洞,未必被WAF所保护,考虑到WAF是通用配置,在防护Nginx、windows和Apache等不同站点类型的情况下,未必能够配置的那么完美,因此,WAF在设计过程中,存在天然的缺陷,而这些缺陷就可以被我们利用。

1、双参数绕过

有时,可以使用双参数绕过的方式来绕过WAF,比如说网站有一个参数id,则可以在数据包中含有两个id参数,这时WAF有可能只检查了第一个id的内容,从而第二个id的poc进入到服务器被执行。

2、请求方式转换

有时,WAF会只检验GET类型的包,而忽略掉POST类型的包,或者相反。在这种情况下,就可以修改数据包的类型,尝试绕过数据包。有时,把数据包改成其他的,如request类型或者是根本就不存在的类型也会起到意想不到的效果。

3、绕过匹配规则

这里的通用绕过思路,即在进行sql注入测试、XSS测试、文件相关漏洞测试等测试时一些通用的绕过思路,常见的有:

①双写绕过

②大小写绕过

③编码绕过

④注释绕过

⑤使用不常用的函数

⑥文件上传相关绕过方式

⑦字符串拼接

⑧空白符绕过

三、绕过WAF

有时,站点采用了云WAF,此时,如果能够找到真实的服务器IP地址,则可以绕过WAF的检验,在这里,这种方式我先不细讲。除了绕过云WAF之外,由于站点再配置过程中的问题,会存在其他类型的WAF的绕过方式。

1、旁站绕过

有时,网站管理员在配置WAF的时候会出现疏漏,针对http和https协议的80和443端口有时并没有全部进行防护,因此,在这种情况下,不妨在地址栏中,把http改为https(或者进行相反的操作),说不定会有意外收获!

2、表名单绕过

云WAF在配置过程中,有时会选择“信任”部分数据包,这部分数据包不会被云WAF进行匹配检验,在WAF里维持着一个白名单列表,凡是在符合白名单的要求,WAF就不会进行检测。因此,基于这种思路,我们就可以把我们访问的数据包伪装成白名单上的数据包,这样就可以绕过WAF的检验了。

①伪装成爬虫

有的时候,站点为了提高自己在SEO上的排名,会设置对大型搜引擎的爬虫不做检验,这个时候,只要在数据包中user-agent字段中把原始的信息替换成搜索引擎信息,就可以绕过WAF的检验了。

②伪装成自己

有些网站不会对自己(即物理机上的操作)进行检验,因此,可以在数据包中设置X-FARWARDED-FOR头,或者是X-Originating-IP,将其设置为127.0.0.1,这样就可以绕过WAF了。

3、目录伪装绕过

有时,WAF会设置不拦截针对特定目录的数据包,如admin等。有时是通过检测数据包中是否含有指定的关键字符串来判定的。这时,我们可以根据这一特性,通过…/等方式人为的构造含有这些指定目录字符串特性的数据包,从而绕过WAF的检验。360webscan脚本会对admin dede install等目录不做拦截,这样就可以构造含有这些字符串的数据包,从而进行绕过。

总之,WAF是基于规则的绕过,这样WAF在工作的时候就有天然的缺陷型,限制了WAF作用的发挥,导致想防火墙一样,总是存在着各种各样的绕过姿势。只要渗透测试者认真一点,发挥自己的脑洞,就一定能找到合适的方法进行绕过。