1. 程式人生 > 實用技巧 >檔案包含與偽協議

檔案包含與偽協議

檔案包含與偽協議

說明: include()函式對檔案字尾名無要求,而對其中的語法有要求,即使字尾名為txt,jpg也會被當做php檔案解析,只要檔案內是形式就可以執行,但是如果不是php語法的形式,即使字尾為php,也無法執行。

file偽協議

用於訪問本地檔案系統的檔案 條件:allow_url_fopen: off/on allow_url_include: off/on

php偽協議(常用的php://filterphp://input

php://filter:

​ (引數如圖)

																							(過濾器如圖)

使用方法舉例:

  1. php://filter/read=string.toupper/resource=http://www.example.com

php://filter協議頭 read=讀取形式 這裡的string.toupper 是將讀出來的字串大寫形式呈現(可以多種形式重疊 中間以“|”連結) resource 接物件

  1. php://filter/write=string.rot13/resource=example.txt”,”Hello World”

(注:關於為什麼我們讀資料的時候很多時候用base64編碼後再去轉碼,假如想string.toupper這樣的讀取方式,結果輸出的其實是執行後的程式碼,而不是php原始碼,所以我們要加密後再解密去看原始碼)

php://input

php://input可以利用post方式傳入命令執行,具體做法是將要執行的php程式碼直接解除安裝post中提交

Phar偽協議(和其類似的壓縮包偽協議)

這個引數是就是php解壓縮包的一個函式 ,不論檔案字尾是什麼,都會被當成壓縮包來解壓

這就可以讓我們寫shell後壓縮成zip,然後將字尾改成jpg等格式 它一樣會被當做壓縮包

類似的還有zip://,只不過zip://要用#分隔壓縮包和壓縮包裡的內容,並且#要用url編碼%23

Data偽協議

data和input偽協議差不多都是可以傳入使用者想要執行的php程式碼

具體做法:

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data://text/plain,<?php phpinfo(); ?>

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==



http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php phpinfo(); ?>

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

打個總結

{{uploading-image-591425.png(uploading...)}}