php協議流
文件包含漏洞結合php協議流的特性,使得漏洞利用效率更高,下面的內容主要講解協議流的使用。
0x00 測試環境:
具體為5.2,5.3,5.5,7.0
0x01 測試代碼:
<?php include($_GET[‘filename‘]);?>
0x02 測試配置:
配置文件: php.ini
配置選項:
allow_url_fopen: on #default: on, This option enables the URL-aware fopen wrappers that enable accessing URL object like filesallow_url_include : off #default: off, This option allows the use of URL-aware fopen wrappers with the following functions: include, include_once, require, require_once.
allow_url_fopen 表示允許在URL形式執行fopen打開文件
allow_url_include 表示允許遠程包含
0x03 開始測試:
1. php://filter 編碼流
實驗配置條件: 無
測試代碼中,通過GET請求控制 include 函數需要包含哪些文件,如果是普通的txt文件,指定該文件就可以顯示文件內容,如
但如果是php文件,那麽文件內容只會看到被php解析器解析後的結果,並不能獲取源代碼,如包含自己
若我們想看到php的源代碼,就要避免php文件內容被解析,通過php編碼流可以實現base64編碼,編碼後解析器就無法識別了,如下
此時,將其解碼就可以看到php代碼了
2. php://input 輸入流
實驗配置條件: 開allow_url_include
除了在URL裏filename參數中指定文件作為輸入流外,還可以直接從POST請求中作為輸入流
php://input 表示內容從請求參數中獲取。如下
這樣我們就可以執行php代碼了,比如一句話,或者執行system函數等等
3. file:// 文件流
實驗配置條件: 無
這個可以讀取服務器非web目錄文件,當然需要有權限讀取,不過不需要配置條件。使用時要寫絕對路徑
4. compress.X:// 壓縮流, 有兩個compress.zlib 和 compress.bzlib
實驗配置條件: 無
這個可以針對壓縮文件查看和獲取內容,假如我們知道壓縮包在服務器的路徑為: /var/test.tgz,則可以利用該流查看壓縮文件
5. http:// 遠程文件流, 也可以遠程包含文件
實驗配置條件: 開url_allow_include
這裏遠程包含自己服務器下的一個文本文件,利用的話,可以在自己的服務器上搭建web或ftp,然後寫一句話木馬,遠程包含
6. data:// 數據流, 可以直接執行php代碼
實驗配置條件: 開url_allow_include
這個data流可以直接傳入代碼被解析執行,有點類似 php://input輸入流
如果被狗過濾,可以編碼發送代碼,先將 <?php phpinfo()?>這段進行base64編碼得到
PD9waHAgcGhwaW5mbygpPz4=
接著利用data流,發送編碼數據,並且解碼解析
php協議流