1. 程式人生 > >php協議流

php協議流

除了 解析器 NPU following 源代碼 目錄文件 test 特性 針對

文件包含漏洞結合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 files
allow_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協議流