PHP文件包含漏洞原理分析|美創(chuàng)安全實(shí)驗(yàn)室
PHP是目前非常流行的Web開(kāi)發(fā)語(yǔ)言,但是在利用PHP開(kāi)發(fā)Web應(yīng)用時(shí),如果稍有不注意,就會(huì)產(chǎn)生PHP文件包含漏洞。PHP文件包含漏洞是一種常見(jiàn)的漏洞,而通過(guò)PHP文件包含漏洞入侵網(wǎng)站,甚至拿到網(wǎng)站的WebShell的案例也是不勝枚舉。本期美創(chuàng)安全實(shí)驗(yàn)室將帶大家了解PHP文件包含漏洞的產(chǎn)生原因和漏洞原理。
漏洞簡(jiǎn)介
文件包含漏洞(File Inclusion)是一種常見(jiàn)的依賴于腳本運(yùn)行從而影響Web應(yīng)用的漏洞。嚴(yán)格來(lái)說(shuō),文件包含漏洞是“代碼注入”的一種,許多腳本語(yǔ)言,例如PHP、JSP、ASP、.NET等,都提供了一種包含文件的功能,這種功能允許開(kāi)發(fā)者將可使用的腳本代碼插入到單個(gè)文件中保存,在需要調(diào)用的時(shí)候可以直接通過(guò)載入文件的方式執(zhí)行里面的代碼,但是如果攻擊者控制了可執(zhí)行代碼的路徑,也就是文件位置時(shí),攻擊者可以修改指定路徑,將其指向一個(gè)包含了惡意代碼的惡意文件。
文件包含漏洞通常都會(huì)使Web服務(wù)器的文件被外界瀏覽導(dǎo)入信息泄露,執(zhí)行的惡意腳本會(huì)導(dǎo)致網(wǎng)站被篡改,執(zhí)行非法操作,攻擊其他網(wǎng)站,獲取WebShell等嚴(yán)重危害。
漏洞產(chǎn)生原理
在上一節(jié)的描述中我們提到,攻擊者通過(guò)控制可執(zhí)行代碼的路徑就可以實(shí)現(xiàn)文件包含漏洞,這只是一個(gè)對(duì)整體攻擊流程的簡(jiǎn)化描述,在實(shí)際情境下,服務(wù)器解析執(zhí)行php文件時(shí)通過(guò)包含函數(shù)可以加載另一個(gè)文件中的php代碼,當(dāng)被包含的文件中存在木馬時(shí),就意味著木馬程序會(huì)在服務(wù)器上加載執(zhí)行。
所以產(chǎn)生文件包含漏洞的根本原因在于開(kāi)發(fā)者是否對(duì)通過(guò)包含函數(shù)加載的文件進(jìn)行了嚴(yán)格且合理的校驗(yàn),在PHP中總共有四種文件包含函數(shù):
1)Include():包含并運(yùn)行指定的文件,只有在程序執(zhí)行到include時(shí)才包含文件,且當(dāng)包含文件發(fā)生錯(cuò)誤時(shí),程序警告,但會(huì)繼續(xù)執(zhí)行。
2)Require():只要程序一運(yùn)行就會(huì)執(zhí)行該包含文件函數(shù),當(dāng)包含文件發(fā)生錯(cuò)誤時(shí),程序直接終止執(zhí)行。
3)Include_once():和include()類(lèi)似,不同之處在于include_once會(huì)檢查這個(gè)文件是否已經(jīng)被導(dǎo)入,如果已導(dǎo)入、下文便不會(huì)再導(dǎo)入。
4)Require_once():和require()類(lèi)似,不同處在于require_once也是與include_once一樣只導(dǎo)入一次。
根據(jù)被包含文件的位置不同,PHP文件包含漏洞可以分為本地文件包含漏洞(Local File Inclusion,LFI),和遠(yuǎn)程文件包含漏洞(Remote File Inclusion,RFI)。顧名思義,所謂的本地文件包含漏洞指的是攻擊者通過(guò)控制包含文件函數(shù),如include(),require()等,加載服務(wù)器本地上的PHP腳本文件,當(dāng)然如果本地的PHP腳本文件都是一些對(duì)系統(tǒng)無(wú)害的功能性文件,攻擊者也無(wú)法進(jìn)行進(jìn)一步的利用,但若是攻擊者能夠配合任意文件上傳漏洞,將惡意文件上傳進(jìn)服務(wù)器中,再通過(guò)本地文件包含執(zhí)行該惡意腳本就可以達(dá)到獲得網(wǎng)站控制權(quán)的目的。
而遠(yuǎn)程文件包含漏洞是指攻擊者可以通過(guò)文件包含函數(shù)加載其他服務(wù)器上的PHP文件,在實(shí)際項(xiàng)滲透目中,攻擊者可以在自己的服務(wù)器上存放一個(gè)可執(zhí)行的惡意文件,然后通過(guò)目標(biāo)網(wǎng)站存在遠(yuǎn)程文件包含漏洞來(lái)加載相關(guān)文件,實(shí)現(xiàn)任意命令執(zhí)行。
漏洞復(fù)現(xiàn)
1、PHP本地文件包含漏洞獲取服務(wù)器敏感信息
搭建測(cè)試環(huán)境,為了方便演示,我們簡(jiǎn)單設(shè)計(jì)了一個(gè)服務(wù)器上的PHP腳本代碼,如下:
其中PHP配置文件中,allow_url_fopen和allow_url_include兩個(gè)參數(shù)默認(rèn)是ON的狀態(tài)。(在本地文件包含漏洞中,allow_url_fopen必須是ON的狀態(tài)allow_url_include的狀態(tài)可以不用必須指定。)
通過(guò)訪問(wèn)該資源,可以判斷使用了文件包含函數(shù)。
服務(wù)器直接將file參數(shù)當(dāng)作文件包含的參數(shù)路徑,并未做任何過(guò)濾,攻擊者可以直接在file參數(shù)后面填寫(xiě)服務(wù)器敏感文件路徑,從而獲得服務(wù)器敏感信息,例如在file后加上../../MYSQL/my.ini即可讀取到服務(wù)器本地的Mysql配置文件。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 2024中國(guó)國(guó)際工業(yè)博覽會(huì)維科網(wǎng)·激光VIP企業(yè)展臺(tái)直播
-
精彩回顧立即查看>> 【產(chǎn)品試用】RSE30/60在線紅外熱像儀免費(fèi)試用
-
精彩回顧立即查看>> 2024(第五屆)全球數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)大會(huì)暨展覽會(huì)
-
精彩回顧立即查看>> 【線下會(huì)議】全數(shù)會(huì)2024電子元器件展覽會(huì)
-
精彩回顧立即查看>> 三菱電機(jī)紅外傳感器的特性以及相關(guān)應(yīng)用領(lǐng)域
編輯推薦
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市