2021强网杯

一、环境

网上自己找

二、步骤

2.1抛出引题

在这个代码中我们反序列,再序列化

<?php$raw = 'O:1:"A":1:{s:1:"a";s:1:"b";}';echo serialize(unserialize($raw));//O:1:"A":1:{s:1:"a";s:1:"b";}

结果和原始的值是没有什么区别的,但是我们可以看到即使脚本中没有A这个类,在反序列化序列化过后得到的值依然为原来的值

2.2研究1:只反序列化

<?php$raw = 'O:1:"A":1:{s:1:"a";s:1:"b";}';var_dump(unserialize($raw));

结果

我们可以看到当我们反序列化一个不存在的类时,会出现PHP_Incomplete_Class这个字段 ,它是一个数组,数组里面有一个值,同时将原始类名存储在PHP_Incomplete_Class_Name这个类下面

2.3我们用这个特殊函数举一个例子

$raw = 'a:2:{i:0;O:8:"stdClass":1:{s:3:"abc";N;}i:1;O:22:"__PHP_Incomplete_Class":1:{s:3:"abc";N;}}';
var_dump(unserialize($raw));
var_dump(unserialize(serialize(unserialize($raw))));

我们先把序列化的结果进行反序列化看一下具体是什么东西

我们可以看到变成了两个类

那我们再进行一次序列化呢,相当于反序列后进行了一次序列化相当于一个还原的过程

而我们可以明显的看到abc是没有了的

之后我们再进行一次反序列化

正常来说这两个类反序列化完是一样的而看结果我们可以明显看到不一样了

可以看到在二次序列化后,由于O:22:"__PHP_Incomplete_Class":1:{s:1:"a";O:7:"classes":0:{}}__PHP_Incomplete_Class_Name为空,找不到应该绑定的类,其属性就被丢弃了,导致了serialize(unserialize($x)) != $x的出现。

2.4开始正式解题

index.php

<?php
// echo file_get_contents('flag.php');
ini_set('display_errors', 'on');
include 'function.php';
$res = unserialize($_REQUEST['ctfer']);
var_dump($res);
echo '<br>';
var_dump(serialize($res));
if (preg_match('/myclass/i', serialize($res))) {echo '????';throw new Exception("Error: Class 'myclass' not found");
}
highlight_file(__FILE__);
echo "<br>";
highlight_file('myclass.php');
echo "<br>";
highlight_file('function.php');
echo "End";

flag.php

<?php
flag{wahahah}

 function.php

<?php
// function.php
function __autoload($classname){require_once "./$classname.php";
}
?>

myclass.php

<?php
// myclass.php
// class myclass{}
class Hello
{public function __destruct(){echo "I'm destructed.<br/>";var_export($this->qwb);if($this->qwb) echo file_get_contents($this->qwb);}
}
?>

这道题接收了一个ctfer,之后进行反序列化,反序列化后进行了一个序列化,看里面有没有myclass这个元素有则退出,没有则继续 

而最终执行文件在这里

在这个题目中,我们需要加载myclass.php中的hello类,但是要引入hello类,根据__autoload我们需要一个classnamemyclass的类,这个类并不存在,如果我们直接去反序列化,只会在反序列化myclass类的时候报错无法进入下一步,或者在反序列化Hello的时候找不到这个类而报错。

根据上面的分析,我们可以使用PHP对__PHP_Incomplete_Class_name的特殊处理进行绕过

使用urlcode编码/flag后

最终读出flag

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

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

相关文章

工业 web4.0UI 风格品质卓越

工业 web4.0UI 风格品质卓越

深入理解 RabbitMQ、RocketMQ等常⽤的消息中间件进⾏消息的异步数据处理

深入理解消息中间件对于构建高可用、高性能的分布式系统至关重要。以下是对RabbitMQ和RocketMQ这两种常用消息中间件的异步数据处理的深入理解&#xff1a; ### RabbitMQ RabbitMQ是一个开源的消息代理&#xff0c;它支持多种消息协议&#xff0c;如AMQP、STOMP等&#xff0c;…

单向链表结构

链表结构简介 链表结构是一种用比较特殊的数据结构类型&#xff0c;它也是线性数据结构中的一种&#xff0c;但是与栈结构等线性数据结构不同&#xff0c;它的内部结构并不是一个简单的存储空间&#xff0c;而是一个带有指向性质的单元。要理解链表结构要弄清楚两个问题&#x…

不要再被骗了!电脑无法进入系统的原因可能是这个硬件坏了而已……

前言 前段时间小白在抖音上发了很多很多很多的视频&#xff0c;其中应该是有很多商家关注了小白。 然后就会出现很多很多很多的赚钱小门道…… 电脑开机没有显示&#xff1f;换显卡&#xff01; 电脑还是不开机&#xff1f;换CPU 电脑还是一样不开机…… 经过了一番大折腾…

10.8K star!史上最强Web应用防火墙雷池WAF

长亭雷池SafeLine是长亭科技耗时近 10 年倾情打造的WAF(Web Application Firewall)&#xff0c; 一款敢打出口号 “不让黑客越雷池一步” 的 WAF&#xff0c;愿称之为史上最强的一款Web应用防火墙&#xff0c;足够简单、足够好用、足够强的免费且开源的 WAF&#xff0c;基于业…

AI为小微企业赋能:解锁数字化转型的金钥匙

