一、漏洞背景
WordPress作為全球使用最廣泛的內(nèi)容管理系統(tǒng)(CMS),其安全性一直備受關(guān)注。文件上傳漏洞是常見(jiàn)的Web安全威脅之一,攻擊者通過(guò)構(gòu)造惡意文件繞過(guò)檢測(cè)機(jī)制,進(jìn)而獲取服務(wù)器權(quán)限或?qū)嵤┻M(jìn)一步攻擊。本文將復(fù)現(xiàn)一個(gè)典型的WordPress文件上傳漏洞,并分析其成因與防御措施。
二、漏洞復(fù)現(xiàn)環(huán)境
- 測(cè)試環(huán)境:
- WordPress 5.6(未打補(bǔ)丁版本)
- PHP 7.4
- Apache/Nginx服務(wù)器
- 漏洞插件: 假設(shè)目標(biāo)站點(diǎn)安裝了存在漏洞的第三方插件(如未對(duì)文件類(lèi)型嚴(yán)格校驗(yàn)的插件)。
三、漏洞復(fù)現(xiàn)步驟
步驟1:定位上傳功能
訪問(wèn)WordPress后臺(tái)或前端頁(yè)面,找到支持文件上傳的功能模塊(如媒體庫(kù)、插件自定義上傳接口等)。
步驟2:構(gòu)造惡意文件
創(chuàng)建一個(gè)PHP webshell文件(如shell.php
),內(nèi)容如下:
<?php system($_GET['cmd']); ?>
步驟3:繞過(guò)文件類(lèi)型檢測(cè)
- 方法1:修改HTTP請(qǐng)求頭
使用Burp Suite攔截上傳請(qǐng)求,將
Content-Type
從application/x-php
改為image/jpeg
。 - 方法2:雙擴(kuò)展名繞過(guò)
將文件名改為
shell.php.jpg
,利用部分插件解析漏洞觸發(fā)PHP執(zhí)行。
步驟4:上傳并訪問(wèn)惡意文件
成功上傳后,訪問(wèn)文件路徑(如/wp-content/uploads/2024/03/shell.php
),通過(guò)URL參數(shù)執(zhí)行命令(例如:?cmd=id
)。
四、漏洞原理分析
- 根本原因:
- 未對(duì)文件內(nèi)容進(jìn)行嚴(yán)格校驗(yàn)(如僅校驗(yàn)擴(kuò)展名或MIME類(lèi)型)。
- 服務(wù)器配置錯(cuò)誤(如Apache未禁止PHP文件執(zhí)行于上傳目錄)。
- 攻擊影響:
- 遠(yuǎn)程代碼執(zhí)行(RCE)
- 服務(wù)器數(shù)據(jù)泄露
五、防御建議
- 代碼層:
- 使用
wp_check_filetype_and_ext()
函數(shù)驗(yàn)證文件類(lèi)型。 - 禁止上傳可執(zhí)行文件(如PHP、ASP)。
- 服務(wù)器層:
- 在
.htaccess
中添加規(guī)則:
<Files *.php>
Deny from all
</Files>
- 定期更新WordPress核心及插件。
- 監(jiān)控層:
- 部署WAF攔截惡意上傳請(qǐng)求。
- 日志審計(jì)上傳目錄的文件變更。
六、總結(jié)
通過(guò)本次復(fù)現(xiàn),可見(jiàn)文件上傳漏洞的危害性極高。開(kāi)發(fā)者需遵循“最小權(quán)限原則”,結(jié)合多層次校驗(yàn)機(jī)制提升安全性。建議使用WordPress官方推薦的安全插件(如Wordfence)進(jìn)行常態(tài)化防護(hù)。
注:本文僅用于安全研究,未經(jīng)授權(quán)測(cè)試他人系統(tǒng)屬違法行為。