46、WEB攻防——通用漏洞PHP反序列化原生类漏洞绕过公私有属性

文章目录

    • 几种常用的魔术方法
      • 1、__destruct()
      • 2、__tostring()
      • 3、__call()
      • 4、__get()
      • 5、__set()
      • 6、__sleep()
      • 7、__wakeup()
      • 8、__isset()
      • 9、__unset()
      • 9、__invoke()
    • 三种变量属性
    • 极客2019 PHP
    • php原生类

几种常用的魔术方法

1、__destruct()

当删除一个对象或对象操作终止时被调用,其最主要的作用是拿来做垃圾回收机制。当对象销毁时会调用此方法,对象销毁:1.用户主动销毁对象,使用unset()函数;2.当程序结束时由引擎自动销毁。
在这里插入图片描述

2、__tostring()

在对象当作字符串的时候会被调用。但是需要注意的是,执行完__toString()之后,会有返回值。
在这里插入图片描述

3、__call()

调用某个方法,若方法存在,则直接调用;若不存在,则会调用__call()方法。
在这里插入图片描述

4、__get()

读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get()魔术方法。
在这里插入图片描述

5、__set()

设置一个对象的属性时,若属性存在,则直接赋值;若属性不存在或者无法访问(私有)的属性时,则会调用__set()函数。

__set($name, $value)

  • 用来为私有成员属性设置属性值;
  • 第一个参数为需要设置值多的属性名,第二个参数为需要设置的属性值,__set方法没有返回值。

在这里插入图片描述

6、__sleep()

serialize()之前被调用,可以指定要序列化的对象属性。
在这里插入图片描述

7、__wakeup()

反序列化恢复对象之前调用该方法,也就是使用unserialize()之前会先调用__wakeup()
在这里插入图片描述

var_dump会输出反序列化内容。

8、__isset()

检测对象的某个属性是否存在时执行该函数,当对不可访问属性调用isset()empty()时,触发__isset()
在这里插入图片描述

9、__unset()

在不可访问的属性上使用unset()时触发, 或销毁对象的某个属性时执行此函数。
在这里插入图片描述

  • unset()函数不仅触发__unset(),而且会触发__destruct()
  • 三种对象变量属性:
    • public:在本类内部、外部类、子类中都可以访问;
    • protected:只在本类或子类或父类中可以访问;
    • private:在本类内部可以访问。
  • 序列化数据显示:
    • private属性序列的时候格式是%00类名%00成员名
    • protected属性序列的时候格式是%00*%00成员名
  • 使用new是创建外部类(测试类),子类是通过继承extends父类得到的。

9、__invoke()

当调用函数的方式调用一个对象时触发。
在这里插入图片描述

三种变量属性

  • 三种对象变量属性:
    • public:在本类内部、外部类、子类中都可以访问;
    • protected:只在本类或子类或父类中可以访问;
    • private:在本类内部可以访问。
  • 序列化数据显示:
    • private属性序列的时候格式是%00类名%00成员名
    • protected属性序列的时候格式是%00*%00成员名

在这里插入图片描述

极客2019 PHP

反序列化利用大概分为三类:

  • 魔术方法的调用逻辑,如触发条件;
  • 语言原生类的调用逻辑,如SoapClient
  • 语言自身的安全缺陷,如CVE-2016-7124.

首先,通过目录扫描可以发现网站源码保存在www.zip中(这里就不作叙述);
index.php中包含flag.php,并且接收select传参,并且对传参内容进行反序列化。

在这里插入图片描述
flag.php中存在一个className,而且flag在__destruct()魔术方法中,有两种方式触发__destruct()魔术方法:1.用户主动销毁对象,使用unset()函数;2.当程序结束时由引擎自动销毁。也就是说,当程序执行完,必定会触发__destruct()魔术方法。因此,我们只需要满足__destruct()魔术方法中的两个条件:username=admin&password=100。由于__wakeup()的存在,使得index.php中的unserialize执行之前,就会自动触发__wakeup()
故获取flag的关键在于:绕过__wakeup()。这里可以使用CVE-2016-7124进行绕过__wakeup()CVE-2016-7124:对象中的属性个数超过实际属性个数会绕过__wakeup()

class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){$this->username = $username;$this->password = $password;}function __wakeup(){$this->username = 'guest';}function __destruct(){if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die(); }}
}

2改为3,即可获取flag。
在这里插入图片描述

php原生类

php原生类
在这里插入图片描述

  1. PHP有哪些原生类

    //查找PHP所有原生类
    <?php
    $classes = get_declared_classes();
    foreach ($classes as $class) {$methods = get_class_methods($class);foreach ($methods as $method) {if (in_array($method, array('__destruct','__toString','__wakeup','__call','__callStatic','__get','__set','__isset','__unset','__invoke','__set_state'))) {print $class . '::' . $method . "\n";}}
    } 
    
  2. 常见使用的原生类
    浅析PHP原生类

  3. 配合官方文档利用php原生类

  4. 反序列化字符逃逸
    [安恒月赛]反序列化字符逃逸

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

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

相关文章

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起&#xff0c;形成一个高性能计算的集群系统。通过集群组网技术&#xff0c;可以实现多个GPU设备之间的协同计算&#xff0c;提供更大规模的计算能力&#xff0c;适用于需要大规模并行计算的应用场景。 常用的组网技术&…

码垛工作站:食品生产企业的转型助推器

在当今高度自动化的工业生产中&#xff0c;码垛工作站的应用正逐渐成为一种趋势。某食品生产企业在面临市场竞争加剧、人工成本上升等多重压力下&#xff0c;决定引入码垛工作站&#xff0c;以期实现生产流程的升级与变革。 一、码垛工作站引入背景 该企业主要从事休闲食品的…

