檔案包含與偽協議
阿新 • • 發佈:2020-09-15
檔案包含與偽協議
說明: include()函式對檔案字尾名無要求,而對其中的語法有要求,即使字尾名為txt,jpg也會被當做php檔案解析,只要檔案內是形式就可以執行,但是如果不是php語法的形式,即使字尾為php,也無法執行。
file偽協議
用於訪問本地檔案系統的檔案 條件:allow_url_fopen: off/on allow_url_include: off/on
php偽協議(常用的php://filter 和 php://input)
php://filter:
(引數如圖)
(過濾器如圖)
使用方法舉例:
- php://filter/read=string.toupper/resource=http://www.example.com
php://filter協議頭 read=讀取形式 這裡的string.toupper 是將讀出來的字串大寫形式呈現(可以多種形式重疊 中間以“|”連結) resource 接物件
- 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...)}}