WEB渗透—PHP反序列化(五)

Web渗透—PHP反序列化        课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔_bilibili


九、错误调用相关魔术方法

1.__call()

调用不存在的方法的名称和参数时触发魔术方法

<?php
class User{
    public function __call($arg1,$arg2){
        echo "$arg1,$arg2[0]";
    }
}
$test = new User();
$test -> callxxx('a');     //调用的方法callxxx()不存在,触发魔术方法call()
?>

触发时机:调用一个不存在的方法

功能:(无)

参数:2个参数传参$arg1,$arg2

返回值:调用的不存在的方法的名称和参数

触发call(),传参$arg1,$arg2(callxxx,a)

$arg1,调用不存在的方法的名称;$arg2,调用不存在的方法的参数;

2.__callStatic()

静态调用或调用成员变量时使用的方法不存在时触发魔术方法

<?php
class User{
    public function __callStatic($arg1,$arg2){
        echo "$arg1,$arg2[0]";
    }
}
$test = new User();
$test::callxxx('a');        //静态调用::时方法callxxx()不存在,触发魔术方法__callStatic
?>

触发时机:静态调用或调用成员常量时使用的方法不存在。

功能:(无)

参数:调用的不存在的方法$arg1.$arg2

返回值:调用的不存在的方法的名称和参数

触发callStatic(),传参$arg1,$arg2(callxxx,a)

$arg1,调用不存在的方法的名称;$arg2,调用不存在的方法的参数;

3.__get()

调用成员属性不存在时触发魔术方法

<?php
class User {
    public $var1;
    public function __get($arg1){
        echo  $arg1;
    }
}
$test = new User();
$test ->var2;     //调用的成员属性var2不存在
?>

触发时机:调用的成员属性不存在

功能:(无)

参数:传参$arg1

返回值:不存在的成员属性的名称

触发get(),把不存在的属性名称var2赋值给$arg1

4.__set()

给不存在的成员属性赋值时触发魔术方法

<?php
class User {
    public $var1;
    public function __set($arg1 ,$arg2){
        echo  $arg1.','.$arg2;
    }
}
$test = new User();
$test ->var2 = 1;     //给不存在的成员属性var2赋值为1
?>

触发时机:给不存在的成员属性赋值

功能:(无)

参数:传参$arg1,$arg2

返回值:不存在的成员属性的名称和赋的值

先触发get(),再触发set()

$arg1,不存在成员属性的名称;$arg2,不存在的成员属性var2赋的值

5.__isset()

对不可访问属性或不存在的属性使用isset()或empty()会触发魔术方法

<?php
class User {
    private $var;
    public function __isset($arg1){
        echo  $arg1;
    }
}
$test = new User();
isset($test->var);     //isset调用的成员属性var不可访问或不存在
?>

触发时机:对不可访问属性或不存在属性使用isset()或empty()时__isset()会被调用。

功能:(无)

参数:传参$arg1

返回值:不存在的成员属性的名称

触发inset(),返回$arg1,不存在或不可访问的成员属性的名称

isset()函数用于检测变量是否已经设置并且非空,如果非空返回true,否则返回false。

empty()函数用于检测一个变量是否为空,如果为空返回true,否则返回false。

6.__unset()

对不可访问属性或不存在的属性使用unset()会触发魔术方法

<?php
class User {
    private $var;
    public function __unset($arg1){
        echo $arg1;
    }
}
$test = new User();
unset($test->var);     //unset调用的成员属性var不可访问或不存在
?>

触发时机:对不可访问属性或不存在属性使用unset()时__unset()会被调用。

功能:(无)

参数:传参$arg1

返回值:不存在的成员属性的名称

触发unset(),返回$arg1,不存在或不可访问的成员属性的名称

unset()函数用于销毁指定变量,释放内存。如果成功销毁变量,则返回true,否则返回false。

7.__clone()

当使用clone关键字考本完成一个对象后,新对象会自动调用魔术方法

<?php
class User {
    private $var;
    public function __clone(){
        echo  "__clone test";
    }
}
$test = new User() ;
$newclass = clone($test) //使用colne()克隆对象完成后,触发魔术方法__clone()
?>

