偽協議常常用於文件包含漏洞之中。
在php中能夠造成文件包含的函數有include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readfile
0x01 函數
1.include函數
可以放在PHP腳本的任意位置,一般放在流程控制的處理部分中。當PHP腳本執行到include指定引入的文件時,才將它包含並嘗試執行。這種方式可以把程序執行時的流程進行簡單化。當第二次遇到相同文件時,PHP還是會重新解釋一次,include相對於require的執行效率下降很多,同時在引入文件中包含用戶自定義函數時,PHP在解釋過程中會發生函數重復定義問題。include載入成功后,返回1,失敗則返回false。
2.require函數
require函數一般放在PHP腳本的最前面,PHP執行前就會先讀入require指定引入的文件,包含並嘗試執行引入的腳本文件。require的工作方式是提高PHP的執行效率,當它在同一個網頁中解釋過一次后,第二次便不會解釋。但同樣的,正因為它不會重復解釋引入文件,所以當PHP中使用循環或條件語句來引入文件時,需要用到include。require載入成功返回1,失敗無返回值。
3.include_once和require_once函數
分別與require / include作用相同,不同的是他們在執行到時會先檢查目標內容是不是在之前已經導入過,如果導入過了,那么便不會再次重復引入其同樣的內容。
4.highlight_file函數
highlight_file() 函數對文件進行語法高亮顯示。
語法:highlight_file(filename,return) —— filename:必需。要進行高亮處理的 PHP 文件的路徑。return:可選。如果設置 true,則本函數返回高亮處理的代碼。
該函數通過使用 PHP 語法高亮程序中定義的顏色,輸出或返回包含在 filename 中的代碼的語法高亮版本。如果 return 參數被設置為 true,那么該函數會返回被高亮處理的代碼,而不是輸出它們。否則,若成功,則返回 true,失敗則返回 false。許多服務器被配置為對帶有 phps 后綴的文件進行自動高亮處理。例如,在查看 example.phps 時,將顯示該文件被語法高亮顯示的源代碼。要啟用該功能,請把AddType application/x-httpd-php-source .phps添加到 httpd.conf。
5.show_source函數
該函數是highlight_file函數的別名。
6.file_get_contents函數
file_get_contents() 函數把整個文件讀入一個字符串中。和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。file_get_contents() 函數是用於將文件的內容讀入到一個字符串中的首選方法。如果操作系統支持,還會使用內存映射技術來增強性能。
7.file函數
file() 函數把整個文件讀入一個數組中。與 file_get_contents() 類似,不同的是 file() 將文件作為一個數組返回。數組中的每個單元都是文件中相應的一行,包括換行符在內。如果失敗,則返回 false。
8.fopen函數
9.readfile函數
0x02 偽協議
1.php偽協議:
需要開啟allow_url_fopen的:php://input、php://stdin、php://memory和php://temp
不需要開啟allow_wrl_fopen的:php://filter
在CTF中經常使用的是php://filter和php://input
php://filter用於讀取源碼,php://input用於執行php代碼
php://input需要post請求提交數據
php://filter可以get提交?a=php://filter/read=convert.base64-encode/resource=xxx.php
2.data協議
php5.2.0起,數據流封裝器開始有效,主要用於數據流的讀取。如果傳入的數據是PHP代碼,就會執行代碼
使用方法:data://text/plain;base64,xxxx(base64編碼后的數據)
data偽協議只有在php<5.3且include=on時可以寫木馬。
3.file協議
file://用於訪問本地文件系統
用法:file:// [文件的絕對路徑和文件名]
參考鏈接:
https://www.cnblogs.com/lishanlei/p/9339938.html
https://www.w3school.com.cn/php/func_misc_highlight_file.asp
https://www.w3school.com.cn/php/func_misc_show_source.asp
https://www.w3school.com.cn/php/func_filesystem_file_get_contents.asp
https://www.w3school.com.cn/php/func_filesystem_file.asp
https://www.runoob.com/php/func-filesystem-fopen.html
https://www.w3school.com.cn/php/func_filesystem_readfile.asp