1. 程式人生 > >檔案包含漏洞原理

檔案包含漏洞原理

什麼是檔案包含漏洞:

PHP檔案包含漏洞的產生原因是在通過PHP的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的程式碼注入。最常見的就屬於本地檔案包含(Local File Inclusion)漏洞了。

程式開發人員一般會把重複使用的函式寫到單個檔案中,需要使用某個函式時直接呼叫此檔案,而無需再次編寫,這中檔案呼叫的過程一般被稱為檔案包含。


程式開發人員一般希望程式碼更靈活,所以將被包含的檔案設定為變數,用來進行動態呼叫,
但正是由於這種靈活性,從而導致客戶端可以呼叫一個惡意檔案,造成檔案包含漏洞。


幾乎所有指令碼語言都會提供檔案包含的功能,但檔案包含漏洞在PHP Web Application中居多,
而在JSP、ASP、

http://ASP.NET程式中卻非常少,甚至沒有,這是有些語言設計的弊端。
在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/