触发时机:当使用clone关键字拷贝完成一个对象后,新对象会自动调用定义的魔术方法__clone()

功能:(无)

参数:(无)

返回值:(无)

clone关键字用于创建一个对象的副本(即克隆一个对象)。

它是对象复制的一种方式,可以用来创建一个新的对象,而不是引用原始对象。通过使用clone,我们可以创建一个完全独立的对象,并且这个对象的属性值与原始对象相同。

汇总表格

__construct()__destruct()__sleep()__wakeup()
触发时机实例化对象对象引用完成或对象被销毁反序列化之后序列化serialize()之前反序列化unserialize()之前
功能提前清理不必要内容对象被序列化之前触发,返回需要被序列化存储的
参数
返回值需要被序列化存储的成员属性
__toString__invoke()__call()__callStatic()
触发时机对象被当成字符串调用(使用echo或者print)把对象当成函数调用调用一个不存在的方法静态调用不存在的方法
功能
参数$arg1,$arg2$arg1,$arg2
返回值调用的不存在的方法的名称和参数调用的不存在的方法的名称和参数
__get()__set()__isset()__unset()
触发时机调用成员属性不存在给不存在的成员属性赋值对不可访问属性使用isset()或empty()对不可访问属性使用unset()
功能
参数$arg1$arg1,$arg2$arg1$arg1
返回值不存在的成员属性的名称不存在的成员属性的名称和赋的值不存在的成员属性的名称不存在的成员属性的名称
__clone()
触发机制当使用colne关键字拷贝完成一个对象

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

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

相关文章

69 排序高手

数据以字符串形式输入&#xff0c;期间转到数组内 #include <iostream> #include <string> #include <vector>using namespace::std; using std::cout; using std::cin; int pxgs(vector<int>& nums) {int nnums.size();int l0,rn-1;while(l<…

博客3万访问量了……

博客有3万访问量了呢。自从第一次用了赠送的1500的流量券&#xff0c;粉丝了从零突破了&#xff0c;到现在有150个粉丝了。 之前预想的写博客的初衷&#xff0c;也是记录自己的学习过程&#xff0c;毕竟好记忆不如烂笔头&#xff0c;记录下来就是长长久久的&#xff0c;随时可以…

Java-Security-1

JWT详解​​​​​​​ 1、SpringSecurity 1.1 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架 Shiro &#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比 Shiro 丰富。 一般来说中大型的项目都是使用 SpringSecurity 来做安全框…

金蝶EAS打印凭证,数据量多点的就会出错

金蝶EAS打印凭证&#xff0c;数据量多点的就会出错&#xff0c;约过100页&#xff0c;提示数据源有问题 经咨询工程师需修改java虚拟机内存。 打开eas客户端目录&#xff0c;运行set-url.bat 看到原来java虚拟机只配置了512M内存&#xff0c;把虚拟机内存修改为4096&#xff0…

基于SSM的学生在线考试系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

sql学习笔记(四)

1. 避免字段名与关键字冲突 1️⃣ 2️⃣ as 设置别名 2. 同比与环比 「同比」&#xff1a;与历史「同时期&#xff3d;比较&#xff0c;例如2011年3月份与2010年3月份相比&#xff0c;叫「同比」。 「环比」&#xff1a;与「上一个」统计周期比较&#xff0c;例如2011年4…

Postman测试文件上传接口

文章目录 一、Postman测试文件上传接口1、创建一个请求→选择请求方式→填写请求的URL→填写请求的参数值2、选择 "Body" → "form-data" → "Test" → "File"3、点击 "Select Files"4、选择要上传的文件5、点击 Send 进行测…

10 Vue3中v-html指令的用法

概述 v-html主要是用来渲染富文本内容&#xff0c;比如评论信息&#xff0c;新闻信息&#xff0c;文章信息等。 v-html是一个特别不安全的指令&#xff0c;因为它会将文本以HTML的显示进行渲染&#xff0c;一旦文本里面包含一些恶意的js代码&#xff0c;可能会导致整个网页发…

Unresolved plugin: ‘org.apache.maven.plugins‘解决报错

