PHP文件出現(xiàn)漏洞的原理及解決方案

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

漏洞簡介

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

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

漏洞產(chǎn)生原理

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

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

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

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

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

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

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

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

漏洞復現(xiàn)

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

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

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

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

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

12下一頁>

(免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。 )

贊助商
2020-08-19
PHP文件出現(xiàn)漏洞的原理及解決方案
PHP是目前非常流行的Web開發(fā)語言,但是在利用PHP開發(fā)Web應用時,如果稍有不注意,就會產(chǎn)生PHP文件包含漏洞。

長按掃碼 閱讀全文