這篇需要 SSH 操作
這篇提到的攻擊痕跡需要透過 SSH 連進伺服器才能檢查和清除。還不熟悉 SSH?請先看SSH 連線教學。
處理 WordPress 中毒案件看多了會發現,攻擊者的手法翻來覆去就那幾種。
這篇整理了 11 種實務上遇過的攻擊模式。掃描的時候對照著看,可以更快判斷你的站被用了哪些招。
內容導覽
檔案層
index.php 植入 + 暫存 PHP
index.php 被加入 goto 混淆碼。每次有人訪問網站,惡意碼用 uniqid('', true) 在根目錄產生隨機命名的 PHP(通常 6a 開頭),執行完再刪。執行被中斷的話暫存檔就會留下來。
清法:先清 index.php(源頭),再刪所有 6a*.php,最後核心重裝。
重複子目錄 + cache.php
在合法目錄裡建同名子目錄,塞 cache.php。像 Handler/Handler/cache.php。正常專案不會出現 Handler/Handler/ 這種路徑,目錄名重複就是辨識關鍵。
shadow-bot.php 多點散佈
同一個檔名出現在多個子目錄。你清了一個,其他地方還有。用 find . -name "shadow-bot.php" 全站搜一遍,全部刪。
Cookie 後門
檔案就一兩行:eval(base64_decode($_COOKIE['xxx']))。攻擊者透過 cookie 傳入要執行的程式碼。檔案本身看起來很無害,特別不起眼。
帶密碼的 Webshell
session_start() + SHA256 密碼驗證 + eval()。攻擊者用瀏覽器直接開這個 PHP,輸入密碼就有完整 shell。常偽裝成佈景主題檔案。
GitHub 假圖片 Payload
惡意碼從 GitHub user-images CDN 下載一個 .jpg,實際內容是 base64 編碼的 PHP。利用 GitHub 的高信譽繞過 URL 黑名單。要刪的是載入器(那個 curl/file_get_contents 的 PHP),光刪結果沒用。
ACL / Immutable 保護
惡意檔案用 chattr +i 設了 immutable,或加了 ACL 規則。你 rm 刪不掉、--force 也覆蓋不了。先 chattr -i 再 setfacl -b,然後才能刪。
PHP-FPM 即時寫回
你刪了 index.php,下一個 HTTP 請求進來 PHP-FPM worker 又把惡意版寫回去。因為 worker 記憶體裡還跑著被竄改的版本。先 kill 掉 FPM pool 再清。
資料庫層
假管理員帳號
多出不認識的管理員。email 用 @security.local 或 @local.invalid,建立日期集中在同一天。wp user delete 刪除,記得 --reassign。
應用程式密碼持久化
攻擊者在管理員帳號底下建了應用程式密碼。你改了登入密碼,他照樣用 REST API 進出。後台使用者清單看不出來,要查 wp_usermeta 的 _application_passwords。
mu-plugins Runtime 後門
在 wp-content/mu-plugins/ 放 PHP 檔案,每次載入頁面自動執行。不出現在後台外掛列表,多數管理者根本不知道它存在。你刪了其他所有後門,mu-plugin 一個人就能撐起整條攻擊鏈。
幾個提醒
實務上很少只遇到單一種攻擊模式。一次入侵通常同時部署 3~5 種後門。你清了四個,第五個就會把前四個全部寫回來。先掃完再一次清,不要邊看邊刪。
不確定的時候用 cat 看內容。變數名看得懂、有函數說明、有正常的外掛頭部註解 = 可能正常。通篇一兩個字母的變數名配 base64 字串 = 後門。
速查
刪不掉 → 查 lsattr 有沒有 immutable
刪了又出現 → 先停 PHP-FPM pool
改了密碼還被入侵 → 查應用程式密碼和 session salt
清了檔案還被入侵 → 查 mu-plugins 和 WP-Cron 排程


