解決 WordPress 網站受到惡意腳本攻擊的方法

WordPress 是一個廣泛使用的內容管理系統(CMS),許多網站和部落格都使用 WordPress 來建立和管理其內容。由於其廣泛的使用,WordPress 成為惡意攻擊者的目標,他們利用各種方法來入侵和操縱WordPress 網站。以下是一些常見的 WordPress 攻擊方法:

  1. 弱密碼攻擊:攻擊者會使用暴力破解工具,嘗試使用常見的密碼、字典中的單詞或其他猜測方法來破解 WordPress 管理員帳戶的密碼。
  2. 主題和外掛漏洞利用:WordPress 的主題和外掛可能存在漏洞,攻擊者可以利用這些漏洞進行入侵。當WordPress的主題或外掛沒有及時更新或存在已知的漏洞時,攻擊者可以利用這些漏洞來獲取對網站的控制權。
  3. 跨站腳本(XSS)攻擊:攻擊者可以通過在使用者輸入的內容中插入惡意腳本,然後在瀏覽器中執行這些腳本。這可能導致攻擊者能夠竊取用戶的登錄憑據或在受害者瀏覽器中執行其他惡意操作。
  4. 跨站請求偽造(CSRF)攻擊:攻擊者利用受害者在訪問惡意網站的同時也登錄了 WordPress 網站的漏洞,以執行未經授權的操作,如更改密碼、發布內容等。
  5. SQL注入攻擊:當 WordPress 網站的程式碼沒有正確處理用戶輸入的數據時,攻擊者可以通過注入惡意的 SQL 指令來竊取敏感資料、更改數據庫內容或甚至完全控制網站。
  6. 檔案上傳漏洞:攻擊者利用網站的檔案上傳功能,上傳包含惡意程式碼的檔案,然後執行這些檔案以取得對網站的控制權。

WordPress 網站被植入惡意腳本解決方法

由於 WordPress 容易成為攻擊者的目標,我曾經遇到過一個問題。有人在我的 wp-config.php 檔案中插入了惡意程式碼。這個惡意程式碼主要是一個腳本檔,它會在打開檔案時自動執行。通常這樣的程式是後門程式,它允許攻擊者未經授權地存取我的網站。這種攻擊方式的危險之處在於攻擊者不需要知道我有多少個網站,他們會主動獲得存取權限。當我遇到這種情況時,必須儘快將這個惡意腳本移除,不僅需要移除include 語句,還需要刪除該檔案本身。

<?php
/*b2e97*/

@include ("/home/user/public_html/web/img/.ad5e930e.inc");

/*b2e97*/
define( 'WP_CACHE', true );

/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
 * * Database table prefix
 * * Localized language
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database' );

發現了一個攻擊點之後可以先用此位置去尋找有沒有其他檔案被攻擊,你可以使用以下指令來搜尋是否存在相同的惡意腳本:

$ grep -rnw ./ -e '@include (".*\.inc");' --include='*.php'

./web/wp-config.php:6:@include ("/home/user/public_html/web/img/.ad5e930e.inc");

而這個 inc 副檔名的檔案可能會被藏在各個地方,這種地方東躲西藏,我就有在 /home/user/public_html/web/.well-known/.8e4760g6.inc 看過這個檔案。

檔案擾亂法

駭客不讓你找到他的主要攻擊程式在哪裡,所以可能會建立非常多檔案大小為 0 的混淆檔案,那要尋找可以使用以下指令移除它

find /path/to/your/directory -type f -name "*.php" -size 0 -delete

阻擋攻擊的方法

移除資料夾內不該出現 PHP 檔案地方

對於一些不應該出現 PHP 檔案的資料夾,你可以使用以下指令將其中的 PHP 檔案移除:

find . -type d -name 'aom*' -print0 | xargs -0 -I{} find {} -type f -name '*.php' -delete

使用 .htaccess 減少攻擊範圍

如果你的網站只需提供 HTML 靜態內容而不需要執行動態語言,你可以使用 .htaccess 檔案減少攻擊範圍,關閉常見的 PHP、PL 和 Python 等程式的執行權限。

# Turn off all options we dont need.
Options -Indexes -ExecCGI -Includes -MultiViews

# Set up a default handler for requests, to serve static content.
DirectoryIndex index.html

# Disable all scripting languages.
<FilesMatch "\.(php|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
    Order allow,deny
    Deny from all
</FilesMatch>

腳本話新增 .htaccess 檔案

如果你的機器上有許多網站需要處理,可以使用腳本來快速執行這個任務。假設你的網站資料夾名稱有規律,例如 web001、web002、web003,你可以使用以下腳本:

#!/bin/bash

# Starting from the root directory
root_directory="/path/to/your/root/directory"

# .htaccess content
htaccess_content='
# Turn off all options we dont need.
Options -Indexes -ExecCGI -Includes -MultiViews

# Set up a default handler for requests, to serve static content.
DirectoryIndex index.html

# Disable all scripting languages.
<FilesMatch "\.(php|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
    Order allow,deny
    Deny from all
</FilesMatch>
'

# Find directories that contain index.html.bak.bak
for dir in $(find "$root_directory" -type d -name "web*"); do
    # Create .htaccess file
    echo "$htaccess_content" > "$dir/.htaccess"
done

最後總結

為了保護你的WordPress網站,有幾個重要的安全措施你可以採取:

  1. 保持更新:確保你的 WordPress 核心程式、主題和外掛都是最新版本,並且及時應用安全补丁。
  2. 使用強大的密碼:為你的 WordPress 帳戶和數據庫設定強大且獨特的密碼,並定期更換。
  3. 僅安裝受信任的主題和外掛:僅從受信任的來源下載和安裝主題和外掛,並定期刪除未使用的或有安全漏洞的外掛。
  4. 限制登錄試錯次數:使用限制登錄試錯次數的插件,例如 “Limit Login Attempts”,以減少暴力破解攻擊的成功率。
  5. 應用網站防火牆(WAF):使用網站防火牆工具,如 Wordfence 或 Sucuri,以檢測和阻止惡意攻擊。
  6. 備份網站:定期備份你的 WordPress 網站,包括數據庫和檔案,以便在遭受攻擊或數據損失時能夠快速恢復。

藉由了解這些基礎知識和採取相應的安全措施,你可以增加你的 WordPress 網站的安全性並保護它免受常見的攻擊。請記住,保持網站的安全性是一個持續的努力,並且定期審查和更新安全措施非常重要。