侵權(quán)投訴
訂閱
糾錯(cuò)
加入自媒體

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腳本代碼,如下:

image.png


其中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)可以不用必須指定。)

image.png

通過(guò)訪問(wèn)該資源,可以判斷使用了文件包含函數(shù)。

image.png


服務(wù)器直接將file參數(shù)當(dāng)作文件包含的參數(shù)路徑,并未做任何過(guò)濾,攻擊者可以直接在file參數(shù)后面填寫(xiě)服務(wù)器敏感文件路徑,從而獲得服務(wù)器敏感信息,例如在file后加上../../MYSQL/my.ini即可讀取到服務(wù)器本地的Mysql配置文件。

image.png

1  2  下一頁(yè)>  
聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

安防 獵頭職位 更多
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)