在Web安全攻防实战中,WAF(Web应用防火墙)是保护网站应用的第一道防线,而PHP作为最流行的服务端脚本语言之一,其灵活的语法特性常常成为绕过WAF检测的突破口。核心上文小编总结在于:PHP中括号(包括圆括号、方括号[]、花括号)的多种变形用法与编码技巧,能够有效模糊攻击特征,利用WAF规则库的盲区实现规则绕过。 这种绕过并非依赖于系统漏洞,而是利用了PHP解释器的容错机制与WAF检测逻辑之间的差异,攻防博弈的本质是规则与变异的对抗,理解括号的深层特性对于防御方构建更精准的检测规则至关重要。

核心机制:括号在PHP解析与WAF检测中的差异
WAF主要依赖正则表达式匹配和语义分析来识别攻击行为,例如检测$_GET、eval、system等敏感函数的调用模式,在常规认知中,函数调用必须紧跟圆括号,如phpinfo()。PHP解释器在处理括号时具有极高的灵活性,这为绕过基于正则特征的WAF提供了物理基础。
WAF通常通过匹配函数名+左括号的模式来拦截危险函数,如果攻击者能够改变括号的形态、位置或编码方式,使得WAF的正则引擎无法识别这是一个函数调用,而PHP解释器依然能正确执行,绕过便发生了,这种差异利用了WAF为了性能而牺牲的部分语义理解能力,是攻防不对等的典型体现。
实战技术:PHP括号绕过的多维路径
要实现绕过,必须深入挖掘PHP的语法特性,以下是几种在安全测试中经过验证的高级绕过技术:
利用花括号替代方括号[]进行变量引用
在PHP中,数组元素的访问通常使用方括号,如$_GET['cmd'],大多数WAF会对$_GET加方括号的模式进行严格监控。PHP允许使用花括号来访问数组元素或字符串偏移量。$_GET['cmd']完全等价于$_GET{'cmd'}。
在攻击载荷中,将${$_GET['cmd']}变形为${$_GET{'cmd'}},可以轻易绕过针对[和]字符的过滤规则,这种替换在PHP 7.4之前版本广泛有效,虽然PHP 8.0后花括号访问数组被废弃,但在存量系统安全测试中依然具备极高的实战价值。
异或运算(XOR)构造无括号字符
高级WAF会对特定函数名如system进行拦截,通过异或运算,可以动态生成函数名,且完全不出现被拦截的字符。
原理是利用PHP的位运算符^,字符串中的字符通过异或运算可以得到新的字符。('?'^'‘)的结果是‘a’。 通过复杂的异或组合,可以拼凑出phpinfo等函数名字符串,然后配合可变函数调用(如$func()`),虽然这不直接涉及括号的变形,但它是构建无特征攻击链的关键一环,常与括号绕过技术结合使用,形成“无字母数字+无常规括号”的攻击载荷。
反引号与括号的混淆
PHP支持反引号`执行系统命令,等同于shell_exec(),WAF往往重点关照shell_exec(这个模式。
利用反引号可以天然避开函数调用的圆括号检测。
直接使用`ls`即可执行命令,如果WAF对反引号本身进行了拦截,可以尝试利用编码或注释符进行干扰,虽然反引号本身不是括号,但它是替代括号进行命令执行的最佳替代方案,属于广义上的“去括号化”绕过。

编码与注释干扰括号内部结构
针对必须使用括号的场景(如assert($_POST['cmd'])),绕过的重点在于括号内部内容的混淆。
利用URL编码、Base64编码或字符串翻转函数,可以模糊括号内的敏感参数。eval(gzinflate(base64_decode('编码后内容'))),WAF看到的是一串乱码,而PHP解释器会先解码再执行,括号虽然存在,但括号内的“威胁特征”已被抹除,在括号内插入大量空白符、换行符或注释(如system ( 'ls' );),利用部分WAF正则匹配的贪婪性与非贪婪性差异,也能达到拆分特征码的效果。
独家经验案例:酷番云WAF实战对抗实录
在酷番云的一次渗透测试项目中,我们发现某客户部署的Web应用存在一处文件包含漏洞,但客户启用了严格的第三方WAF,拦截了常规的攻击载荷。
场景复现:
目标系统为PHP 5.6环境,测试人员尝试利用$_GET参数传递命令执行代码,但WAF拦截了包含$_GET[的任何请求,拦截规则极其严格,甚至对URL编码后的%5b(即[)也进行了拦截。
解决方案:
酷番云安全团队分析发现,该WAF虽然对[字符及其编码进行了全方位封堵,但忽略了对花括号的检测。
我们构造了如下Payload:
?code=eval($_GET{'cmd'});
并在请求体中传入cmd=system('whoami');。
结果分析:
WAF的正则引擎匹配不到$_GET[的特征,判定为安全请求并放行,PHP解释器接收到请求后,识别出$_GET{'cmd'}是合法的数组访问语法,成功提取参数并执行了system函数,这一案例充分说明了防御方必须覆盖PHP语法的所有变体,仅防御“标准写法”是远远不够的。
基于此经验,酷番云原生WAF产品在规则设计时,特别引入了“语法等价变异检测”引擎,不仅检测标准括号,还会对花括号、空格变异、注释截断等变形方式进行归一化处理,确保在规则匹配前将各种“伪装”还原为原始语义,从而有效防御此类绕过攻击。

防御视角:构建对抗变形攻击的纵深体系
面对PHP括号及其他语法层面的绕过技术,单纯的正则匹配已捉襟见肘,作为安全从业者或运维人员,应采取更具前瞻性的防御策略:
- 语义分析(AST)技术: 部署支持抽象语法树(AST)分析的WAF产品,AST不关注字符层面的变形,而是将代码解析为树状结构,无论使用
[]还是,在AST层面都表现为数组访问节点,从而从根本上识别攻击意图。 - RASP(运行时应用自我保护)技术: 在应用层安装探针,RASP挂钩在PHP解释器底层,当检测到
system、eval等敏感函数被调用时,直接分析调用栈,无论攻击者如何混淆括号或编码,最终都需要调用底层函数,RASP能精准拦截。 - 禁用危险函数与升级环境: 在
php.ini中禁用system、exec、shell_exec等非必要函数,并尽快将PHP版本升级至8.x,利用新版本废弃花括号访问数组等特性,从语言层面压缩攻击者的操作空间。
相关问答模块
问:PHP 8.0版本是否还能使用花括号绕过WAF访问数组?
答:不能,PHP 8.0及更高版本已经彻底移除了使用花括号访问数组元素和字符串偏移量的支持,如果在PHP 8环境中尝试使用$arr{'key'},将会抛出Fatal Error,这种绕过方式仅适用于PHP 7.4及更早的旧版本环境,这也提醒管理员,升级PHP版本不仅是性能优化,更是重要的安全加固手段。
问:如果WAF拦截了eval和assert等危险函数,还有可能利用括号绕过吗?
答:依然有可能,攻击者可能不直接调用这些函数,而是利用动态函数特性,如$a='ev';$b='al';$a.$b($_POST['x']);,此时WAF可能只看到了变量拼接,而无法识别最终的函数调用,利用反射类或回调函数(如array_map)配合括号内的混淆参数,也能实现类似效果,防御此类攻击需要WAF具备更强的动态分析能力或部署RASP防护。
到此结束,如果您在Web安全防护中遇到类似的绕过难题,或希望提升您网站的云端防御能力,欢迎在评论区留言探讨,我们将为您提供专业的安全建议。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/347350.html


评论列表(2条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于利用的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是利用部分,给了我很多新的思路。感谢分享这么好的内容!