webshell是什么后门文件 如何检测

         Webshell实际上是一个能够执行恶意功能的PHP代码文件。Webshell要执行恶意功能,其代码结构主要由两部分组成:数据传递部分和数据执行部分。在webshell中,数据传递部分是指webshell中用来接收外部输入数据的部分,webshell可以根据外部输入数据动态地交互执行恶意功能。在webshell中,数据执行部分指的是webshell中的system函数,用于执行代码执行和执行命令等命令。

在基本的webshell中,数据传递主要通过诸如$_GET、$_POST、$_COOKIES等变量传递或直接写入代码,数据执行主要是通过eval或assert,或者直接调用函数来执行。为了避开检测机制,各种webshell在基础webshell上采用相应的变形方法,根据不同的变形量,将变形方法分为数据传递部分和数据执行部分两种。传输部的变形主要有:将数据放到服务器的外部文件中,webshell读取文件获取执行数据。

outputo-20210802-090811-186-chmp.png

(1)通过诸如curl/file_get_contents等功能在远程服务器上获取执行数据。

(2)将数据放入数据库,并通过读取数据库获取执行数据。对于数据执行部分,变形方法主要是使用/e修饰符preg_replace函数执行代码。使用一个支持回调机制的函数来执行代码回调。比如:

array_map,array_filter,array_reduce等。

(3)函数与变量函数一起执行。

(4)使用匿名函数实现功能。

(5)利用反射函数ReflectionFunction执行功能。


PHPwebshell实时动态检测是一种基于PHP扩展的webshell检测方法,它通过监测PHP代码的编译和执行,以及外部输入变量标记跟踪,黑白名单机制,主要包括五个模块:变量标记跟踪,禁用函数hook检测,危险函数hook检测,编译函数超载检测,数据库黑白表检测,编译函数过载检测,数据库黑白名单检测,编译函数过载检测。

变量标志跟踪。

PHP扩展提供了通过PG(http_globals)变量通过GET、POST、COOKIE传递的参数内容。variable标签表示字符串变量保存在PG(http_globals)中。可变跟踪是指简单的字符串处理函数,比如strval,explode,当被标记的变量是函数参数时,它还用变量来标记函数结果。

PHP中字符串变量的值存储在zvalue,其中包含字符串指针和字符串长度的字符串长度,而PHP内核是根据保字符串长度读取字符串内容。对字符串变量进行标记的方法是通过扩展字符串变量的占用内存,在字符串的值后加上标记特征。由于没有修改字符串长度,变量标记将无法像这样修改字符串的值。当检测到长度之后的字符串指针内容是否是标记特征就可以了。

分享: