325505211412

在 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 插件的漏洞,希望各位在使用各種插件的時候多仔細審查,免受無妄之災。