新建springboot项目报Unresolved plugin: ‘org.apache.maven.plugins:maven-surefire-plugin:3.1.2’ 缺什么插件 引入什么插件的依赖就行 <dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifact…

设计模式03结构型模式

结构型模式 参考网课:黑马程序员Java设计模式详解 博客笔记 https://zgtsky.top/ 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于…

【Unity】【WebRTC】如何用Unity而不是浏览器接收远程画面

【背景】 之前几篇我们讨论了如何设置信令服务器&#xff0c;如何发送画面给远端以及如何用浏览器查看同步画面&#xff0c;今天来讨论如何实现Unity内部接收画面。 看本篇之前请先看过之前将web服务器设置和基本远程画面功能的几篇博文。&#xff08;同专栏下查看&#xff09…

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中&#xff0c;我们探索了顺序表这一基础的数据结构&#xff0c;它提供了一种有序存储数据的方法&#xff0c;使得数据的访 问和操作变得更加高效。想要进一步了解&#xff0c;大家可以移步于上一篇文章&#xff1a;探索顺序表&#xff1a;数据结构中的秩序之美 今…

springboot整合kafka附源码

前提&#xff1a;确保kafka环境 我使用的方案是docker 我使用的镜像为&#xff1a;wurstmeister/kafka 我使用的镜像为&#xff1a;wurstmeister/zookeeper docker安装kafka和zk教程&#xff1a;点这里手把手教你使用Docker搭建kafka【详细教程】 使用kafka前&#xff0c;要确…

字符串函数内存函数(从零到一)【C语言】

长度不受限制的字符串函数&#xff1a;strcpy,strcat,strcmp 长度受限制的字符串函数&#xff1a;strncpy,strncat,strncmp strlen strlen函数是库函数中我们最常使用的函数&#xff0c;它可以求出字符串的长度(不包含‘\0’) 使用方法 通过前面对strlen函数的模拟实现我们知…

考研小白助力宝典(2)

前言 考研&#xff0c;是一场耗时长久的脑力之战&#xff0c;刻苦勤奋的态度和披荆斩棘的精神外&#xff0c;往往取决于谁抓好了信息利剑&#xff01;合理得当利用好信息平台&#xff0c;就已经快人一步战胜了大部分的竞争对手了&#xff01; 目录 着重学习练习 考研相关简介 …

小白向攻略简单易懂,怎么用DomoAI将手机里面的视频转换成丝滑流畅高帧数的动画

Domo AI是一款强大的人工智能工具&#xff0c;支持图像和视频的重新创作。它拥有超过10个多样化的预设模型&#xff0c;使用户能够轻松实现一致且统一的艺术风格。 在图像生成方面&#xff0c;Domo AI能够快速将照片转换成动漫或现实风格&#xff0c;同时还支持将素描或线稿重…

关于“Python”的核心知识点整理大全33

目录 12.8.3 将子弹存储到编组中 alien_invasion.py 注意 12.8.4 开火 game_functions.py 12.8.5 删除已消失的子弹 alien_invasion.py 12.8.6 限制子弹数量 settings.py game_functions.py 12.8.7 创建函数 update_bullets() game_functions.py alien_invasion.py…

redhawk中short引起的ir drop为0的情况

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 问题如图&#xff0c;顶层在做redhawk分析时读了top及block的def&#xff0c;但top def中并没有把block pg pin写到top 的pg net下&#xff0c;导致redhawk认为有short存在&…

获投1050万欧元!德国量子公司Kipu Quantum成功研发特定压缩算法

​&#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;德国量子软件公司Kipu Quantum宣布成功完成种子轮融资&#xff0c;融资总额达1050万欧元&#xff08;约合8000万人民币&#xff09;。该初创公司目前已开发出运行高性能量子计算机所需的压缩算法。该算法…

迎接新技术挑战,JFrog发布与升级系列黑科技技术产品

作为开发者&#xff0c;我们十分关注软件开发的全生命周期&#xff0c;有一家企业也同样关注软件交付和流式软件&#xff0c;致力创造从开发人员到设备之间畅通无阻的软件交付世界。它便是 JFrog&#xff0c;自2008年成立以来&#xff0c;目前已在全球范围内拥有7200家客户&…