一、檔案包含漏洞初步
1.原理
在通過php的相應函式(比如include($_request[666]))引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的**注入。?666=c:/windows/system32/dirvers/etc/hosts
2.檔案包含漏洞的形成需要滿足的倆個條件
(1)include()等函式通過動態變數的方式引入需要包含的檔案
(2)使用者能夠控制這個動態變數
(3)檔案包含的倆個重要的php引數
allow_url_fopen=off
allow_url_include=off
3.常見的檔案包含函式
(1)include():include 生成乙個警告(e_warning),在錯誤發生後指令碼會繼續執行
(2)require():require 生成乙個致命錯誤(e_compile_error),在錯誤發生後指令碼會停止執行
(3)include_once():唯一區別是如果該檔案中已經被包含過某檔案,則不會再次包含。
(4)require_once():,唯一區別是 php 會檢查該檔案是否已經被包含過,如果是則不會再次包含。
4.檔案包含的倆種方式
5.檔案包含的高危觸發點
(1)include()
(2)require()
(3)include_once()
(4)require_once()
(5)可以對檔案進行操作的函式
fopen()
fputs()
6.檔案包含的漏洞危害
(1)簡介:
檔案包含漏洞是乙個危險度比較高的漏洞,本地檔案包含的可以造成探測到服務配置資訊或者是類似password檔案這樣的敏感資訊,也可以讀取本地的源**進行分析進一步發現漏洞,或者通過構造特殊請求寫入日誌,然後包含日誌檔案,達到獲取webshell的目的。
遠端檔案包含漏洞危害更大,可以通過包含遠端檔案達到輕鬆的執行任意命令和獲取webshell。
(2)敏感資訊洩露
(3)獲取webshell
(4)任意命令執行
二、檔案包含高階
1.檔案包含的-php協議
(1)file://訪問本地檔案系統
(2)http://訪問http(s)**
(3)ftp://訪問ftp(s)urls
(4)php://訪問各個輸入/輸出流(i/o streams)
(5)zlib://壓縮流
(6)data://資料(rfc2397)
(7)ssh2://secure shell 2
(8)expect://處理互動式的流
(9)glob://查詢匹配的檔案路徑模式
2.php協議的具體使用
(1)file://協議:讀取本地敏感檔案
file://c:/windows/system32/drivers/etc/hosts
(2)php://協議(在已知**的目錄和檔案的前提下能夠拿到**後台頁面的源**)
(3)php://filter/read=convert.base64-encode/resource=網頁名稱(需要進行base64解密)
(4)php://input:通過include包含通過post提交的資料 (結合bp)
執行系統命令<?php system(「net user」); ?> 修改bp使用的編碼格式
(5)http://協議遠端包含
(6) 一句話木馬的編寫
直接寫入
<?php @eval($_request[666]); ?>
利用fopen()、fputs()函式寫入
<?php
$file
=fopen
('1.php'
,'w');
fputs
($file
,'<?php @eval($_request[666]); ?>'
)?>
(7)通過日誌檔案getshell
開啟apache日誌檔案
訪問網頁下的任意檔案利用bp抓包
修改請求資料為一句話木馬或者用函式寫入木馬的方式
file://file://h:\huanjing\phptutorial\apache\logs\access.log 讀取日誌檔案
利用蟻劍或菜刀getshell
(8)遠端包含檔案注意事項
遠端檔案包含 txt文件
遠端檔案包含無視檔案格式,只要檔案中含有php**就會被執行
遠端檔案包含php檔案的時候,返回的是php**解析後的結果,即html頁面,在遠端伺服器上面解析的
遠端檔案包含txt文件時,返回的是<?php phpinfo(); ?> 然後該目標伺服器在當前伺服器上面解析成功
遠端檔案包含 無視檔案格式 只要檔案中含有php**就會被執行
檔案上傳漏洞中的馬
檔案上傳漏洞結合檔案包含漏洞getshell
(9)檔案包含00截斷
phpstudy2013 2.png%00
兩個關鍵條件:
php版本小於5.2.19
gpc關閉
三、檔案包含漏洞防禦
1.防禦措施
(1)設定白名單
(2)過濾危險字元
(3)設定檔案目錄
設定檔案目錄:php配置檔案中有open_basedir選項可以設定使用者需要執行的檔案目錄,如果設定目錄的話,php僅僅在該目錄內搜尋檔案。
(4)關閉危險配置
關閉危險配置: php配置中的allow_url_include選項如果開啟,php會通過include/require進行遠端檔案包含,由於遠端檔案的不可信任性及不確定性,在開發中禁止開啟此選項,php預設是關閉的。
2.防禦總結
(1)任意檔案包含漏洞的主要出現在能夠解析處理指令碼檔案的函式上,沒有對輸入的變數進行過濾,導致任意檔案包含,進而導致惡意**執行。在開發處理這類功能函式上,一定要遵循程式設計規範;在**核心處,對變數進行過濾限制,設定檔案路徑或者白名單,避免執行任意檔案包含。
(2)最後,總結一下任意檔案包含漏洞的防禦方式。任意檔案包含漏洞的主要出現在能夠解析處理指令碼檔案的函式上,沒有對輸入的變數進行過濾,導致任意檔案包含,進而導致惡意**執行。在開發處理這類功能函式上,一定要遵循程式設計規範;在**核心處,對變數進行過濾限制,設定檔案路徑或者白名單,避免執行任意檔案包含。
檔案包含漏洞之日誌利用
apache日誌 某php檔案存在本地檔案包含漏洞,但無法上傳檔案,此時可以找到apache路徑,利用包含漏洞包含apache日誌檔案也可以獲取webshell apache執行後一般缺省會生成兩個日誌檔案,這兩個檔案是access.log 訪問日誌 和error.log 錯誤日誌 apache的訪...
web滲透 檔案包含漏洞利用
1 讀取敏感檔案 利用檔案包含漏洞讀取任意檔案,讀取檔案的時候有利用條件 目標主機檔案存在 目標檔案的絕對路徑,相對路徑 具有檔案的可讀許可權 提交引數 絕對路徑 path c 路徑 嘗試相對路徑 path 路徑 2 直接包含木馬 將木馬資訊寫入附加資訊中 使用菜刀連線 3 包含木馬寫shell 我...
檔案包含漏洞
簡單的來說,就是我們用乙個可控的變數作為檔名並以檔案包含的的方式呼叫了它,漏洞就產生了。以php為例檔案包含漏洞可以分為rfi 遠端檔案包含 和lfi 本地檔案包含漏洞 兩種。而區分他們最簡單的方法就是php.ini中是否開啟了allow url include。如果開啟了可能包含遠端檔案,如果不是...