檔案包含漏洞的原理總結及例題
什麼是檔案包含漏洞:
PHP檔案包含漏洞的產生原因:
在通過PHP的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的程式碼注入。最常見的就屬於本地檔案包含(Local File Inclusion)漏洞了。
程式開發人員一般會把重複使用的函式寫到單個檔案中,需要使用某個函式時直接呼叫此檔案,而無需再次編寫,這中檔案呼叫的過程一般被稱為檔案包含。
程式開發人員一般希望程式碼更靈活,所以將被包含的檔案設定為變數,用來進行動態呼叫, 但正是由於這種靈活性,從而導致客戶端可以呼叫一個惡意檔案,造成檔案包含漏洞。
幾乎所有指令碼語言都會提供檔案包含的功能,但檔案包含漏洞在PHP Web Application中居多, 而在JSP、ASP、http://ASP.NET
檔案包含漏洞有哪幾種類型:
1.本地檔案包含漏洞
LFI,能夠開啟幷包含本地檔案的漏洞
本地包含顧名思義,就是在網站伺服器本身存在惡意檔案,然後利用本地檔案包含使用
2.遠端檔案包含漏洞
RFI,遠端檔案包含漏洞
遠端檔案包含就是呼叫其他網站的惡意檔案進行開啟
常見的幾個檔案包含函式:
php:
- include()
- include_once()
- fopen()
- require()
- require_once()
jsp/Servlet:
- ava.io
- file()
- java.io
- filereader()
asp:
- include file
- include virtual
主流檔案包含php一些函式的含義:
include() :執行到include()才包含檔案,找不到包含檔案只會產生警告,還會接著執行後面的指令碼
require(): 只要程式一執行就會包含檔案,找不到包含檔案則會產生致命錯誤,並且指令碼執行終止
include_once()和require_once():如檔案包含被運行了,則不會執行第二次
最簡單的漏洞程式碼:
<?php include($_GET[file]);?>
php://偽協議 >> 訪問各個輸入/輸出流:
用法:
php://filter/read=convert.base64encode/resource=[檔案路徑]
含義:
php://filter是一種元封裝器,設計用於"資料流開啟"時的"篩選過濾"應用,對本地磁碟檔案進行讀寫。簡單來講就是可以在執行程式碼前將程式碼換個方式讀取出來,只是讀取,不需要開啟 allow_url_include;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00X1 本地檔案包含 ( 以include()為例 )
首先建立兩個檔案,1.txt 和 11.php 如下:
建立完後並對 11.php 進行訪問,並且傳入引數:
輸出結果:
看吧,成功了,這就是簡單的本地檔案包含,但如果將1.txt 內的內容換成一句換木馬,再用菜刀連線一下,那是不是就可以獲取shell了,這裡小編就不演示了,留給你們慢慢琢磨。。。。。。
00x2 遠端檔案包含
要實現遠端檔案包含則需要 對 php.ini 進行一些配置
即allow_url_fopen和allow_url_include要為On,也就是開啟狀態。
如下圖:
設定成功後記得要儲存並且重新啟動一下
好了現在可以開始演示遠端包含了,其實和檔案包含相差無幾,只是把包含的換成外網連結一下就好了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bugku中檔案包含的相關題目de題解
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
參考連結