孫海波 陳哲 周琪 陳霓
【摘要】? ? 本文就工作中發(fā)現(xiàn)的一起“ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞”,淺談如何做好網(wǎng)站的安全漏洞防范,防止攻擊者利用該漏洞進(jìn)行遠(yuǎn)程執(zhí)行代碼,對(duì)目標(biāo)網(wǎng)站進(jìn)行掛馬、數(shù)據(jù)竊取、遠(yuǎn)程控制等惡意操作。
【關(guān)鍵詞】? ? 網(wǎng)絡(luò)安全漏洞? ? ThinkPHP 遠(yuǎn)程代碼執(zhí)行
引言:
互聯(lián)網(wǎng)技術(shù)快速發(fā)展的同時(shí),也出現(xiàn)了越來(lái)越多的安全漏洞,必須高度重視。相比于2019年,2020年網(wǎng)絡(luò)安全漏洞數(shù)量仍呈現(xiàn)增長(zhǎng)的趨勢(shì)。根據(jù)國(guó)家信息安全漏洞庫(kù)(CNNVD)數(shù)據(jù)統(tǒng)計(jì),2020 年全年至 2021 年上半年新增漏洞信息27097條。從廠商分布來(lái)看,產(chǎn)生網(wǎng)絡(luò)安全漏洞前五的公司分別為:Microsoft公司、Google公司、Oracle公司、Netgear公司、IBM公司;從漏洞類型來(lái)看, 網(wǎng)絡(luò)安全漏洞前五的類型分別為:緩沖區(qū)錯(cuò)誤、跨站腳本、輸入驗(yàn)證錯(cuò)誤、信息泄露、代碼問(wèn)題;從漏洞修復(fù)情況來(lái)看,前五名的國(guó)內(nèi)廠商分別為:華為(Huawei)、福昕(Foxit)、聯(lián)想(Lenovo)、研華(Advantech)、中興通訊(ZTE),且漏洞修復(fù)率均為100%[1]。
ThinkPHP是一種簡(jiǎn)便易用的輕量級(jí)PHP框架,原名FCS,最早出現(xiàn)在2006年初。其支持Windows/Unix/Linux等操作系統(tǒng)環(huán)境,兼容性強(qiáng),操作簡(jiǎn)單方便。其突出的特點(diǎn)是支持跨版本、跨平臺(tái)和跨數(shù)據(jù)庫(kù)移植。
網(wǎng)站在運(yùn)營(yíng)過(guò)程中,為了提高訪問(wèn)時(shí)效性,會(huì)將用戶信息存入緩存來(lái)減少訪問(wèn)次數(shù)。而ThinkPHP框架在處理緩存數(shù)據(jù)時(shí)將數(shù)據(jù)進(jìn)行序列化,并存入一個(gè)PHP文件中,這種方法在帶來(lái)快捷的同時(shí)可能會(huì)造成命令執(zhí)行風(fēng)險(xiǎn)。存在ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞的網(wǎng)站在其業(yè)務(wù)代碼中,如果模板賦值給assign方法的第一個(gè)參數(shù)可控,則可導(dǎo)致模板文件路徑被覆蓋為攜帶攻擊代碼的文件路徑,從而攻擊者可以插入惡意代碼,造成遠(yuǎn)程命令執(zhí)行。
一、事件經(jīng)過(guò)
筆者一直從事對(duì)web網(wǎng)站的安全漏洞挖掘工作,于2021年7月發(fā)現(xiàn)一起比較典型的ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞,供讀者參考。漏洞詳細(xì)情況:漏洞名稱為T(mén)hinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞;漏洞數(shù)量1個(gè);漏洞等級(jí)為高危;網(wǎng)站地址為http://118.---.--.37:39916/ (“---”代表網(wǎng)站部分域名地址)。
二、驗(yàn)證過(guò)程
我們通過(guò)Web安全漏洞掃描工具,發(fā)現(xiàn)該網(wǎng)站(http://118.---.--.37:39916/)存在ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞。下面我們開(kāi)始對(duì)這個(gè)鏈接地址進(jìn)行漏洞驗(yàn)證,在驗(yàn)證時(shí)需要使用“蟻劍”工具進(jìn)行端口shell鏈接,進(jìn)而對(duì)目標(biāo)服務(wù)器進(jìn)行攻擊驗(yàn)證。
1.網(wǎng)站基本情況分析。我們打開(kāi)網(wǎng)站頁(yè)面,使用瀏覽器插件Wappalyzer來(lái)探測(cè)是否使用ThinkPHP框架。Wappalyzer插件可以快速對(duì)目標(biāo)網(wǎng)站進(jìn)行基本情況分析,是一款非常實(shí)用的插件工具,通過(guò)該插件能夠分析目標(biāo)網(wǎng)站所采用的平臺(tái)構(gòu)架、網(wǎng)站環(huán)境、服務(wù)器配置環(huán)境、JavaScript框架、編程語(yǔ)言等參數(shù),可通過(guò)Google、火狐商店等安裝或者離線安裝此插件。該插件使用簡(jiǎn)單易懂,首先打開(kāi)我們要分析檢測(cè)的網(wǎng)頁(yè),然后點(diǎn)擊插件就可以看到對(duì)該網(wǎng)站分析的結(jié)果,通過(guò)Wappalyzer插件分析目標(biāo)網(wǎng)頁(yè)結(jié)果如圖1所示。
2.debug模式測(cè)試。我們抓取對(duì)目標(biāo)網(wǎng)站的請(qǐng)求包,并對(duì)該請(qǐng)求進(jìn)行分析,測(cè)試payload為http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&test=--><?=phpinfo();?>。
測(cè)試該漏洞可能會(huì)有兩種情況,一種就是目標(biāo)網(wǎng)站開(kāi)啟debug模式,一種就是目標(biāo)網(wǎng)站未開(kāi)啟debug模式。該漏洞的利用原理就是我們?cè)谡?qǐng)求包中輸入攻擊代碼,發(fā)送請(qǐng)求,響應(yīng)會(huì)報(bào)系統(tǒng)錯(cuò)誤的提示,而日志會(huì)寫(xiě)入日志文件中,日志文件路徑同樣有兩種:開(kāi)啟debug模式是\Application\Runtime\Logs\Home\21_07_31.log;未開(kāi)啟debug模式是\Application\Runtime\Logs\Common\21_07_31.log。其中的21_07_31.log文件名以當(dāng)天的日期命名,我們先對(duì)開(kāi)啟debug模式進(jìn)行測(cè)試,如圖2所示。
經(jīng)過(guò)測(cè)試,在debug模式下未出現(xiàn)系統(tǒng)錯(cuò)誤提示,所以目標(biāo)網(wǎng)站未開(kāi)啟debug模式。漏洞利用payload為http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/21_07_31.log。
3.非debug模式測(cè)試。抓包并分析,測(cè)試Payload為http://118.---.--.37:39916/index.php?m=--><?=phpinfo();?>。如圖3所示,顯示“系統(tǒng)發(fā)生錯(cuò)誤”,即在非debug模式下出現(xiàn)系統(tǒng)錯(cuò)誤提示。
漏洞利用payload為http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_07-31.log,漏洞利用成功,說(shuō)明phpinfo已被寫(xiě)入日志文件中。
4.寫(xiě)入測(cè)試代碼。我們進(jìn)一步利用漏洞,寫(xiě)入一句測(cè)試代碼,如圖4所示。使用蟻劍鏈接服務(wù)器終端工具,中國(guó)蟻劍是一款開(kāi)源的跨平臺(tái)網(wǎng)站管理工具,它主要面向于合法授權(quán)的滲透測(cè)試安全人員以及進(jìn)行常規(guī)操作的網(wǎng)站管理員。我們可以從GitHub網(wǎng)站中下載蟻劍的源碼,下載地址為:https://github.com/AntSwordProject/AntSword-Loader。連接時(shí)在蟻劍界面右擊點(diǎn)擊新增,輸入鏈接http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_07-31.log,以及要連接的密碼123,連接成功后如圖5所示。
5.連接目標(biāo)服務(wù)器。通過(guò)上一步驟,我們已經(jīng)可以連接到目標(biāo)服務(wù)器,可以看到目標(biāo)服務(wù)器的當(dāng)前路徑、磁盤(pán)列表、系統(tǒng)信息、當(dāng)前用戶等信息。至此,我們可以判定網(wǎng)站http://118.---.--.37:39916/index.php)存在ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞,我們利用緩存邏輯缺陷可直接寫(xiě)入代碼,直觀顯示出ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞的巨大危害。
三、修復(fù)建議
1.最好的修復(fù)方法就是升級(jí)到最新的ThinkPHP版本,或者其它不受此漏洞影響的安全版本。
2.不建議直接使用assign方法對(duì)模板變量進(jìn)行賦值。
3.減少使用高危函數(shù)如include等,如果必須使用可對(duì)函數(shù)進(jìn)行文件內(nèi)容過(guò)濾操作。
4.對(duì)所有輸入提交可能包含文件地址的內(nèi)容,包括服務(wù)器本地文件及遠(yuǎn)程文件,進(jìn)行嚴(yán)格檢查,參數(shù)中不允許出現(xiàn)./和../等目錄跳轉(zhuǎn)符。
5.嚴(yán)格檢查文件包含函數(shù)中的參數(shù)是否被外界可控。
6.嚴(yán)格檢查變量是否已經(jīng)初始化。
四、結(jié)束語(yǔ)
一直以來(lái),網(wǎng)絡(luò)安全漏洞呈上升趨勢(shì),為了確保我們網(wǎng)站的安全,必須增強(qiáng)我們的責(zé)任心,經(jīng)常開(kāi)展對(duì)網(wǎng)站的漏洞掃描工作。這次發(fā)現(xiàn)的ThinkPHP-3.2.X遠(yuǎn)程代碼執(zhí)行漏洞,由于網(wǎng)站程序設(shè)計(jì)錯(cuò)誤,導(dǎo)致遠(yuǎn)程代碼執(zhí)行問(wèn)題。所以,我們?cè)谑褂肨hinkPHP等開(kāi)源框架的時(shí)候,不僅僅要考慮易用性,也必須重視安全問(wèn)題,否則會(huì)導(dǎo)致用戶數(shù)據(jù)泄露,服務(wù)器被提權(quán)等問(wèn)題的發(fā)生。2021年8月17日,國(guó)務(wù)院頒布了《關(guān)鍵信息基礎(chǔ)設(shè)施安全保護(hù)條例》,將于9月1日起施行?!蛾P(guān)鍵信息基礎(chǔ)設(shè)施安全保護(hù)條例》的施行,對(duì)于我國(guó)的網(wǎng)絡(luò)信息化建設(shè)具有重要作用。本條例所指的關(guān)鍵信息基礎(chǔ)設(shè)施,主要是指公共通信和信息服務(wù)、能源、交通、水利、金融、公共服務(wù)、電子政務(wù)、國(guó)防科技工業(yè)等重要行業(yè),如果這些領(lǐng)域的基礎(chǔ)設(shè)施遭到破壞、喪失功能或者數(shù)據(jù)泄露,會(huì)造成嚴(yán)重的后果,可能會(huì)嚴(yán)重危害國(guó)家安全、國(guó)計(jì)民生等。網(wǎng)絡(luò)安全至關(guān)重要,必須高度重視,防患于未然。
參? 考? 文? 獻(xiàn)
[1]啟明星辰發(fā)布《2020~2021網(wǎng)絡(luò)安全態(tài)勢(shì)觀察報(bào)告》. 2021-08-16. https://www.venustech.com.cn/u/cms/www/202108/181454025drp.pdf;