2023-11-19 分類: 網站建設
摘要:本文對pHp文件包含漏洞的形成、利用技巧及防范進行了詳細分析,并通過一個真實案例演示了如何利用pHp文件包含漏洞對目標網站進行滲透測試,最終成功獲取到網站的WebShell。
本文詳細分析了含有漏洞的pHp文件的形成、利用技術和防范,并通過一個真實案例演示了如何利用含有漏洞的pHp文件對目標網站進行滲透測試,最終成功獲取該網站。
pHp是一種非常流行的Web開發語言,網上很多Web應用都是用pHp開發的。在使用pHp開發的Web應用中,包含漏洞的pHp文件是一個常見的漏洞,利用pHp文件包含漏洞入侵網站也是一種主流的攻擊方式。
pHp文件包含漏洞介紹
首先介紹一下什么是包含漏洞的文件。嚴格來說,文件包含漏洞是一種“代碼注入”。其原理是注入用戶可以控制的腳本或代碼,讓服務器執行。“代碼注入”的典型代表是文件包含。文件包含漏洞可能出現在JSp、pHp、ASp等語言中,原理是一樣的。本文僅介紹pHp文件包含漏洞。
為了成功利用文件包含漏洞進行攻擊,需要滿足以下兩個條件:
1.Web應用采用include()等文件包含函數通過動態變量的方式引入需要包含的文件 2.用戶能夠控制該動態變量
在 pHp 中,有四個用于包含文件的函數。當這些函數用于包含文件時,將執行文件中包含的 pHp 代碼。它們之間的區別解釋如下:
():當使用該函數包含一個文件時,只有在執行到()函數的代碼時才會包含該文件。當發生錯誤時,只會給出警告,并繼續執行。
():功能與()相同,不同之處在于重復調用同一個文件時,程序只調用一次。
():1.()和()的區別在于,如果()的執行發生錯誤,函數會輸出錯誤信息并終止腳本。2. 當使用()函數包含一個文件時,程序一執行就會立即調用該文件,只有在程序執行到該函數時才會調用()。
():它的功能和()一樣,不同的是在重復調用同一個文件時,程序只調用一次。
現在看一個包含代碼的簡單文件,如下面的圖 1 所示。
圖1
從上面的代碼可以看出,得到變量$的值后,直接帶入()函數中,不做任何處理。存在一個包含漏洞的文件,我們可以利用這個漏洞查看系統中的任何文件。
讓我們實際測試一下。首先將pHp頁面上傳到Web服務器,讓它包含一個普通的txt文件。操作結果如下圖2所示。
圖2
然后我們把php代碼插入到txt文本中,看看結果?插入如下圖 3 所示的代碼。
圖 3
再次訪問,結果如下圖4所示。
圖 4
從上圖可以看出,文中的pHp代碼執行成功。
利用該漏洞,我們可以查看系統中的任意文件,例如常用的“/etc/”文件,如圖5所示。
圖 5
pHp文件包含漏洞分為本地文件包含漏洞(LFI)和遠程文件包含漏洞(RFI)。可以打開和包含本地文件的漏洞稱為本地文件包含漏洞。使用本地文件包含漏洞,可以查看系統中任意文件的內容,也可以在有條件的情況下執行命令。這在下面的漏洞利用技術部分中有詳細描述。
如果php.ini 的配置選項為ON,則文件包含功能可以加載遠程文件。這種漏洞稱為遠程文件包含漏洞。使用遠程文件包含漏洞,可以直接執行任意命令。在實際滲透攻擊過程中,攻擊者可以在自己的Web服務器上放置一個可執行的惡意文件,通過目標網站中包含漏洞的遠程文件加載該文件php代碼執行漏洞,從而達到執行任意命令的目的。
文件包含漏洞利用技術
遠程文件包含漏洞之所以能夠執行命令,是因為攻擊者可以自定義包含文件的內容。因此,如果本地文件包含漏洞,如果要執行命令,還需要找到攻擊者可以控制內容的本地文件。
目前常用的技術有以下幾種:
包含用戶上傳的文件。這很容易理解,也是最簡單的方法。如果用戶上傳的文件內容包含pHp代碼,這些代碼會在被文件函數加載后執行。但是,攻擊的成功取決于上傳功能的設計。例如,您需要知道上傳文件存儲的物理路徑,還需要對上傳文件具有執行權限。
包含偽協議,例如 data:// 或 php://。這需要目標服務器支持,并且需要設置為ON。pHp5.2.0之后的版本,支持data:偽協議,方便代碼執行。
包含文件。這部分要求攻擊者能夠控制某些文件的內容。pHp默認生成的文件一般存放在/tmp目錄下。
包含日志文件。例如,Web 服務器的訪問日志文件是一種常用技術。因為幾乎所有的網站都會記錄用戶的訪問訪問日志。因此,攻擊者可以通過文件包含漏洞將pHp代碼插入到Web日志中,并執行Web日志中包含的pHp代碼。在以下案例中,該技術用于成功獲取目標網站。但需要注意的是,如果網站訪問量很大,日志文件可能會非常大。這時候如果包含這么大的文件,pHp進程可能會卡住。一般的網站通常每天都會生成一個新的日志文件,所以在凌晨攻擊成功相對容易。
包含 /proc/self/ 文件。這也是一種通用技術,因為它不需要猜測包含文件的路徑,用戶也可以控制其內容。常見的方法是將pHp代碼注入User-來完成攻擊。
使用pHp文件滲透存在漏洞的網站案例
上面我們詳細介紹了pHp文件包含漏洞的形成和測試。下面我們通過一個真實案例來說明如何利用pHp文件包含漏洞來滲透目標網站。
目標網站:中國電信業務系統
目的:獲取目標網站的信息
詳細的滲透過程如下:
1. 發現漏洞
我們先打開一個目標網站的網址看一下,如下圖:
URL:http://XXX.vnet.mobi/index.php?path=jcb/zt/gfsdtjqg/index.html
注意path=后面的內容。通過這個URL,可以發現.php調用了文件函數,將網站目錄下的文件包含進來,顯示給用戶。但目前我們不確定這個 URL 是否存在文件包含漏洞。讓我們手動測試是否存在文件包含漏洞。因為網站有一個.php的測試頁面,通過這個頁面我們可以得到很多關于目標網站的有用信息。不用fuzz就可以得到web目錄的絕對路徑,所以這里可以直接構造已知文件的路徑,讓它包含php代碼執行漏洞,快速確認是否存在文件包含漏洞。
我們通過包含已知文件“/etc/”文件來確認上述 URL 文件是否包含漏洞。
圖 6
從上面返回的結果可以確定該網站存在包含漏洞的文件。下面我們來演示一下如何利用這個漏洞進行滲透測試。
2. 漏洞利用
通過以上測試,我們可以確定該網站存在文件包含漏洞。那么問題來了,如何利用這個漏洞來達到我們的目的呢?一種思路是將后門代碼插入到網站的web日志文件中,利用目標網站的文件包含漏洞來包含這個日志文件。這時候web日志中的后門代碼會作為pHp代碼執行,這樣我們就可以得到一個執行后續攻擊。但此時,我們面臨著一個問題。我們需要知道Web日志的存儲路徑,否則無法達到目的。通常web日志存儲路徑由web服務器的配置文件指定。以上獲取的信息可用于判斷目標網站是否使用該服務器。所以,我們可以先通過包含web服務器配置文件(.conf)來獲取web日志存儲路徑。操作如下圖7所示。
圖 7
3.獲取
上面,我們通過Web服務器配置文件(.conf)獲取到了Web訪問日志(/opt//logs/.log)的存在路徑,但是由于網站的日志文件很大,訪問程序會卡在這個時候,所以我們選擇在清晨再次進攻。因為一般的網站每天都會生成一個訪問日志文件,所以早上的日志文件很小,很容易成功。下面的圖 8 顯示了如何將后門代碼插入到 Web 訪問日志中,如下所示。
圖 8
最終,我們成功獲取了目標網站,如圖9所示。
圖9
pHp 文件包含漏洞預防
這部分主要從代碼層和Web服務器的安全配置兩個方面來講解pHp文件包含漏洞的防范。首先,從代碼層面來說,在開發過程中要盡量避免動態變量,尤其是那些用戶可以控制的。一個保險的方法是使用“白名單”的方式將允許被包含的文件列出,只允許白名單中的文件被包含,這樣就可以避免任何文件被包含的風險。您可以參考下面圖 10 所示的代碼實現。.
圖10
另一種方法是在黑名單中定義漏洞利用過程中包含一些特殊字符的文件,并對傳入的參數進行過濾,但有時會因為過濾不完整而被有經驗的攻擊者繞過。
在web服務器安全配置方面,可以通過設置php.ini中的值來限制特定目錄下允許包含的文件,可以有效避免利用文件包含漏洞的攻擊。需要注意的是,值是目錄的前綴,所以假設設置了以下值:=/var/www /test,那么下面的目錄其實都在允許的范圍內。
/var/www/test /var/www/test123 /var/www/testabc
如果要限制指定目錄,需要在末尾加上“/”,需要特別注意。
open_basedir=/var/www/test/
如果有多個目錄,下面的目錄用分號隔開,下面用冒號隔開。
總結
以上,我們通過文字和代碼詳細分析了含有漏洞的pHp文件的形成、利用技巧和防范,并結合一個真實案例講解了如何利用含有漏洞的pHp文件對目標網站進行滲透測試,最終獲得許可。通過這些內容,相信讀者對pHp文件包含漏洞有了深入的了解。其實,只要了解漏洞的原理,對漏洞有深入的了解,加上安全意識,徹底解決包含漏洞的pHp文件并不難。
新聞名稱:pHp文件包含漏洞的形成、利用技巧及防范進行了
標題鏈接:http://m.newbst.com/news13/295413.html
成都網站建設公司_創新互聯,為您提供網站收錄、網站內鏈、搜索引擎優化、外貿建站、手機網站建設、網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容