AI为小微企业赋能&#xff1a;解锁数字化转型的金钥匙 在当今全球经济加速迭代的背景下&#xff0c;小微企业作为社会经济肌体的毛细血管&#xff0c;面临着前所未有的挑战与机遇。人工智能&#xff08;AI&#xff09;的崛起&#xff0c;如同一股强大的科技旋风&#xff0c;为…

binlog区分业务修改还是手动修改

一、Windows下开启MySQL binLog日志 首先要开启MySQL的BinLog 管理 show variables like %log_bin%;如果发现log_bin是OFF&#xff0c;打开mysql文件夹下面的my.ini&#xff0c;修改一下 在 [mysqld] 下面加 # 开启bin-log log-binmysql-bin # 开启binlog功能 binl…

pads layout 脚本导出不能运行excle解决办法

在一台新的电脑上安装好PADS&#xff0c;打开PCB文件导出坐标文件时&#xff1a; 出现“ActiveX Automation: server could not be found.”的问题,导致无法成功导出文件,错误提示截图如下&#xff1a; 导致上述问题的原因是在我们配置导出带坐标的脚本时,默认使用的是微软…

Java 实现application/x-www-form-urlencoded编码格式的POST请求

一、实现方式 在Java中&#xff0c;实现application/x-www-form-urlencoded内容类型通常涉及到发送HTTP POST请求。你可以使用java.net.HttpURLConnection或者第三方库如Apache HttpClient来实现。 以下是使用HttpURLConnection发送application/x-www-form-urlencoded数据的代…

linux的shell脚本编程详解

Shell 脚本是一种用于自动化任务的脚本语言&#xff0c;在 Linux 和其他类 Unix 操作系统中非常流行。它通常用于任务自动化、系统管理和批处理。编写 Shell 脚本并使其自动化编译过程&#xff08;例如使用 gcc 编译 C/C 程序&#xff09;是一种常见的任务。 以下是一个详细的…

昇思MindSpore学习笔记3--张量 Tensor

一、张量Tensor概念 矢量、标量和其他张量的计算函数&#xff0c;有内积、外积、线性映射以及笛卡儿积等 张量坐标在 n 维空间内&#xff0c;有 nr 个分量 每个分量都是坐标的函数,变换时每个坐标分量都按规则作线性变换 张量是一种特殊的数据结构&#xff0c;类似于数组和…

利用深度学习模型进行语音障碍自动评估

语音的产生涉及器官的复杂协调&#xff0c;因此&#xff0c;语音包含了有关身体各个方面的信息&#xff0c;从认知状态和心理状态到呼吸条件。近十年来&#xff0c;研究者致力于发现和利用语音生物标志物——即与特定疾病相关的语音特征&#xff0c;用于诊断。随着人工智能&…

js基础学习

1、js概述 js是javascript的简称&#xff0c;作用是实现页面和用户的交互 js由浏览器解析运行&#xff0c;不需要编译 js由es基础语法&#xff0c;bom浏览器相关&#xff0c;dom文档操作相关 三大部分组成 2、html引入js <!DOCTYPE html> <html lang"zh-CN&qu…

Vue项目打包上线

Nginx 是一个高性能的开源HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它在设计上旨在处理高并发的请求&#xff0c;是一个轻量级、高效能的Web服务器和反向代理服务器&#xff0c;广泛用于提供静态资源、负载均衡、反向代理等功能。 1、下载nginx 2、…

k8s学习--k8s群集ELK日志收集部署最详细的过程与应用(收集k8s群集日志)(图形化界面手把手教学)

文章目录 FilebeatFilebeat主要特点Filebeat使用场景 ELK简介Elasticsearch简介Elasticsearch主要特点Elasticsearch使用场景 Logstash简介Logstash主要特点Logstash使用场景 Kibana简介Kibana主要特点Kibana使用场景 简单理解 环境一、ELK集群部署1.软件安装2.软件配置及启动(…

Webpack: Loader开发 (2)

概述 在上一篇文章中&#xff0c;我们已经详细了解了开发 Webpack Loader 需要用到的基本技能&#xff0c;包括&#xff1a;Loader 基本形态、如何构建测试环境、如何使用 Loader Context 接口等。接下来我们继续拓展学习一些 Loader 辅助工具&#xff0c;包括&#xff1a; 了…

telegram支付

今天开始接入telegram支付,参考教程这个是telegram的官方说明,详细介绍了机器人支付API。 文章公开地址 新建机器人 因为支付是一个单独的系统,所以在做支付的时候单独创建了一个bot,没有用之前的bot了,特意这样将其分开。创建bot的方法和之前不变,这里不过多介绍。 获…

Linux文件数据写入

结构体 fd fd也就是文件描述符&#xff0c;用于标识已经打开的文件、管道、socket等。是进程和内核的桥梁&#xff0c;允许进程执行各种文件操作 struct fd {struct file *file;unsigned int flags; };file Linux内核中表示打开文件的结构体&#xff0c;包含了文件操作所需…

什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术

什么是自然语言处理&#xff1f; 自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能的一个重要分支&#xff0c;旨在让计算机理解、解释和生成人类的自然语言。打个比方&#xff0c;你和Siri对话&#xff0c;或使用谷歌翻译翻译一…

2024广州国际米粉产业展览会暨米粉节

2024广州国际米粉产业展览会 时间&#xff1a;2024年11月16-18日 地点&#xff1a;广州中国进出口商品交易会展馆 主办单位&#xff1a;企阳国际会展集团 【展会简介】 米粉作为一种历史悠久&#xff0c;人们日常食用的食物&#xff0c;其市场需求稳定&#xff0c;且随着人…