
在 WordPress 中,通常惡意程式隱藏在外掛或主題中。他們形態各異,有的傳送垃圾郵件,有的植入隱形連結……不過這類惡意軟體原理很好理解,無非就是惡意外掛中有網站管理員所需要的功能,然後網站管理員在沒有經過嚴謹確認便直接安裝。
有趣的黑帽 SEO 外掛
就在本週,我遇到一款典型的黑帽 SEO 外掛,它實現的手法十分有趣。
該惡意外掛核心文就在網站 root 目錄下。駭客透過利用該檔案,將以下程式碼注入到 Index.php 檔案中。
if ( file_exists( 'wp-core.php' ) ){ require_once( 'wp-core.php' ); }
像這樣的 Index.php 注入看起來十分可疑,同時也告知我們 wp-core.php 並沒有被安裝,因為這將破環 WordPress 基本約定。
接下來,我們就好好看下 wp-core.php 檔案吧。
分析wp-core.php 檔案
該檔案大概有 500 多行程式碼,在其註釋行中,提到該外掛是為保護 WordPress CMS 免受 Brute-force 攻擊而開發的,並且說是利用 302 重定向來進行保護,最後還提到必須第一個進行載入。


在該檔案的中間部分我發現了 「bootstrap」 的程式碼
首先,他將 「Bruteforce protection」 程式碼注入到 wp-login.php.


在登入表單中加入 onsubmit 管理員並設定 「antibot_ajax」 cookies 。接著還新增了一個用以檢測是否設定有 cookies 的程式碼,如果沒有設定是不允許登入的。這樣看起來似乎真的是在做對抗機器人的操作保護了使用者,毫無惡意。
接著,我們來看看 「Auth 2nd level」 程式碼:


§
這個看起來更加可疑,其注入了一段加密了程式碼。我們進行了解密,驚奇的發現這段程式碼也很正常。正如外掛作者在開頭備註中所說的一樣,這是進行第二次驗證。如果登入名和密碼是有效的,就會向 WP 資料庫檢索使用者郵箱,將從第三個字元開始進行替換直到 @符號位置,最後要求驗證該郵箱。


所以,即使機器人支援 Javascript 以及 cookies,並且幸運的透過了第一層反機器人保護,在第二層也是會失敗的,因為第二層保護是需要對郵箱進行驗證的。這樣即使是有人盜取了你的 WordPress 密碼,如果沒有進行郵箱確認也是無法登入的。
使用者對電子郵箱地址進行確認過後,會有一個額外的設定步驟,對WP_FLV_EMAIL_CONFIRMEDcookie 設定為儲存 1000 天,所以他們不需要每次登入都進行郵箱驗證。
最後的 「bootstrap」 部分,包含了將 wp-core.php 注入到 index.php 的程式碼 (你可以在文章的開頭看到) 。它能夠確保 「bruteforce protection」 一直都能夠使用,如果 wp-login.php 中的程式碼被移除,它能夠自己進行修復。


如果我們忘記透過非常規方式向 WordPress 新增功能,這段程式碼確實能夠起到強有力的保護機制。當然,這並非看上去那麼完美,對於那些有針對性的攻擊起到的作用並不大,特別是當攻擊者瞭解這個保護機制以後。但是無法否認的是,這個保護機制確實會為站長解決一些不必要的麻煩,至少這個保護機制能夠防止目前 95% 的自動化列舉攻擊。
講了半天,難道這個外掛真真正正的是一款不可多得的優秀外掛?我會告訴你 wp-core.php 中 500 多行的程式碼中有關 「bootstrap」 的程式碼不足 100 行?那麼剩下的 80% 程式碼都是做什麼的呢?
wp-core.php 中的惡意程式碼
那麼剩下的那 80% 程式碼都是沒有保護作用的。
舉個例子,它可以顯示所有儲存在 WordPress 資料庫中的電子郵箱,如果不需要授權就可以提取郵箱地址,之前的保護也就變得毫無意義了。
同時,還安裝有一個開放的重定向器。現在駭客就可以向使用了 「bruteforce protection」 的網站站長髮送垃圾郵件了,釣魚再或者對網站訪客進行重定向到一個駭客指定的網站。
例項演示
wp-core.php 的主要功能就是管理 pharma-spam doorways 。如果一個部落格的 URL 有其特定的引數 (比如 「th」,類似 http://www .example .com/?th=doryx+150mg+exclusivity) 那麼 wp-core.php 會將正常的部落格內容替換成垃圾內容。
如果訪問者不是機器人,而是來自搜尋引擎。那麼它會透過單獨的關鍵字,重定向到其他網站


在跳轉之前,惡意外掛會設定一個相同命名的 cookies 作為 URL 引數。在接下來的 100 天內,相同的訪問者如果再次開啟網頁依舊會進行跳轉到其他頁面。
如果訪問者沒有 cookies,也不是從搜尋引擎過來的。這樣的訪問者所訪問頁面就會顯示大量的垃圾內容。
這些垃圾內容就儲存在 wp-admin/update-backup.db 檔案中
通用性
必須要提到一點,儘管這是一個 WordPress 外掛, 但是同樣可在其他 PHP 站點中執行。唯一的區別只是 WP-specific 函式無法使用而已。
總結
總之這個外掛真的很奇怪。它試圖將所有型別的 PHP 站點作為目標,並將自身注入到 index.php 。但主要目標還是 WordPress 站點。
這樣就可以解釋為何以 wp-core.php 命名了,並且在 WordPress 根目錄下也不是那麼的顯眼,但是這個檔案在 Joomla 或者 vBulletin 搭建的網站下就顯得十分刺眼了。
wp-core.php 檔案很容易被安全性外掛透過檢測 WordPress 核心完整性然後查殺。為了分散使用者的注意,該外掛包含有一些能最佳化 WordPress 的功能。
最後,最近經常爆出 WordPress 外掛的漏洞,希望各位在使用各種外掛的時候多仔細審查,免受無妄之災。