檔案包含漏洞

2021-09-12 19:15:02 字數 4214 閱讀 1161

直接執行**的函式:

eval()、assert()、system()、exec()、shell_exec()、passthru()、

escapeshellcmd()、pcntl_exec()等就不一一舉例了。

1、eval()

eval() 函式把字串按照 php **來計算,如常見的一句話後門程式:<?php

eval($_post[cmd])?>

2、assert() 與eval類似,字串被 assert() 當做 php **來執行;

php檔案包含漏洞

開發人員都希望**更加靈活,所以通常會將被包含的檔案設定為變數,用來進行動態呼叫。正是這種靈活性,從而導致客戶端可以呼叫乙個惡意檔案,造成檔案包含漏洞。

常見的導致檔案包含的函式:

php:include()、include_once()、require()、require_once()等;

1.php檔案包含可以直接執行包含檔案的**,包含的檔案格式不受任何限制

在 php 中提供了四個檔案包含函式:

(1) require: 找不到被包含的檔案時會產生致命錯誤(e_compile_error),並停止指令碼;

(2) include:找不到被包含的檔案時只會產生乙個(e_warinng),指令碼將繼續執行;

(3) require_once:與 include 類似會產生警告,區別是如果檔案**已經被包含,則不會再

次被包含;

2、檔案包含漏洞利用的前提條件:

(1)web 應用採用 include 等檔案包含函式,並且需要包含的檔案路徑是通過使用者傳輸參

數的方式引入;

(2)使用者能夠控制包含檔案的引數,被包含的檔案可被當前頁面訪問;

3、檔案包含獲取 webshell 的條件:

(1)攻擊者需要知道檔案存放的物理路徑;

(2)對上傳檔案所在目錄擁有可執行許可權;

(3)存在檔案包含漏洞;

4、典型特徵

變數的值為乙個頁面:

?page=a.php

?home=b.html

?file=content…

5、常見的敏感路徑:

1 windows

c:\boot.ini //檢視系統版本

c:\windows\system32\inetsrv\metabase.xml //iis 配置檔案

c:\windows\repair\sam //儲存 windows 系統初次安裝的密碼

c:\program files\mysql\my.ini //mysql 配置

c:\program files\mysql\data\mysql\user.myd //mysql root

c:\windows\php.ini //php 配置資訊

c:\windows\my.ini //mysql 配置檔案

日誌預設路徑

(1) apache+linux 日誌預設路徑

或者/var/log/httpd/access_log

(2) apache+win2003 日誌預設路徑

d:\xampp\apache\logs\access.log

d:\xampp\apache\logs\error.log

(3) iis6.0+win2003 預設日誌檔案

c:\windows\system32\logfiles

(4) iis7.0+win2003 預設日誌檔案

%systemdrive%\inetpub\logs\logfiles

5、檔案 php 中的檔案包含分為本地包含和遠端包含:

(1)遠端檔案包含(rfi) 一般 php 預設關閉遠端包含,開啟遠端檔案包含功能需要在 php.ini 中修改:

allow_url_include = on

(2)本地包含(lfi)

index.php:

<?php

phpinfo();

?>

a. php:

<?php

include("index.php")

?>

無論 index.php 檔案的副檔名改為:jpg、rar、txt、進行測試都可以被 php 解析(只要符合

php **規範)。若包含非 php 語法規範的原始檔,將會暴露其源**。

(4)本地包含配合檔案上傳

當乙個**能夠檔案上傳,但是是基於白名單過濾的,如果此時有檔案包含漏洞那麼就可

以繞過過濾規則拿 shell。

<?fputs ( fopen(「shell.php」 ,」w」 ) ,」<?php eval($_post[123]); ?>」 )?>
通過檔案包含漏洞訪問此頁面,就會在所在目錄下生成 shell.php。

(5)使用 php 封裝協議

file:// 訪問本地檔案系統

http:// 訪問 https **

ftp:// 訪問 ftp url

php:// 訪問輸入輸出流

zlib:// 壓縮流

data:// 資料

ssh2:// security shell2

expect:// 處理互動式的流

glob:// 查詢匹配的檔案路徑

可用於:include()、require()、include_once()、require_once()、highlight_file()、show_source()、

readfile()、foopen_file()、file_get_content()

關於 php 的配置檔案:

(1)allow_url_fopen: off/on 路徑:/etc/php/7.0/apache2/php.ini

(2)allow_url_include: off/on 路徑:/etc/php/7.0/apache2/php.ini

檔案包含漏洞一般帶有目錄遍歷漏洞

利用檔案包含漏洞來連線自己上傳到其他位置的馬(通過上傳要求並且帶有目錄可解析的馬),從而菜刀連線來使用。如果不用目錄穿越的話自己上傳馬的位置可能不會被允許訪問,從而造成連線失敗。

在使用遠端包含時,不能包含.php檔案,否則會執行不成功,但是可以執行.php檔案中的echo輸出語句。包括使用php://filter/read=convert.base64-encode/resource= 去讀取原始碼時也不能。必須保證不是.php結尾。

包含apache日誌檔案
某個 php 檔案存在本地包含漏洞導致無法上傳檔案,此時可以找到 apache 的安裝路徑,利用包含漏洞包含 apache 日誌也可以獲取 webshell。

一般情況下 apache 會存在兩個日誌檔案,access.log(訪問日誌)和 error.log(錯誤日誌)。

當訪問乙個不存在的資源時,apache日誌同樣會記錄,並寫到accsee.log檔案中,這時再去包含

apache的日誌檔案,就可以利用包含漏洞。

但實際是不可行的,因為在訪問url後一句話木馬在日誌檔案裡變形了

php**中的",空格"都被瀏覽器轉碼了,這樣就無法利用apache包含漏洞。

但可以通過burp繞過編碼

在window環境下,存在apache\logs。乙個是訪問日誌,乙個是錯誤日誌。通過在url處製造錯誤,從而將錯誤寫入錯誤日誌中並且進行包含錯誤日誌操作 。達到getshell的效果。

此時發現寫入錯誤日誌中的檔案被轉義了,這時應該使用burp抓包來對資料轉義。

檔案包含漏洞

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

檔案包含漏洞

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

檔案包含漏洞

檔案包含 程式開發人員通常會把可重複使用的函式寫到單個檔案中,在使用某些函式時,直接呼叫此檔案,而無須再次編寫,這 種呼叫檔案的過程一般被稱為包含。漏洞成因 在通過動態包含的方式引入檔案時,由於傳入的檔名沒有經 過合理的校驗,從而操作了預想之外的檔案,就可以導致意外 的檔案洩露甚至惡意的 注入 檔案...