檔案包含漏洞原理
什麼是檔案包含漏洞:
PHP檔案包含漏洞的產生原因是在通過PHP的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的程式碼注入。最常見的就屬於本地檔案包含(Local File Inclusion)漏洞了。
程式開發人員一般會把重複使用的函式寫到單個檔案中,需要使用某個函式時直接呼叫此檔案,而無需再次編寫,這中檔案呼叫的過程一般被稱為檔案包含。
程式開發人員一般希望程式碼更靈活,所以將被包含的檔案設定為變數,用來進行動態呼叫,
但正是由於這種靈活性,從而導致客戶端可以呼叫一個惡意檔案,造成檔案包含漏洞。
幾乎所有指令碼語言都會提供檔案包含的功能,但檔案包含漏洞在PHP Web Application中居多,
而在JSP、ASP、
在PHP中經常出現包含漏洞,但這並不意味這其他語言不存在。
檔案包含漏洞有哪幾種類型:
1.本地檔案包含漏洞
本地包含顧名思義,就是在網站伺服器本身存在惡意檔案,然後利用本地檔案包含使用
2.遠端檔案包含漏洞
遠端檔案包含就是呼叫其他網站的惡意檔案進行開啟
常見的幾個檔案包含函式:
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():如檔案包含被運行了,則不會執行第二次
00X1 本地檔案包含 ( 以include()為例 )
首先建立兩個檔案,1.txt 和 11.php 如下:
建立完後並對 11.php 進行訪問,並且傳入引數:
輸出結果:
看吧,成功了,這就是簡單的本地檔案包含,但如果將1.txt 內的內容換成一句換木馬,再用菜刀連線一下,那是不是就可以獲取shell了,這裡小編就不演示了,留給你們慢慢琢磨。。。。。。
00x2 遠端檔案包含
要實現遠端檔案包含則需要 對 php.ini 進行一些配置
即allow_url_fopen和allow_url_include要為On,也就是開啟狀態。
如下圖:
設定成功後記得要儲存並且重新啟動一下
好了現在可以開始演示遠端包含了,其實和檔案包含相差無幾,只是把包含的換成外網連結一下就好了
檔案包含原理也就是這麼個樣子,雖然操作簡單,但其實是一個很危險的一個漏洞,除了可以利用他拿到shell
還可以利用她做很多事情。。。。。。
參考連結:
https://zhuanlan.zhihu.com/p/25069779
https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/
https://thief.one/2017/04/10/2/