了解PHP伪协议
前言:最近做題web題很多都涉及了PHP偽協(xié)議,這次就來詳細的了解總結(jié)一下!
練習(xí)每個協(xié)議前,相關(guān)的配置必須開啟或者關(guān)閉才不會報錯,可以參考這張圖片
下面就來了解PHP偽協(xié)議
0x00:php://
說明:
PHP 提供了一些雜項輸入/輸出(IO)流,允許訪問 PHP 的輸入輸出流、標(biāo)準(zhǔn)輸入輸出和錯誤描述符, 內(nèi)存中、磁盤備份的臨時文件流以及可以操作其他讀取寫入文件資源的過濾器。
php:// 訪問輸入輸出流,有許多子協(xié)議,下面就來學(xué)習(xí)一下
php://filter
說明:
php://filter 是一種元封裝器, 設(shè)計用于數(shù)據(jù)流打開時的篩選過濾應(yīng)用。 這對于一體式(all-in-one)的文件函數(shù)非常有用,類似 readfile()、 file() 和 file_get_contents(), 在數(shù)據(jù)流內(nèi)容讀取之前沒有機會應(yīng)用其他過濾器。
簡單來理解就是:php://filter是可以作為一個中間流來處理其他流,可以進行任意文件的讀取。而且當(dāng)使用不同的參數(shù)可以達到不同的目的和效果:
例子可以看PHP官網(wǎng),特別詳細
php://filter
這里通過bugku中的一道題來練習(xí)一下
打開鏈接后發(fā)現(xiàn)?file=show.php,涉及文件包含漏洞,題目中又提示說:flag在index中,那就可以用php://filter中的read參數(shù)查看源文件內(nèi)容
構(gòu)造payload:
?file=php://filter/read=convert.base64-encode/resource=index.php這里之所以進行base64編碼是為了PHP不對其解析,這個payload也是常用的任意讀取文件語句,只要將后面的頁面修改即可。
可以參考官網(wǎng)的例子構(gòu)造語句
<?php /* 這會以大寫字母輸出 www.example.com 的全部內(nèi)容 */ readfile("php://filter/read=string.toupper/resource=http://www.example.com");/* 這會和以上所做的一樣,但還會用 ROT13 加密。 */ readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"); ?>
解碼得出源代碼和flag
可以看到源代碼中對用戶輸入的file參數(shù)進行了過濾,但是源碼中的include函數(shù)將用戶輸入的引入php文件并執(zhí)行,如果執(zhí)行不成功,就返回文件的源碼,所以才要進行base64編碼。
php://input
說明:
php://input 是個可以訪問請求的原始數(shù)據(jù)的只讀流,可以讀取沒有處理過的POST數(shù)據(jù)。
php://input可以將要執(zhí)行的語法php代碼寫在post中提交,下面通過DVWA來練習(xí)一下
若有寫入權(quán)限,也可以寫入一句話木馬
file://
說明:
file:// — 訪問本地文件系統(tǒng),當(dāng)指定了一個相對路徑(不以/、\、\或 Windows 盤符開頭的路徑)提供的路徑將基于當(dāng)前的工作目錄。
模仿大師傅搭建一個本地靶場
<?php@$file = isset($_GET[file])?$_GET['file']:'ctf.php'; include_once($file); highlight_file($file);?>
使用file協(xié)議訪問本地文件,構(gòu)造payload:
訪問成功
也可以用這個靶場來練習(xí)php://filter協(xié)議
構(gòu)造payload:
http://127.0.0.1/2.php?file=php://filter/read/convert.base64-encode/resource=1.txt
進行解碼
直接讀取也可以
payload:
http://127.0.0.1/2.php?file=php://filter/resource=1.txtzip://協(xié)議
zip:// [壓縮文件絕對路徑]#[壓縮文件內(nèi)的子文件名]
phar:// 協(xié)議
phar://協(xié)議與zip://類似,同樣可以訪問zip格式壓縮包內(nèi)容
data:// 協(xié)議
data: text/plain,<?php 執(zhí)行內(nèi)容 ?>
data://text/plain,
data://text/plain;base64,
在DVWA中進行測試
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=data:text/plain,<?echo phpinfo()?>
也可以用base64的格式編碼PHP代碼
注意要按照這個格式才能成功data://text/plain;base64,還有base64編碼后的加號和等號要手動的url編碼,否則無法識別。
+ %2b = %3d
可以通過一道題目練習(xí)一下:
例如這道題便過濾掉了php://,可以使用data:// 協(xié)議
既然可以使用就利用php中的system函數(shù)直接命令執(zhí)行即可
http:// & https:// 協(xié)議
常規(guī) URL 形式,允許通過 HTTP 1.0 的 GET方法,以只讀訪問文件或資源。
總結(jié):這次學(xué)習(xí)大致了解了一些PHP偽協(xié)議,但還是需要結(jié)合一些題目來練習(xí)一下,這次就先總結(jié)到這,等理解更深后,再來詳細總結(jié)一下。
總結(jié)
- 上一篇: PHP弱类型及一些绕过姿势
- 下一篇: 2018.5.5信息安全铁人三项赛数据赛