上述代码的功能不是本文重点,就不再赘述。WAF检测机制part3:叁W A F 检 测 机 制通过对WAF的反复测试,发现对一句话木马的检测,WAF主要分为两个部分。第一个部分,当一句话木马在服务器中的时候,首先检测文件中的内容,正如上文一句话木马工提到的两大特征,WAF也会匹配上述两个特征,当一个php文件具有执行功能和接收数据功能时就会被判定为具有了一句话木马的特征,所以说对于未变形的一句话木马来说,上传上去活下来的机率几乎为零,等不到访问就被查杀掉了。其第二部分检测在于当一句话木马和菜刀进行通信的时候,WAF会判定提交的数据,当发现危险函数特征的时候也会进行拦截。而且根据测试结果推测,WAF出于降低误拦截的考虑,短时间内并不会对可能是一句话木马的连接进行拦截。而是当多次出现时候才确定。绕过WAFpart4:肆绕 过 W A F根据上文提到的一句话木马的工作原理以及WAF的检测机制,我们首先要做到的是一句话木马能够存活在服务器中,要不然后续的步骤无从下手。我们首先来看下防止一句话木马被检测出来常见的绕过手段。☑ 单特征类该一句话木马只有数据接收功能,不含有执行函数,可以完美绕过WAF的在线检测。当然也可以使用get函数和post函数搭配进行。与菜刀连接执行的时候通过test1内容为“assert”即可实现代码的执行。假如我们要利用phpinfo()函数,那么可以在地址栏输入:结果如下。☑ 混淆编码类该方式将eval和接收函数通过rot13编码进行了替换,完全抹去了一句话木马的两个特征。完美绕过。当然编码方式不止上述一种,也可以使用其他编码方式。☑ 字符替换类该方式将执行函数进行了字符替换,从而完成了特征的绕过。本文重在思路,所以只是列举三种,更多的情况,大家可以看看公众号之前发的关于sql注入绕过WAF的文章,同时也可以发挥脑洞,利用php一些特性,根据WAF的检测机制,进行字符填充、混淆和替换、分割等各种方式实现检测绕过。当一句话木马到服务器端之后,剩下的工作就是利用菜刀跟一句话木马进行连接。菜刀的种类很多,有基于c/s架构的,也有基于b/s架构的,但是其原理都是相通的。菜刀的出现减少了一句话木马使用的门槛,但是对于绕过WAF来说就需要花费一些心思了。我们之前也提到过,WAF会对客户端提交的参数进行审查,对于含有危险函数的会进行拦截和过滤,下面看图。实际使用中直接使用菜刀,不进行特殊的配置,几乎很难绕过,经过分析两个地方触发了WAF的报警机制,第一个是提交函数中存在的base64_decode方法,第二个是参数中存在的eval函数。那么,如何在提交参数中避免这些,从而绕过呢。☑ 加密编码法在一句话木马中只要加上对应的解密,解码方法。那么在提交过程中则可以进行任何危险函数的加密,编码绕过WAF。比如说我们在一句话木马中提前构造好base_64解密方法如下:则在数据提交过程中则为:完全避免了任何函数的提交,当然在这里也可以使用一些常见的加密算法,比如AES、RSA等,关键在于一句话木马之中具有解密函数即可。☑ 迂回法该方法和大马方式类似,属于大马和一句话木马之间,就是将文件管理、下载文件等代码放在一句话木马文件之中,并且重命名功能函数,通过传参数调用,从而绕过WAF的检测。这种方法基本上可以保证不含有任何危险字段,但是对在线检测的抵抗能力加强。至于云端代码的绕过可以参考第一部分。该方法是Cknife作者提出来的。下面可以看例子: