文件包含漏洞
產(chǎn)生的原因:通過引入文件時,用戶可控,沒有嚴格的檢驗,或是被繞過,操作一些敏感文件,導致文件泄露和惡意代碼注入
當包含文件在服務器本地上,就形成本地文件包含,當包含的文件在第三方服務器是,就形成可遠程文件包含。
常見的漏洞代碼
if (isset($_GET[page])) {
include $_GET[page];
} else {
include "home.PHP";
}
其中$_GET[page]使用戶可以控制變量。如果沒有嚴格的過濾就導致漏洞的出現(xiàn)
包含文件的函數(shù)
1.include()
2.include_once()
3.require()
4.require_once()
代碼審計的時候,是否是變量,不過濾,過濾不嚴格,函數(shù)include/require
遠程文件包含和本地文件包含的配置區(qū)別
本地文件包含php.ini配置文件中開啟allow_url_include
遠程文件包含與本地文件包含的區(qū)別(開啟allow_url_include和allow_url——ftp on)
遠程文件(包括本地文件包含)包含比本地文件包含的危害大
本地文件包含利用
- 上傳圖片GETshell
- 讀取文件,讀取php文件
- 包含日志文件獲取webshell
1.首先找到文件存放位置
有權限讀取apache配置文件或是/etc/init.d/httpd
默認位置/var/log/httpd/access_log
2.讓日志文件插入php代碼
發(fā)送url請求時后插入php代碼,一般使用burp抓包修改
curl發(fā)包
插入到get請求,或是user-agent部分
3.包含日志文件(必須要權限包含)
- 包含/proc/self/environ 文件webshell
- phpinfo.php 可以包含臨時文件(顯示臨時文件路徑)寫工具發(fā)包上傳文件。查看返回信息路徑。在使用include包含文件(速度要求快)
- 包含data//或是php://input協(xié)議(偽協(xié)議,需要allow_url_include=On)
1.包含文件上傳的圖片
<?php
if ($_GET[page]) {
include($_GET[page]);
} else {
include "show.php";
} //利用page=/uploads/xxx.jpg
用戶控制$_GET[page]里面內(nèi)容 包含一個帶有惡意代碼的上傳圖片。getshell
(其中要找到上傳圖片的絕得路徑)
2.包含文件上傳的第二種
<?php
if ($_GET[page]) {
include("./action/".$_GET[page]);
} else {
include "./action/show.php";
} //利用page=../uploads/xxx.jpg 跳出當前目錄
3.第三種包含上傳
<?php
if ($_GET[page]) {
include("./action/".$_GET[page].".php");
} else {
include "./action/show.php";
} // 可以看出會在后面追加一個.php后綴 ../uploads/xxx.jpg%00截斷后面的.php
需要開啟(magic_quotes_gpc=off,php小于5.3.4)
windows環(huán)境下
IIS配置文件,查找日志路徑
apache/nginx
集成環(huán)境
包含日志文件,查看是與否有權限讀取文件(可以解析正常)。
事例
1.## 文件包含漏洞
產(chǎn)生的原因:通過引入文件時,用戶可控,沒有嚴格的檢驗,或是被繞過,操作一些敏感文件,導致文件泄露和惡意代碼注入
當包含文件在服務器本地上,就形成本地文件包含,當包含的文件在第三方服務器是,就形成可遠程文件包含。
常見的漏洞代碼
if (isset($_GET[page])) {
include $_GET[page];
} else {
include "home.PHP";
}
其中$_GET[page]使用戶可以控制變量。如果沒有嚴格的過濾就導致漏洞的出現(xiàn)
包含文件的函數(shù)
1.include()
2.include_once()
3.require()
4.require_once()
代碼審計的時候,是否是變量,不過濾,過濾不嚴格,函數(shù)include/require
> 遠程文件包含和本地文件包含的配置區(qū)別
本地文件包含php.ini配置文件中開啟allow_url_include
遠程文件包含與本地文件包含的區(qū)別(開啟allow_url_include和allow_url——ftp on)
遠程文件(包括本地文件包含)包含比本地文件包含的危害大
#### windows環(huán)境下
IIS配置文件,查找日志路徑
apache/nginx
集成環(huán)境
包含日志文件,查看是與否有權限讀取文件(可以解析正常)。
#### 事例
1.

上傳一個圖片,包含文件,include函數(shù)在遇到<?會按php解析
2.

使用跳出。包含文件
3.

我的php版本是5.5.9不能使用截斷
4.

主要url欄里面回會把尖括號換成16進制。
可以通過curl請求來完成。

然后包含日志文件getshell

或是通過抓包來插入一句話


條件有點困難
**遠程文件包含**
遠程編寫一個非php后綴的文件。里面的內(nèi)容是php代碼。
用來實現(xiàn)遠程加載,惡意代碼。getshell

### 防御
* PHP中使用open_basedir限制訪問區(qū)域
* 過濾.(點)/(斜杠)\(反斜杠)
* 禁止服務器遠程文件包含。