iMazing3安全吗?好不好用?值不值得下载

一、安全性 iMazing在设计和开发过程中&#xff0c;始终把用户数据的安全性放在首位。它采用了多种先进的安全技术来确保用户数据在传输、备份和存储过程中的安全。 iMazing3Mac-最新绿色安装包下载如下&#xff1a; https://wm.makeding.com/iclk/?zoneid49816 iMazing3Wi…

mysql 常用命令练习

管理表格从表中查询数据从多个表查询修改数据sql变量类型 管理表格 创建一个包含三列的新表 CREATE TABLE products (id INT,name VARCHAR(255) NOT NULL,price INT DEFAULT 0,PRIMARY KEY(id) // 自增 ); 从数据库中删除表 DROP TABLE product; 向表中添加新列 ALTER TAB…

【Python】成功解决TypeError: list indices must be integers or slices, not float

【Python】成功解决TypeError: list indices must be integers or slices, not float &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

计算机二级Python刷题笔记------基本操作题11、14、17、21、30(考察列表)

文章目录 第十一题&#xff08;列表遍历&#xff09;第十四题&#xff08;len&#xff09;第十七题&#xff08;len、insert&#xff09;第二十一题&#xff08;append&#xff09;第三十题&#xff08;二维列表&#xff09; 第十一题&#xff08;列表遍历&#xff09; 题目&a…

c++之旅——第三弹

大家好啊&#xff0c;这里是c之旅第三弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一.命名空间;…

React-router的创建和第一个组件

需要先学react框架 首先&#xff1a;找到一个文件夹&#xff0c;在文件夹出打开cmd窗口&#xff0c;输入如下图的口令 npx create-react-app demo 然后等待安装 安装完成 接下来进入创建的demo实例 cd demo 然后可以用如下方式打开vscode code . 注意&#xff1a;不要忽略点号与…

vue2+elementui上传照片(el-upload 超简单)

文章目录 element上传附件&#xff08;el-upload 超详细&#xff09;代码展示html代码data中methods中接口写法 总结 element上传附件&#xff08;el-upload 超详细&#xff09; 这个功能其实比较常见的功能&#xff0c;后台管理系统基本上都有&#xff0c;这就离不开element的…

多层感知机 + 代码实现 - 动手学深度学习v2 | 李沐动手学深度学习课程笔记

感知机 感知机≈二分类问题 感知机和其他问题的对比 训练感知机 如果小于等于零&#xff0c;说明预测错啦 &#xff0c;其实就是同号为正&#xff0c;异号为负 举个分类的例子 增加样本&#xff0c;改变分类线 继续分类 感知机的收敛定理 XOR问题 XOR问题其实就是第1、3象限数…

Java 语法糖,提高代码效率神器!

引言&#xff1a;语法糖经常是大厂面试官常问的一个知识点&#xff0c;关于 Java 的语法糖很多人可能只是知道其中的某几个&#xff0c;但却对整体的结构不了解&#xff0c;本文将详细介绍 Java 语法糖的知识。 题目 什么是 Java 语法糖&#xff1f; 推荐解析 什么是语法糖…

数据结构与算法学习【算法思想之二分法基础】

文章目录 数据结构与算法学习【算法思想之二分查找基础】本文学习目标或巩固的知识点 最基础的二分查找&#x1f7e2;通过题目可知题解结果验证 数据结构与算法学习【算法思想之二分查找基础】 本文学习目标或巩固的知识点 学习二分法类题目 巩固基础的二分法 提前说明&#…

机器人持续学习基准LIBERO系列10——文件结构

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…

(二)逻辑回归与交叉熵--九五小庞

什么是逻辑回归 线性回归预测的是一个连续值&#xff0c;逻辑回归给出的“是”和“否”的回答 Singmoid sigmoid函数是一个概率分布函数&#xff0c;给定某个输入&#xff0c;它将输出为一个概率值 逻辑回归损失函数 平方差所惩罚的是与损失为同一数量级的情形&#xff0…

Unity铰链四杆机构设计和运动仿真

一、效果图 设定好各边长度和转速后&#xff0c;点击【设置并启动】&#xff0c;自动生成一个机构模型&#xff0c;并按照原理进行运转 二、铰链四杆机构介绍 机架&#xff1a;A和D是固定位置&#xff0c;叫做机架。 曲柄&#xff1a;B点绕A点旋转&#xff0c;构成曲柄。 连…

vSphere资源管理

一 内存、CPU、资源池和vApp 内存部分&#xff1a; 关联VM内存 我们可以超额的关联内存给VM。例如&#xff1a;ESXI物理主机内存只有8G&#xff0c;但我们可以给三个VM都分配4G内存。 2.ESXI四大高级内存控制技术 a.Page sharing&#xff08;透明的页面共享&#xff09; 虚…

青少年CTF擂台挑战赛 2024 #Round 1 Web方向题解 WP 全

EasyMD5 题目描述&#xff1a;php没有难题 考点总结&#xff1a;脑洞题目&#xff0c;不如我出&#xff08;狗头 只允许两个都上传pdf文件。 文件还不能太大了。burp多次发包发现要求两个pdf内容不一样 不一样时候&#xff0c;提示我们MD5碰撞。 科学计数法绕过 PHP的后门 …

WebServer -- 注册登录

目录 &#x1f349;整体内容 &#x1f33c;流程图 &#x1f382;载入数据库表 提取用户名和密码 &#x1f6a9;同步线程登录注册 补充解释 代码 &#x1f618;页面跳转 补充解释 代码 &#x1f349;整体内容 概述 TinyWebServer 中&#xff0c;使用数据库连接池实现…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具&#xff0c;它具备一系列强大的功能&#xff0c;可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点&#xff1a; 智能清理&#xff1a;CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…