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.mzph.cn/news/715109.shtml

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

相关文章

关于 yarn 的中央仓库 registry.yarnpkg.com

"Yarn" 是一个开源的 JavaScript 包管理工具&#xff0c;用于管理项目中的依赖关系。Yarn 通过一个叫做 "registry" 的中央仓库来存储和检索各种 JavaScript 包。这个中央仓库可以通过 https://registry.yarnpkg.com/ 访问&#xff0c;它是 Yarn 包管理系统…

像用Excel一样用Python:pandasGUI

文章目录 启动数据导入绘图 启动 众所周知&#xff0c;pandas是Python中著名的数据挖掘模块&#xff0c;以处理表格数据著称&#xff0c;并且具备一定的可视化能力。而pandasGUI则为pandas打造了一个友好的交互窗口&#xff0c;有了这个&#xff0c;就可以像使用Excel一样使用…

数据库运维01

数据备份多重方案 核心sql语句 mysql复制架构 mysql 生产实践 mysql可用的集群和中间件 linux环境 linux的命令要掌握 dba数据库管理员 it部门负责数据库维护 一定规模的企业 健康良好的运行数据库 对数据库做策略&#xff0c;保证数据库的稳定 查数据要尽快的返回 复杂的数据需…

【Spring Boot 3】的安全防线:整合 【Spring Security 6】

简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…

Linux线程【互斥与同步】

目录 1.资源共享问题 1.1多线程并发访问 1.2临界区和临界资源 1.3互斥锁 2.多线程抢票 2.1并发抢票 2.2 引发问题 3.线程互斥 3.1互斥锁相关操作 3.1.1互斥锁创建与销毁 3.1.2、加锁操作 3.1.3 解锁操作 3.2.解决抢票问题 3.2.1互斥锁细节 3.3互斥…

github用法详解

本文是一篇面向全体小白的文章,图文兼备。为了让小白们知道如何使用GitHub,我努力将本文写得通俗易懂,尽量让刚刚上网的小白也能明白。所以各位程序员们都可以滑走了~ 啥是GitHub? 百度百科会告诉你, GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为…

大模型训练——PEFT与LORA介绍

大模型训练中的PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;与LoRA&#xff08;Low-Rank Adaptation&#xff09;是两种重要的技术&#xff0c;它们在大型预训练模型的应用中发挥着重要作用。 首先&#xff0c;让我们来了解一下PEFT。PEFT是一种参数高效的微…

GO基本类型

Go语言同时提供了有符号和无符号的整数类型。 有符号整型&#xff1a;int、int8、int64、int32、int64无符号整型&#xff1a;uint、uint8、uint64、uint32、uint64、uintptr 有符号整型范围&#xff1a;-2^(n-1) 到 2^(n-1)-1 无符号整型范围: 0 到 2^n-1 实际开发中由于编…

英语中的提问方式(问法)(bug提问、bug描述)

文章目录 英语提问方式一、单词、短语、句子的意思1.1 提问单词的意思1.2 提问短语的意思1.3 提问句子的意思 二、在编程中提问2.1 提问bug2.2 请求代码帮助 如何提出反问句1. 构建反问句的基本结构2. 提问反问句的方法3. 理解反问句的意图 在口语中提问&#xff1a;确保清晰度…

Topaz Gigapixel AI:让每一张照片都焕发新生mac/win版

Topaz Gigapixel AI 是一款革命性的图像增强软件&#xff0c;它利用先进的人工智能技术&#xff0c;能够显著提升图像的分辨率和质量。无论是摄影爱好者还是专业摄影师&#xff0c;这款软件都能帮助他们将模糊的、低分辨率的照片转化为清晰、细腻的高分辨率图像。 Topaz Gigap…

JavaWeb——011 SpringBootWeb综合案例(删除/修改员工、文件上传、配置文件)

SpringBootWeb案例 目录 SpringBootWeb案例1. 新增员工1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 功能测试1.6 前后端联调 2. 文件上传2.1 简介2.2 本地存储2.3 阿里云OSS2.3.1 准备2.3.2 入门2.3.3 集成 3. 修改员工3.1 查询回显3.1.1 接口文档3.1.2 实现思路3.1.3 代…

07 编译器

目录 编译过程编译器查看详解函数库自动化构建工具进度条程序 1. 编译过程 预处理: a. 去注释 b.宏替换 c.头文件展开 d.条件编译 编译: 汇编 汇编: 可重定向二进制目标文件 链接: 链接多个.o, .obj合并形成一个可执行exe gcc编译c程序, g编译c程序 2. 编译器查看 输入gcc …

mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享

苹果电脑用户经常会遇到麻烦:内置存储器(即C盘)空间不断缩小&#xff0c;电脑运行缓慢。在这种情况下&#xff0c;苹果电脑c盘满了怎么清理&#xff1f;如何有效清理和优化存储空间&#xff0c;提高计算机性能&#xff1f;成了一个重要的问题。今天&#xff0c;我想给大家详细介…

备战蓝桥杯---线段树基础2

今天我们把线段树的另一个模板看一下&#xff1a; 在这里&#xff0c;我们注意到乘的操作&#xff0c;因此我们用两个懒标记来分别表示加和乘&#xff0c;这时我们面临了一个问题&#xff0c;就是当我们把标记往下传时&#xff0c;它的儿子怎么知道是先乘还是先加&#xff1f; …

2025张宇考研数学,百度网盘视频课+36讲PDF讲义+真题

张宇老师的课属于幽默生动&#xff0c;会让一个文科生爱上数学&#xff0c;但是有的同学不知道在哪看&#xff0c;可以看一下&#xff1a;2025张宇考研数学全程网盘 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 可以粘贴在浏览器 张宇30讲作为一本基础讲义&#xff1a;和教材…

java的线程池介绍

什么是线程池&#xff1f; 线程池是一种用于管理和复用线程的机制&#xff0c;旨在减少线程的创建和销毁次数&#xff0c;提高线程的可重用性和执行效率。通过线程池&#xff0c;可以控制线程的数量、数量大小以及线程的执行方式&#xff0c;从而更加有效地处理并发任务。 线…

代码随想录刷题第48天

今天来看看股票市场。第一题是买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/&#xff0c;首先想到了暴力解法&#xff0c;两层for循环&#xff0c;时间复杂度为n * n&#xff0c;代码超时了。 class Solution { public:int m…

如何使用公网地址远程访问内网Nacos UI界面查看注册服务

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Plik Nacos是阿里开放的一款中间件,也是一款服务注册中心&#xff0c;它主要提供三种功能&#xff1a;持久化…

关于gossip协议

Gossip协议&#xff0c;也称为流言协议&#xff0c;是一种在分布式系统中用于节点之间通信和数据同步的算法。它的设计灵感来自于人类社交中的流言传播机制&#xff1a;一个人告诉几个人某个消息&#xff0c;这几个人再各自告诉其他几个人&#xff0c;如此反复&#xff0c;最终…

6、wuzhicms代码审计

wuzhicms代码审计 前言 安装环境配置 服务器要求 Web服务器: apache/nginx/iis PHP环境要求:支持php5.2、php5.3、php5.4、php5.5、php5.6、php7.1 (推荐使用5.4或更高版本!) 数据库要求: Mysql5www/install文件夹即可进入安装页面 审计开始 首页文件index.php&#xff0c…