我亲历的那次“惊险一刻”,聊聊那些让人拍大腿的绕过手法
大家好呀,今天想跟你们唠唠一个我前阵子碰到的真事儿——一句话木马绕过案例,说真的,干我们这行的,谁没被WAF(Web应用防火墙)拦过几次?但那次绕过的过程,真是让我又气又笑,拍着大腿喊“还能这么玩?”

先说说背景吧,当时我在帮一个朋友的公司做安全测试,目标是一个挺老的PHP系统,我随手扔了个经典的一句话木马上去:
<?php @eval($_POST['cmd']); ?>
结果呢?WAF直接给我拦了,返回一个冷冰冰的“请求被拒绝”,我当时就“哎哟”一声,心里想:行吧,你这防火墙还挺精神,但越是这样,我越来劲——我就不信绕不过去。
第一个绕过思路,其实特别朴素:换个写法,我把eval拆开、拼接,用assert或者create_function试试,结果assert在新版PHP里早就不支持了,白忙活一场,后来我改成这种:
<?php $a = 'ass'.'ert'; @$a($_POST['cmd']); ?>
嘿,你猜怎么着?WAF愣了一下,居然放行了!但问题是,目标环境是PHP 7,assert已经不作为函数执行了,绕过了WAF却执行不了,真是“绕了个寂寞”,这时候我就想啊,一句话木马绕过案例里,光绕WAF没用,还得看目标环境的脸色,这才是精髓。
第二个思路,我开始玩编码和混淆,用base64_decode包一层,或者用$_REQUEST代替$_POST,甚至把参数名改成一些奇怪的东西。
<?php @eval(base64_decode($_POST['x'])); ?>
这个其实挺常见,但那次WAF居然也拦了,估计规则库挺新,我就换了个姿势,用str_rot13加eval,或者干脆用preg_replace的/e修饰符——可惜PHP 7也移除了,折腾了半天,我嘀咕了一句:“这WAF是不是专门研究过一句话木马大全啊?”
最绝的一个绕过,是我无意中发现的,我把一句话木马藏在图片的EXIF信息里,然后用include去加载那个图片文件——这需要配合文件包含漏洞,但单就“一句话木马绕过案例”这种“藏”的思路特别有意思,WAF只检查上传内容,不检查图片元数据,于是木马就“大摇大摆”地进去了,当时我盯着屏幕笑了半天,嘴里念叨:“你这是防了个啥呀?”
当然啦,说这些可不是教大家去干坏事哈,纯粹是技术交流,我写这些一句话木马绕过案例,是想提醒做安全的朋友们:WAF不是万能的,规则是死的,人是活的,你得像黑客一样思考,才能防住黑客,那些老系统真的该升级了,别等到被绕过了才拍大腿。
最后总结一句我的心得:一句话木马绕过案例看多了,你会发现绕过的本质就俩字——变形,变函数名、变编码、变载体、变传输方式,但万变不离其宗,守住“不执行未信任输入”这条底线,比堆一百条WAF规则都管用。
好了,今天就唠到这儿,如果你也有类似的一句话木马绕过案例,欢迎来评论区跟我掰扯掰扯,我保证搬好小板凳等着!😄