WordPress是一個(gè)知名的開(kāi)源內(nèi)容管理系統(tǒng)(CMS),用于創(chuàng)建網(wǎng)站和個(gè)人博客。根據(jù)預(yù)計(jì),目前有35%的網(wǎng)站使用這一知名CMS,如此之大的比例也使其成為了威脅參與者的理想目標(biāo)。WordPress平臺(tái)存在的一大弱點(diǎn)就是允許攻擊者破壞網(wǎng)站的安全性,而這個(gè)弱點(diǎn)會(huì)隨著網(wǎng)絡(luò)安全形勢(shì)的嚴(yán)峻而更加惡化。
平時(shí),我們經(jīng)??梢钥吹接泄粽哚槍?duì)CMS平臺(tái)發(fā)起攻擊,這已經(jīng)不再是一個(gè)新聞。威脅行為者已經(jīng)發(fā)現(xiàn),對(duì)網(wǎng)站進(jìn)行攻擊可以成為一種攻破組織資產(chǎn)的有效手段。這篇文章首先介紹我們?cè)谝巴庥^察到的Payload示例,列舉出針對(duì)WordPress的不同類(lèi)型的攻擊,深入揭秘攻擊者是如何利用非法獲取的管理員訪問(wèn)權(quán)限、API、Alfa-Shell部署和SEO投毒來(lái)實(shí)現(xiàn)攻擊。
利用非法獲取的管理員訪問(wèn)權(quán)限攻擊WordPress站點(diǎn)
這種方法需要使用管理員的帳戶(hù)和密碼訪問(wèn)使用WordPress架構(gòu)的站點(diǎn)。攻擊者可能會(huì)利用漏洞,或使用泄露的密碼及弱密碼實(shí)現(xiàn)登錄,這一過(guò)程可以通過(guò)向目標(biāo)站點(diǎn)的/wp-login.php發(fā)送POST請(qǐng)求來(lái)實(shí)現(xiàn)。
使用弱密碼登錄的攻擊示例:
攻擊者進(jìn)行暴力破解時(shí)所使用的密碼:
成功登錄后,具有管理員訪問(wèn)權(quán)限的攻擊者就能操作多個(gè)選項(xiàng),攻擊者通常會(huì)進(jìn)行如下操作:
1、安裝帶有后門(mén)的自定義主題;
2、安裝插件以上傳文件。
在成功獲得管理員特權(quán)后,通常會(huì)進(jìn)行這兩種操作,此外攻擊者還可以選擇更改管理員密碼,或創(chuàng)建新的管理員帳戶(hù)。最常用的方法是使用公共的主題,利用遠(yuǎn)程代碼執(zhí)行(RCE)漏洞來(lái)嵌入自定義的后門(mén)。除此之外,還有一些文件上傳的插件,攻擊者可以借助這些插件直接上傳Payload。
應(yīng)該注意的是,我們經(jīng)常見(jiàn)到一個(gè)后門(mén)會(huì)部署具有相似功能的另一個(gè)后門(mén)。當(dāng)Payload/命令/代碼被編碼在Cookies或POST數(shù)據(jù)中時(shí),使用GET或POST請(qǐng)求就可以完成部署。解碼的邏輯位于此前部署的后門(mén)內(nèi)部。在部署后,攻擊者將收到新上傳組件的URL。
在被攻擊的WordPress網(wǎng)站中實(shí)現(xiàn)搜索引擎優(yōu)化(SEO)投毒
攻擊者利用被攻擊的WordPress網(wǎng)站做的另一類(lèi)行為是搜索引擎優(yōu)化SEO優(yōu)化投毒。我們發(fā)現(xiàn),已經(jīng)部署的PHP腳本會(huì)在GET請(qǐng)求中接收關(guān)鍵字。
WordPress“搜索引擎”:
腳本首先檢查User-Agent是否與以下正則表達(dá)式中的其中一條相匹配,并檢查$_SERVER[“REMOTE_ADDR”](發(fā)出HTTP請(qǐng)求的參與者的IP地址)的反向DNS查詢(xún)是否包含Google子字符串。如果發(fā)現(xiàn),則將$isbot變量設(shè)置為1。
部署腳本的片段:
如果$isbot不為0,則使用相同的關(guān)鍵字,對(duì)硬編碼的URL地址發(fā)出另一個(gè)HTTP請(qǐng)求。
部署腳本的片段:
如果返回的文本長(zhǎng)度小于1000個(gè)字符,則使用必應(yīng)(Bing)搜索引擎執(zhí)行其它查詢(xún),并將與特定正則表達(dá)式匹配的結(jié)果附加到$text后面。
攻擊者使用的文本:
如果再次執(zhí)行相同的查詢(xún),就會(huì)返回最終的HTML頁(yè)面,并將其保存在服務(wù)器上。
最終頁(yè)面:
如果未設(shè)置$isbot,并且HTTP_REFERER包含類(lèi)似于Google、Bing或Yahoo的字符串,則將其重定向到另外一個(gè)網(wǎng)站。
部署腳本的片段:
發(fā)表虛假或誤導(dǎo)性文章
遭到入侵的WordPress網(wǎng)站也可能會(huì)被用于發(fā)布虛假或誤導(dǎo)性文章,其中的內(nèi)容往往很少,或者沒(méi)有真實(shí)的細(xì)節(jié)。取而代之的是,攻擊者往往會(huì)使用引人注目的標(biāo)題,并編造吸引人注意的故事。
在遭到入侵的站點(diǎn)上發(fā)布的故事示例:
從以上示例可以看出,被攻擊的站點(diǎn)發(fā)布了帶有明顯語(yǔ)法錯(cuò)誤或煽情報(bào)導(dǎo)的故事。通常,這些文章的內(nèi)容難以被理解。攻擊過(guò)程是通過(guò)WordPress的XML-RPC應(yīng)用程序編程接口(API)來(lái)實(shí)現(xiàn)的,該接口可以傳輸數(shù)據(jù)并執(zhí)行多項(xiàng)任務(wù),例如上傳新文件、編輯和發(fā)布帖子。
POST /xmlrpc.php和metaWeblog.newPost(左側(cè))以及帖文內(nèi)容(右側(cè))示例:
攻擊者可以使用POST /xmlrpc.php和metaWeblog.newPost,這允許將博客內(nèi)容直接(甚至遠(yuǎn)程)發(fā)布到WordPress網(wǎng)站。
針對(duì)WordPress站點(diǎn)的安全建議
上面提到的示例,只是目前已知攻擊者會(huì)使用的一些技術(shù)。實(shí)際上,如果沒(méi)有保證良好的安全性,易受攻擊的WordPress站點(diǎn)很容易遭到攻擊者的濫用。為了降低被攻擊的風(fēng)險(xiǎn),我們建議用戶(hù)使用雙因素認(rèn)證(2FA)插件來(lái)防止憑據(jù)濫用,同時(shí)建議掃描未修復(fù)的漏洞。用戶(hù)和網(wǎng)站管理員可以采用以下防護(hù)措施:
1、部署基本的安全防御措施,以減少網(wǎng)站的攻擊面;
2、禁用或刪除過(guò)時(shí)的或易受攻擊的插件;
3、使用虛擬補(bǔ)丁程序來(lái)修復(fù)補(bǔ)丁不可用的漏洞,特別是針對(duì)需保障業(yè)務(wù)連續(xù)性的系統(tǒng)更要關(guān)注這一點(diǎn);
4、應(yīng)用權(quán)限最小化原則;
5、定期將CMS更新到最新版本,包括CMS中使用的插件。