小众WAF绕过有哪些?我踩了三天坑,终于摸清了这些野路子
哎,兄弟们,做安全测试这行真的不容易啊!前几天接了个渗透测试的活儿,网站前面套着个主流WAF(Web应用防火墙),我常规的SQL注入、XSS攻击手法全被拦得死死的,那叫一个郁闷,但是咱干这行不能认输啊,于是我这三天没日没夜地研究,还真给我捣鼓出了一些小众WAF绕过的骚操作,今天不藏着掖着,拿出来跟大伙儿唠唠,全是肺腑之言!

为啥非得研究“小众”绕过?主流思路早被盯死了!
说实话,现在市面上主流WAF的规则库更新快得吓人,像SQL关键字、XSS事件触发这些,大路货的编码、分块传输手段基本白搭——人家AI引擎看的是语义,你改成大小写、加注释?哼,直接被精准拦截。
但我发现,真正能突破防线的,往往是那些小众WAF绕过技巧,为啥?因为这类方法利用的是WAF的“逻辑盲区”或者是“非主流协议的解析差异”,你想想,WAF要处理海量请求,它不可能对每个边缘逻辑都做到完美兼容,这就是我们的机会啊!我这几天试了N种姿势,最后发现有效的基本都集中在下面这几类。
第一类野路子:畸形数据包与分块传输的变种
很多人知道用Transfer-Encoding: chunked绕WAF,但兄弟们,这招早就烂大街了!我试了个变种,把分块的大小改成负数,或者干脆在分块结束标志0\r\n\r\n后面再塞点垃圾数据,诶?有意思的来了,某些WAF在解析时直接就蒙圈了,它认不出这是完整的请求,直接放行了!我当时看到后端返回200 OK的时候,激动得差点把咖啡洒在键盘上,这种小众WAF绕过的核心在于:让WAF的协议栈和后端服务器(比如Nginx或者Tomcat)的解析产生差异。
还有,用Content-Length和Transfer-Encoding同时存在并互相冲突,也是经典,但别用那种明晃晃的冲突,太容易被识别,你得把Content-Length的值故意算错一位,让WAF以为请求没完,而后端却从Transfer-Encoding截取了完整数据,哎,这个细节一说就透,但真正能想到的人不多。
第二类野路子:参数污染与HPP的进阶玩法
呃,说到这个我真的挺无语的,很多人以为HPP(HTTP参数污染)就是把?id=1&id=2传两个一样的参数,太嫩了!我这几天试的小众WAF绕过是把参数放在Cookie里,或者放在User-Agent的某个角落,然后用分号或者换行符去截断,WAF光盯着GET/POST的body看,哪会注意Cookie里的猫腻?
我给你举个例子:后端PHP代码是$_GET['id'],你在URL里就传一个空?id=1,把真正的payload塞进Cookie,命名为id=1 union select...,再用一个分号去掉WAF的解析,结果呢?某些老旧的WAF规则正则只匹配URL和body,完全忽略了Cookie头里面的脏数据,这需要后端有条件接收,但一旦成功,那成就感没得说!这种思路真的很小众,因为文档里都不教,全靠自己试错。
第三类野路子:利用JSON/XML的解析逃逸
现在很多API喜欢用Content-Type: application/json,WAF也会去解析JSON,但小众WAF绕过妙在哪儿呢?妙在利用Unicode转义和超长键值。
我在JSON里写"\u0075nion"(这是union的Unicode表示),后端Java的JSON库会自动解码成union,但WAF的规则引擎可能傻乎乎地不认这个,直接跳过检测!还有一招,构造一个超长的key,比如"xxxxxxxxxx...": 1,让WAF的正则匹配超时或者内存溢出,它一慌,就干脆放弃检测了,哎,这算不算欺负老实人?但渗透测试就是这样,不讲武德,只讲结果。
第四类野路子:针对资源限制的“慢速”绕过
这个是纯思路上的,我发现当请求体特别大,比如几十MB的POST数据时,WAF为了不影响性能,往往只检测前几KB和最后几KB,这时候,我把恶意SQL语句放在请求体的正中间,用海量的垃圾数据包裹起来,你猜怎么着?WAF扫了个寂寞,直接放行!这种小众WAF绕过在传输层上就是典型的“过载攻击”,但必须注意,别把自己服务器搞崩了,适度就好。
再补充一个:Multipart/form-data边界混乱,正常文件上传的boundary都规规矩矩的,我把boundary字符串中间插入一个\0或者%00,导致WAF认为这是一个二进制流而跳过关键词检测,后端处理时又还原了正常文本,嘿嘿,这个操作我在一些老牌CMS上屡试不爽。
总结一下我的情绪波动与心得
说实话,研究这些小众WAF绕过的过程真的是痛苦与快乐并存,一开始被拦,心情那叫一个暴躁;后来试通一个,那种“柳暗花明又一村”的舒爽,真的比吃火锅还带劲!所以啊,干安全这行,思维一定不能固化。
但我也得提醒一句,这些技术是用来做合法授权的安全测试用的!可别拿去干坏事,不然进橘子洲头喝茶我可救不了你,好啦,废话不多说,今天分享的这几个小众WAF绕过思路,你们要是遇到顽固的WAF,不妨试试看,如果有用,记得回来给我点个赞;如果没用,那咱们评论区再掰扯掰扯,我也好再学两手!
最后给大家留个思考题: 你知道怎么用DNS over HTTPS来隐藏真正的攻击流量,从而绕过WAF的域名黑名单吗?这个下一篇再聊,嘿嘿,得给咱自己留点干货不是?