文章来源|MS08067 Web漏洞挖掘班 第3期
本文作者:Hi2x(Web漏洞挖掘班讲师)
0x00 前言
在了解Bypass Waf之前,我们应该首先了解一些前置知识:
1.Waf是什么
2.Waf的类型
3.Waf的工作原理
1. Waf是什么
Waf全称为Web Application FireWall(Web应用防火墙);顾名思义Waf原理与日常使用防火墙相似,但主要注重在Web页面中存在的对应安全问题。
2.Waf的类型
WAF分为非嵌入型WAF和嵌入型WAF。
非嵌入型是指硬WAF、云WAF、软WAF之类。
嵌入型是指web容器模块类型WAF、代码层WAF。
3.Waf的工作原理
不论是什么类型的Waf,工作的方式几乎差不多。首先,从用户体验上出发,用户的目的是部署Waf从而解决对应的WEB安全问题;所以对于Waf开发来说,需要了解的就是:哪些位置可能会引发安全漏洞、如何判断攻击者利用攻击触发了漏洞。
回顾一下TOP 10的安全漏洞,我们可以得到一个结论,Web漏洞产生的位置基本都为:
1.HTTP头部字段
2.GET、POST提交的内容
3.上传的文件
所以,我们也可以逆推得到Waf构建及工作的原理大致为:
1.构建各种漏洞利用的攻击特征库
2.对漏洞产生位置的内容进行搜集
3.将搜集的内容在特征库中进行匹配,查看是否存在攻击特征并作出相应
更详细的工作流程如下图所示:
建立特征库的流程:
判断恶意攻击流程:
0x01 绕Waf实战
了解完Waf是怎么拦截对应的流量之后,我们就明白了绕Waf的最终目标是绕过特征库检测(即绕过正则匹配)。
那如何绕过正则匹配呢?
主要的方式就两种:
1. 通过Fuzz脚本构造大量Payload进行尝试
2. 通过人为手工探测Waf编写规则。
第一种方式比较暴力,且针对初学者并不是很友好,因为需要很多之前师傅们绕Waf的Payload作为前置知识。
基本思路大致是:对绕过的方法进行搜集构造一些经常绕Waf的字符串,并且利用脚本在漏洞点构造语句 绕Waf字符串 垃圾字符等Payload,通过跑大量Payload的方式爆开可以绕Waf的Payload。
很好,所以我们介绍第二种方法。
前置知识:由于Waf需要尽量满足客户需求,Waf的匹配规则通常会匹配的很详细进而减少误报。
以某安全厂商的Waf产品的规则为例:
那我们就可以通过手工一步步探测Waf的过滤规则是什么,从而进行绕过。
如何进行手工探测Waf的过滤规则请看下一篇推文 浅谈Bypass Waf - 下(实战篇)