檔案包含漏洞總結

2021-09-02 12:59:06 字數 2807 閱讀 1145

前言:檔案包含是存在的乙個很常見的漏洞,今天來總結一下對檔案包含的學習。首先說到檔案包含,那麼成因是什麼?檔案包含是指令碼檔案在引入外部檔案時引用的檔名使用者可控,且沒有對使用者名稱進行嚴格的過濾,從而導致使用者引用意外檔案,造成檔案洩露甚至**注入。

0x00 分類

檔案包含分為兩種,一種時本地檔案包含,另外一種就是遠端檔案包含。

0x01 條件

指令碼檔案要想進行遠端檔案包含操作就必須同時將配置檔案中的一下兩個引數啟用:

0x02 函式

進行檔案包含操作必須要用的兩個函式:include()和require()。

下面說一下兩個函式的區別:

include()函式可以獲取指定的檔案中的所有文字,並把文字拷貝到使用include()函式的檔案中。當包含遇到錯誤,如包含檔案不存在時,include()函式會生成警告,但是指令碼繼續執行。

require()函式同樣接受所有的文字檔案,並且也將檔案複製到使用函式的檔案中,但是當此函式遇到錯誤時,如被包含檔案不存在,require()函式會爆出錯誤,並且指令碼停止執行,這是二者的區別。

注意:還有這兩個函式分別有另乙個翻版,include_once()和require_once()。這其中區別不大,僅僅只是對於重複包含同一檔案時,這兩個函式只會呼叫一次。

0x03  本地檔案包含

故名思意,被包含的檔案位於本地。本地檔案包含不需要啟動配置檔案即可操作。

本地檔案包含的危害:

讀取web程式配置檔案。

利用這個漏洞並且知道web程式的路徑便可以讀取一些重要的配置檔案獲取重要資訊,例如資料庫連線的賬號密碼等等。

2.利用檔案上傳漏洞組合getshell。

我們首先利用檔案上傳處上傳一件含有惡意**的合法檔案,然後利用檔案包含漏洞,將惡意**解析達到getshell的目的。

3.包含日誌檔案getshell。

這種漏洞利用方法需要具有一定的許可權,因為需要讀取apache服務的日誌檔案。原理是這樣的,當apache開啟了日誌功能時,會主動記錄我們的訪問,如果我們在訪問的時候插入惡意**,那麼再結合檔案包含就可以達到惡意**的執行。

一般apache會存在兩個日誌檔案,乙個是訪問日誌檔案(access.log),另乙個是錯誤日誌檔案(error.log),我們使用訪問日誌檔案,因為實驗室發現error.log很智慧型的把錯誤的惡意**進行了轉義處理。

先構造乙個含有惡意**的訪問url,這樣提交之後在日誌檔案便會記錄這條訪問(注意惡意**可能被編碼了所以可以抓個包把編碼改回來)。

之後包含日誌檔案便可執行惡意**。

4.讀取系統配置檔案,造成資訊洩露。

這個也需要許可權,不然無法讀取檔案,同時還應該知道要讀取檔案的路徑。

5.包含data://或php://input等偽協議(需開啟allow_url_include)

在進行包含的時候我們無法直接讀取檔案內容,此時我們可以採用php://filter協議流將檔案內容編碼後讀取。

還有關於利用php://input偽協議,實驗失敗,所以不寫了。。。。。。

6.等等。

0x04  遠端檔案包含

首先還是開啟兩個配置選項。

利用原理是在遠端伺服器上有允許被包含的檔案(許可權),那麼我們便可以直接包含該檔案,如果檔案是shell檔案,那麼我們便可以getshell了。

0x05  繞過

剛才講的這些都是關於可控副檔名的檔案包含,即要包含什麼檔案可以控制,但有些便是定副檔名的檔案包含,我們只允許控制檔名,檔案型別後端已經固定。這個時候我們需要進行繞過嘗試。繞過的方法有以下幾種:

1、%00截斷繞過。對於這種方法,還是要關注版本,php<=5.3.4,和magic_quotes_gpc=off(高版本5.4以上預設開啟)

實驗時只有php5.2成功,php5.3的報錯

下面時5.3版本,出現警告,無法開啟檔案。

所以,其實這個繞過應該也雞肋了。。。。。

2、據說還有檔名長度繞過,就是在檔名後面加」./」,例如file=1.php./././././[…]./././

當長度達到一定就能截斷,linux長度4096,win長度256。不過還是注意版本,據說只能<5.3的版本成功。

檔案包含漏洞總結

本實驗是基於dvwa和sqli labs的實驗環境 0x01 檔案包含漏洞 伺服器通過php的特性 函式 去包含任意檔案時,由於要包含的這個檔案 過濾不嚴,從而可以去包含乙個惡意檔案,而我們可以構造這個惡意檔案來達到 的目的。這也算官方的解釋吧,用個人的話說,通過瀏覽器 url位址或者是乙個引數的變...

PHP檔案包含漏洞總結

php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 1 2 3 4 5 if...

PHP檔案包含漏洞總結

0x00 前言 php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 純文字檢...