PHP僞協議

PHP封裝協議php

PHP有不少內置URL風格的封裝協議,這類協議fopen(),copy(),file_exists(),filesize()等文件系統函數所提供的功能相似。常見協議以下:安全

file://          訪問本地文件系統服務器

http://         訪問HTTP(s)網址less

ftp://           訪問FTP(s)URLsssh

php://         訪問輸入/輸出流(I/O streams)函數

zlib://          壓縮流量post

data://        數據(RFC 2397)測試

ssh2://        Secure Shell 2網站

expect://      處理交互式的流url

glob://          查找匹配的文件路徑

//摘錄自《Web安全深度剖析》

這個封裝協議多用於文件包含漏洞

 

php僞協議的分類

僞協議是文件包含的基礎,理解僞協議的原理才能更好的利用文件包含漏洞。

php://input

php://input表明能夠訪問請求的原始數據,簡單來講POST請求的狀況下,php://input能夠獲取到post的數據。

使用條件:include( )、include_once( )、file_get_contents( )

比較特殊的一點,enctype=」multipart/form-data」的時候 php://input 是無效的。

用法舉例:

  • 使用file_get_contents函數的僞協議包含有個經典的例子;
  • 可使用fputs文件輸入流直接服務器某一存在的目錄下寫入文件。

 

php://output

php://output 是一個只寫的數據流,容許你以print和echo同樣的方式寫入到輸出緩衝區。

php://filter(重點)

php://filter是一種元封裝器,設計用於數據流打開時的篩選過濾應用,也就是做爲一種過濾器,可使用在數據流產生的地方。

 

 php文檔中,標準的定義是這樣的:

相似的過濾器還有string.rot1三、string.strip_tags、zlib.deflate和zlib.inflate等等,目前只要知道convert.base64-encode就行了。

URL 中包含點的常見形式

?file = xxx 或者 ?file = xxx.php

 

allow_url_fopen和allow_url_include

在測試了包含點存在包含漏洞之後,並非均可以使用filter僞協議包含出源碼的,由於allow_url_fopen和allow_url_include會影響到fopen和include等函數對於僞協議的支持。

allow_url_include影響php://input的使用,若不打開則沒法使用。

當allow_url_fopen打開時,能夠包含任意url。

例如只打開allow_url_include時,只能包含遠程文件和使用php://input

舉個例子

題目連接:http://level3.tasteless.eu/

題目直接給出了源碼:

根據提示,用php://input 僞協議讀取php.ini

 

找到SERVER["DOCUMENT_ROOT"],也就是網站的根目錄,能夠找到當前腳本的目錄,以下:

還能夠看到一些文件包含的配置:

  • rfi是關閉的,也就是allow_url_fopen爲Off;
  • allow_url_include開啓,可使用php://input僞協議來列出當前目錄下的文件。

payload:

 //摘錄自i春秋博客園

 

 

 

 

 

附上一題文件包含

題目提示flag在index.php裏,直接訪問這個頁面並無,可是看到url

 

 

咱們直接經過封裝協議去讀取index.php的源代碼

file=php://filter/read=convert.base64-encode/resource=index.php

 

 這樣咱們會獲得base64後的源碼,咱們去解碼一下

 

 由此咱們獲得flag

相關文章
相關標籤/搜索