绕过 腾讯t sec web应用防火墙 waf
腾讯云的绕过T-Sec WAF,说白了就是腾讯一堆规则加一个智能学习引擎。规则库是应用防死的,能绕。火墙引擎是绕过活的,但也没那么神。腾讯我见过太多人拿它当铁板,应用防其实它更像一张渔网——网眼大,火墙捞大鱼,绕过小鱼小虾反而容易溜过去。腾讯
最蠢的应用防绕过方式,是火墙直接改包。把Content-Type从application/json换成text/plain,绕过有些规则就瞎了。腾讯为什么?应用防因为解析器会走不同的分支。腾讯的WAF对表单提交和JSON解析用的是两套逻辑,你混着来,它就容易懵。我试过一次,把SQL注入的payload塞进一个multipart/form-data的边界字段里,居然过了。不是腾讯弱,是协议解析的复杂性决定的——任何产品都不可能把每种畸形报文都吃透。
更高级点的玩法,是利用编码差异。WAF解码一次,后端应用解码一次,甚至两次。你提交一个双重URL编码的payload,WAF解第一层,看到的是无害字符,放行。后端拿到后又解一层,好家伙,攻击语句出来了。这招老套,但依然有效,因为很多开发者在后端用了不同的解码库,或者框架自带二次解码。我见过一个Java应用,用Tomcat默认配置,它居然会先解一次%25编码,再解一次%u编码。你送个%2527过去,WAF看到的是%27,认为是合法的单引号转义,直接放行。Tomcat解完变成',注入成功。这种漏洞是架构层面的,不是规则能堵住的。
还有一招,叫“协议走私”。HTTP请求头里塞两个Content-Length,一个说长度是10,一个说长度是100。WAF按第一个读,读到的是干净数据,检查通过。后端服务器按第二个读,读到的是你藏在后面的恶意内容。腾讯的WAF对这种情况有检测,但如果你用分块传输编码(Transfer-Encoding: chunked)再掺和一下,很多情况下它还是会漏。这不是腾讯的问题,是所有WAF的宿命——它们和源站对HTTP协议的理解永远存在细微偏差。
别急着高兴,这些手段在2024年之后越来越难用了。腾讯加了语义分析,不再是简单的正则匹配。你堆一堆混淆字符,它反而怀疑你。我最近试过一种更刁钻的:利用JavaScript的注释符和HTML实体编码混搭,把XSS payload拆成几十个碎片,每个碎片单独看都是安全的。WAF的引擎需要拼凑上下文才能判断,但它的上下文窗口有限,拼不全。结果就是,攻击代码在浏览器里重组成功,而WAF只看到一堆无害的标签。
说到底,WAF是个概率游戏。你不可能100%绕过,但也不需要100%绕过。只要找到那个特定的接口、特定的参数、特定的编码组合,就能钻过去。腾讯的T-Sec在规则更新速度上算快的,但规则永远滞后于攻击手法。真正的突破口往往不在WAF本身,而在你和源站之间的“缝隙”——比如CDN回源协议不一致,或者源站直接暴露了IP,根本不走WAF。这才是最致命的。你扫一下子域名的历史DNS记录,经常能翻出源站IP,然后绕过所有防护直接打后端。WAF再强,看不见的流量它也管不着。
写这些不是教人干坏事,是提醒做防护的:别迷信单层防御。你该做的是把WAF当第一道闸门,而不是最后一道城墙。真正的安全,藏在代码审计和纵深防御里。
