1. 程式人生 > >檔案包含漏洞的原理總結及例題

檔案包含漏洞的原理總結及例題

什麼是檔案包含漏洞:

PHP檔案包含漏洞的產生原因:

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

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

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

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

程式中卻非常少,甚至沒有,這是有些語言設計的弊端。 在PHP中經常出現包含漏洞,但這並不意味這其他語言不存在。

檔案包含漏洞有哪幾種類型:

1.本地檔案包含漏洞

LFI,能夠開啟幷包含本地檔案的漏洞

本地包含顧名思義,就是在網站伺服器本身存在惡意檔案,然後利用本地檔案包含使用

2.遠端檔案包含漏洞

RFI,遠端檔案包含漏洞

遠端檔案包含就是呼叫其他網站的惡意檔案進行開啟

常見的幾個檔案包含函式:

php:

  1. include()
  2. include_once()
  3. fopen()
  4. require()
  5. require_once()

jsp/Servlet:

  1. ava.io
  2. file()
  3. java.io
  4. filereader()

asp:

  1. include file
  2. 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題解

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

參考連結