Webshell实际上是一个能够执行恶意功能的PHP代码文件。Webshell要执行恶意功能,其代码结构主要由两部分组成:数据传递部分和数据执行部分。在webshell中,数据传递部分是指webshell中用来接收外部输入数据的部分,webshell可以根据外部输入数据动态地交互执行恶意功能。在webshell中,数据执行部分指的是webshell中的system函数,用于执行代码执行和执行命令等命令。
在基本的webshell中,数据传递主要通过诸如_GET、_POST、
(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内核是根据保字符串长度读取字符串内容。对字符串变量进行标记的方法是通过扩展字符串变量的占用内存,在字符串的值后加上标记特征。由于没有修改字符串长度,变量标记将无法像这样修改字符串的值。当检测到长度之后的字符串指针内容是否是标记特征就可以了。