檔案包含漏洞
- 原理
-
- 1.本地檔案包含
- 2. 遠端檔案包含
- 3.日志檔案包含 ??
- 知識點
-
- 1. PHP包含檔案的函數
- 2. PHP僞協定
- 3. 繞過(未完善
- 5. tip
- 執行個體
-
- 1. 檔案包含與上傳結合
原理
當伺服器開啟allow_url_include時,通過PHP函數(如include)去動态包含檔案,且該輸入使用者可控,即會造成檔案包含漏洞
eg:
#漏洞:
<?php
include $_GET['filename'];
?>
#我們控制輸入file為惡意檔案test.php
filename=test.php
#test.php
<?php
phpinfo();
?>
1.本地檔案包含
被包含的檔案在伺服器本地
- 使用者對輸入可控且無過濾
- 可以利用相對路徑或絕對路徑讀取系統敏感檔案
2. 遠端檔案包含
被包含的檔案在别的伺服器(要開啟allow_url_fopen
3.日志檔案包含 ??
知識點
1. PHP包含檔案的函數
include()
require()
include_once()
require_once()
# include()函數并不在意被包含的檔案是什麼類型,隻要有php代碼,都會被解析出來
2. PHP僞協定
官方文檔:PHP僞協定
php://input 利用post傳參 #将post請求的資料當作php代碼執行
zip:// 可以通路壓縮包裡面的檔案。 #當它與包含函數結合時,zip://流會被當作php檔案執行,進而實作任意代碼執行
phar:// #類似zip,但其路徑無限制
data:// 同樣類似與php://input,可以讓使用者來控制輸入流 #當它與包含函數結合時,使用者輸入的data://流會被當作php檔案執行,進而導緻任意代碼執行
?
php://filter可以擷取指定檔案源碼。 #當它與包含函數結合時,php://filter流會被當作php檔案執行 是以我們一般對其進行編碼,讓其不執行,進而導緻任意檔案讀取
3. 繞過(未完善
雙寫,截斷…
5. tip
- 利用…/或…\傳回上一級目錄
- 預設情況下,系統會将多餘的…\ 丢棄,可以利用這一點直接傳回根目錄
-
遇到file_get_contents()要想到用php://input繞過
file_get_contents() 将整個檔案讀入一個字元串
- php://filter/read=convert.base64-encode/resource=檔案路徑
-
zip://中隻能傳入絕對路徑。
要用#分隔壓縮包和壓縮包裡的内容,并且#要用url編碼%23(即下述POC中#要用%23替換)
隻需要是zip的壓縮包即可,字尾名可以任意更改。
相同的類型的還有zlib://和bzip2://
執行個體
1. 檔案包含與上傳結合
-
思路:
先用一句話木馬寫入圖檔後上傳,傳回一個相對路徑
利用該路徑去進行檔案包含,執行木馬(利用include漏洞)
蟻劍連結拿到shell
- 操作:
上傳
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0cGRNNzYU1EeVpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwkTMyITMzAjMyETNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
檔案包含
蟻劍連結
成功連結,拿到shell
-
注意
蟻劍連結的應該是木馬寫入的檔案位址,如本次寫入的位址為:
http://127.0.0.1/DVWA-master/vulnerabilities/fi/shell.php