文件包含漏洞

文件包含漏洞

產(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.
![](http://upload-images.jianshu.io/upload_images/2495234-669882c3b1b47585.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
上傳一個圖片,包含文件,include函數(shù)在遇到<?會按php解析
2.
![](http://upload-images.jianshu.io/upload_images/2495234-8c200d9fd7e58efa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
使用跳出。包含文件
3.
![](http://upload-images.jianshu.io/upload_images/2495234-40338cee7529f751.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我的php版本是5.5.9不能使用截斷
4.
![](http://upload-images.jianshu.io/upload_images/2495234-361c8dbd0e7e4ba6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
主要url欄里面回會把尖括號換成16進制。
可以通過curl請求來完成。

![](http://upload-images.jianshu.io/upload_images/2495234-08a3fcdbd6a98ab9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
然后包含日志文件getshell
![](http://upload-images.jianshu.io/upload_images/2495234-d5e780b613581f78.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

![](http://upload-images.jianshu.io/upload_images/2495234-3305e5c95124c808.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


![](http://upload-images.jianshu.io/upload_images/2495234-be030cfa44955a06.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
條件有點困難
**遠程文件包含**
遠程編寫一個非php后綴的文件。里面的內(nèi)容是php代碼。
用來實現(xiàn)遠程加載,惡意代碼。getshell

![](http://upload-images.jianshu.io/upload_images/2495234-304f940df57b2c16.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 防御
* PHP中使用open_basedir限制訪問區(qū)域
* 過濾.(點)/(斜杠)\(反斜杠)
* 禁止服務器遠程文件包含。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容