1. 程式人生 > >【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-5.文件包含

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-5.文件包含

devel 面板 mat 後臺 ace cloud 使用 讀取 fop

文件包含(File Inclusion):是指頁面利用url去動態包含文件(include或require等),當文件名參數可控但又過濾不嚴的時候,就容易被利用。文件包含漏洞分為本地文件包含漏洞與遠程文件包含漏洞,遠程文件包含漏洞是因為開啟了php配置中的allow_url_fopen選項(選項開啟之後,服務器允許包含一個遠程的文件)。

DVWA實戰:

1. 打開phpStudy或xampp,運行Apach和MySQL,這裏要特別打開php的allow_url_include選項:點擊面板“其他選項菜單”->PHP拓展及設置->參數開關設置->勾選“allow_url_include”;

2. 瀏覽器進入DVWA主界面,在左側欄選擇DVWA Security安全等級為Low,然後進入File Inclusion;

技術分享圖片

我們看到頁面上有三個文件選項,當我們點擊其中一個時,頁面會顯示該文件的內容,同時我們看到url變成了:

http://localhost/DVWA-1.9/vulnerabilities/fi/?page=file1.php

3. 那麽如果我們改變page的參數,是不是就能獲得其它文件?我們試著將參數改為page=../../phpinfo.php,結果我們順利的得到了該頁面的信息:

技術分享圖片

這樣,我們就利用了文件包含的漏洞,獲取了本不應該呈現給我們的頁面。如果我們查看後臺源碼的話,我們會發現其中就一句話:

$file = $_GET[ ‘page‘ ];

沒有任何的過濾,參數名又可控,就形成了文件包含漏洞。

4. 我們把安全等級調為medium,采用同樣的方法,發現失效了。如果我們看後臺源碼,發現多了兩行過濾控制:

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

即將”http:// ”、”https://”、 ” ../”、”..\”過濾掉,替換成為空字符。這讓我們想起了在命令註入那節中,也采用了對關鍵命令過濾的方式,因此這啟發了我們可以構造....//的方式,過濾掉其中一個,剩下的剛好能用,例如修改page=....//....//phpinfo.php,同樣獲得了之前的結果。

5. 接下去我們試試high等級的文件包含,發現采用上述的方法,報錯:ERROR: File not found!,查看後臺源碼,發現使用了fnmatch函數檢查page參數,要求page參數的開頭必須是file。

if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn‘t the page we want!
    echo "ERROR: File not found!";

既然如此,那我們只要讓參數開頭是file就行啦,構造如下url參數:

page=file:///E:/Development/KPlayer/Web/PHP/phpStudy/WWW/DVWA-1.9/phpinfo.php

就能同樣得到之前的頁面。

6. 最後我們來看看impossible安全等級,發現之前的方法都不管用,查看後臺源碼,發現原來使用了白名單機制,page參數必須為“include.php”、“file1.php”、“file2.php”、“file3.php”之一,杜絕了文件包含漏洞。

// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
    // This isn‘t the page we want!
    echo "ERROR: File not found!";

實戰心得:

當服務器開啟allow_url_include選項時,會通過php的某些特性函數(include(),require()和include_once(),require_once())利用url去動態包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執行。因此有效的方法就是采用白名單的方式,防止這種漏洞。

【筆記】網易微專業-Web安全工程師-04.WEB安全實戰-5.文件包含