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

PHP文件包含漏洞原理分析|美創(chuàng)安全實驗室

PHP是目前非常流行的Web開發(fā)語言,但是在利用PHP開發(fā)Web應(yīng)用時,如果稍有不注意,就會產(chǎn)生PHP文件包含漏洞。PHP文件包含漏洞是一種常見的漏洞,而通過PHP文件包含漏洞入侵網(wǎng)站,甚至拿到網(wǎng)站的WebShell的案例也是不勝枚舉。本期美創(chuàng)安全實驗室將帶大家了解PHP文件包含漏洞的產(chǎn)生原因和漏洞原理。

漏洞簡介

文件包含漏洞(File Inclusion)是一種常見的依賴于腳本運行從而影響Web應(yīng)用的漏洞。嚴格來說,文件包含漏洞是“代碼注入”的一種,許多腳本語言,例如PHP、JSP、ASP、.NET等,都提供了一種包含文件的功能,這種功能允許開發(fā)者將可使用的腳本代碼插入到單個文件中保存,在需要調(diào)用的時候可以直接通過載入文件的方式執(zhí)行里面的代碼,但是如果攻擊者控制了可執(zhí)行代碼的路徑,也就是文件位置時,攻擊者可以修改指定路徑,將其指向一個包含了惡意代碼的惡意文件。

文件包含漏洞通常都會使Web服務(wù)器的文件被外界瀏覽導(dǎo)入信息泄露,執(zhí)行的惡意腳本會導(dǎo)致網(wǎng)站被篡改,執(zhí)行非法操作,攻擊其他網(wǎng)站,獲取WebShell等嚴重危害。

漏洞產(chǎn)生原理

在上一節(jié)的描述中我們提到,攻擊者通過控制可執(zhí)行代碼的路徑就可以實現(xiàn)文件包含漏洞,這只是一個對整體攻擊流程的簡化描述,在實際情境下,服務(wù)器解析執(zhí)行php文件時通過包含函數(shù)可以加載另一個文件中的php代碼,當(dāng)被包含的文件中存在木馬時,就意味著木馬程序會在服務(wù)器上加載執(zhí)行。

所以產(chǎn)生文件包含漏洞的根本原因在于開發(fā)者是否對通過包含函數(shù)加載的文件進行了嚴格且合理的校驗,在PHP中總共有四種文件包含函數(shù):

1)Include():包含并運行指定的文件,只有在程序執(zhí)行到include時才包含文件,且當(dāng)包含文件發(fā)生錯誤時,程序警告,但會繼續(xù)執(zhí)行。

2)Require():只要程序一運行就會執(zhí)行該包含文件函數(shù),當(dāng)包含文件發(fā)生錯誤時,程序直接終止執(zhí)行。

3)Include_once():和include()類似,不同之處在于include_once會檢查這個文件是否已經(jīng)被導(dǎo)入,如果已導(dǎo)入、下文便不會再導(dǎo)入。

4)Require_once():和require()類似,不同處在于require_once也是與include_once一樣只導(dǎo)入一次。

根據(jù)被包含文件的位置不同,PHP文件包含漏洞可以分為本地文件包含漏洞(Local File Inclusion,LFI),和遠程文件包含漏洞(Remote File Inclusion,RFI)。顧名思義,所謂的本地文件包含漏洞指的是攻擊者通過控制包含文件函數(shù),如include(),require()等,加載服務(wù)器本地上的PHP腳本文件,當(dāng)然如果本地的PHP腳本文件都是一些對系統(tǒng)無害的功能性文件,攻擊者也無法進行進一步的利用,但若是攻擊者能夠配合任意文件上傳漏洞,將惡意文件上傳進服務(wù)器中,再通過本地文件包含執(zhí)行該惡意腳本就可以達到獲得網(wǎng)站控制權(quán)的目的。

而遠程文件包含漏洞是指攻擊者可以通過文件包含函數(shù)加載其他服務(wù)器上的PHP文件,在實際項滲透目中,攻擊者可以在自己的服務(wù)器上存放一個可執(zhí)行的惡意文件,然后通過目標(biāo)網(wǎng)站存在遠程文件包含漏洞來加載相關(guān)文件,實現(xiàn)任意命令執(zhí)行。

漏洞復(fù)現(xiàn)

1、PHP本地文件包含漏洞獲取服務(wù)器敏感信息

搭建測試環(huán)境,為了方便演示,我們簡單設(shè)計了一個服務(wù)器上的PHP腳本代碼,如下:

image.png


其中PHP配置文件中,allow_url_fopen和allow_url_include兩個參數(shù)默認是ON的狀態(tài)。(在本地文件包含漏洞中,allow_url_fopen必須是ON的狀態(tài)allow_url_include的狀態(tài)可以不用必須指定。)

image.png

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

image.png


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

image.png

1  2  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

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

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