在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_CONFIRMED cookie設置為保存1000天,所以他們不需要每次登錄都進行郵箱驗證。
最后的“bootstrap” 部分,包含了將wp-core.php注入到index.php的代碼(你可以在文章的開頭看到)。它能夠確保 “bruteforce protection” 一直都能夠使用,如果wp-login.php中的代碼被移除,它能夠自己進行修復。
如果我們忘記通過非常規方式向Wordpress添加功能,這段代碼確實能夠起到強有力的保護機制。當然,這并非看上去那么完美,對于那些有針對性的攻擊起到的作用并不大,特別是當攻擊者了解這個保護機制以后。但是無法否認的是,這個保護機制確實會為站長解決一些不必要的麻煩,至少這個保護機制能夠防止目前95%的自動化枚舉攻擊。
[page]講了半天,難道這個插件真真正正的是一款不可多得的優秀插件?我會告訴你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插件的漏洞,希望各位在使用各種插件的時候多仔細審查,免受無妄之災。