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

news2024/11/29 10:38:50

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关键字拷贝完成一个对象

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

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

相关文章

原知因,正成为中产群体“精准抗衰”新选择

惧怕衰老&#xff0c;渴望长寿&#xff0c;是全人类的共同属性。而在现代生命科学的加持下&#xff0c;科学家们的勇气也前所未有的可畏&#xff0c;人类长寿基因发现者Nir Barzilai就是其中最具代表性的一位。作为人类史上首个抗衰老临床研究TAME的负责人&#xff0c;这位大佬…

初学gitrepo的种种

经过各种折腾之后&#xff0c;发现git其实还是很简单的&#xff1b; 首先你需要两台机器&#xff0c;一台作为服务器&#xff0c;一台作为开发机器&#xff0c;开发机器从服务器上拉取代码。 目 目录 git建仓 开发机器拉取代码 初始化仓代码 repo管理 repo工具的下载 …

Apollo开放平台9.0让自动驾驶开发者轻松上手

文章目录 平台架构&#xff1a;基础环境&#xff1a;开始使用&#xff1a;体验心得: 在自动驾驶技术飞速发展的今天&#xff0c;成为这个领域的一名开发者是一次挑战、一次冒险&#xff0c;更是一次心灵之旅。作为这个领域的先锋之一&#xff0c;Apollo开放平台9.0于12月19日发…

关于PBR策略路由的基础实验

策略路由是基于策略实现数据流量转发&#xff0c;不基于路由表。 // 网络结构实现 lsw: 配置三层交换机 vlan batch 10 20 30 int g0/0/2 port link-type access port default vlan 10 int g0/0/3 port link-type access port default vlan 20 int g0/0/1 port link-type acce…

【Linux基础】4. 目录管理

文章目录 【 1. 处理目录的常用命令 】【 2. ls列出目录 】【 3. cp切换目录 】【 4. pwd显示目前所在的目录 】【 5. mkdir创建新目录 】【 6. rmdir删除空的目录 】【 7. cp复制文件或目录】【 8. rm移除文件或目录 】【 9. mv移动文件与目录或修改名称 】 Linux 的目录结构为…

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

目录 11.1.5 添加新测试 11.2 测试类 11.2.1 各种断言方法 unittestModule中的断言方法&#xff1a; ​编辑11.2.2 一个要测试的类 survey.py language_survey.py 11.2.3 测试 AnonymousSurvey 类 test_survey.py 往期快速传送门&#x1f446;&#xff08;在文章最后&…

【Java】【Hutool】从零开始实现发送邮件功能

采用Hutool工具实现发送邮件&#xff0c;可以访问Hutool官网 引言&#xff1a;从零开始&#xff0c;实现一个基本功能&#xff0c;邮件发送 第一步&#xff1a;打开idea&#xff0c;新建maven工程&#xff0c;引入依赖&#xff0c;如下&#xff1a; <dependencies><…

电力智能运维管理系统

电力智能运维管理系统是一种基于先进的信息技术、自动化技术和智能控制技术&#xff0c;针对电力行业的特殊需求而开发的一种全面综合性管理系统。 依托电易云-智慧电力物联网&#xff0c;该系统以实时监测、高效运维、远程控制的方式&#xff0c;将各类数据信息及时采集、处理…

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1&#xff09;安装 Maven-Helper 插件2&#xff09;Maven Helper 插件使用方法3&#xff09;Idea-Maven 可视化依赖树 1&#xff09;安装 Maven-Helper 插件 这里我们已经安装过了&#xff0c;如果没有安装过&#xff0c;点…

银行测试:第三方支付平台业务流,功能/性能/安全测试方法

1、第三方支付平台的功能和结构特点 在信用方面&#xff0c;第三方支付平台作为中介&#xff0c;在网上交易的商家和消费者之间作一个信用的中转&#xff0c;通过改造支付流程来约束双方的行为&#xff0c;从而在一定程度上缓解彼此对双方信用的猜疑&#xff0c;增加对网上购物…

【Mac】flutter项目集成高德定位SDK,获取key

一、获取调试版安全码SHA1 1.进入当前用户文件夹下的~/.android目录 cd ~/.android2.查看 debug.keystore ls3.运行 debug.keystore keytool -list -v -keystore debug.keystore这里报错&#xff1a; The operation couldn’t be completed. Unable to locate a Java Runt…

老照片翻新修复软件有哪些?带你了解这5个

老照片翻新修复软件有哪些&#xff1f;随着时间的流逝&#xff0c;许多珍贵的老照片可能因为各种原因而受损。幸运的是&#xff0c;现在有一些软件可以帮助我们恢复这些珍贵的回忆。下面是一些值得推荐的修复老照片的软件。 1.迅捷抠图 这是一款功能强大的电脑端软件&#xff…

v0.12.0-敏感词/脏词词标签能力进一步增强

拓展阅读 敏感词工具实现思路 DFA 算法讲解 敏感词库优化流程 java 如何实现开箱即用的敏感词控台服务&#xff1f; 各大平台连敏感词库都没有的吗&#xff1f; v0.10.0-脏词分类标签初步支持 v0.11.0-敏感词新特性&#xff1a;忽略无意义的字符&#xff0c;词标签字典 …

化工企业人员定位解决方案,人员定位系统源码

行业背景 1、人车位置不精准&#xff1a;无法实时查看内外部人员和车辆的精准位置&#xff0c;遇到突发安全事故&#xff0c;无法及时确认人员位置并制定有效的救援方案。 2、作业安全保障弱&#xff1a;难以管控人员和车辆非法进入重大危险源区域、高危装置区、特殊作业区、罐…

深入了解Linux信号:作用、产生、捕捉和阻塞

这里写目录标题 引言1. 信号的基本概念1.1 信号的分类和编号&#xff1a;1.2 查看信号默认处理动作1.3 信号的作用1.4 信号的产生1.4.1通过终端按键产生1.4.2通过系统函数向进程发信号1.4.3由软件条件产生信号1.4.4硬件异常产生信号 2. 常见信号及其作用SIGINT (2) - 中断信号&…

你对葡萄酒中的亚硫酸盐是不是有误解呢?

亚硫酸盐不会让某些人对酒产生不良的反应首先&#xff0c;让我谈谈欧洲生产的葡萄酒不含亚硫酸盐的观点&#xff0c;这在很大程度上是一种误解。虽然我听说过某些生产商在酿造葡萄酒时不添加亚硫酸盐&#xff0c;但这些确实是例外&#xff0c;添加亚硫酸盐是世界公认的酿酒传统…

如何通过MT-Bench评估大模型

如何评估LLM在开放性问题的回答能力 前面三篇博客中介绍了如何评估大模型&#xff0c;内容包括评估大模型时常用的指标&#xff0c;每个指标背后的含义&#xff0c;如何通过编写代码实现指标的收集。对于passk指标&#xff0c;还进行了专门的说明。在前面的博客中&#xff0c;我…

【PC端查看PDA扫描结果】

1、生成条形码 https://www.gaitubao.com/barcode 2、打开Android Studio 进行下图这样配置&#xff0c;那么就能看到pda扫描的数据了 Decoding result&#xff1a;

Jenkins插件安装失败时这么做就搞定啦!

1.网络或墙的问题导致插件下载安装失败 这种错误提示很明显&#xff0c;就是无法连接到插件下载地址&#xff0c;导致插件下载失败。 解决方法 为Jenkins更换源 点击Jenkins主页面左侧列表中【系统管理】—— 下拉找到【管理插件】 选择【高级】选项卡 替换最下方【升级站点…

PTFE四氟托盘应用于化工、医药、食品行业

PTFE托盘是一种广泛应用于化工、医药、食品等行业的特种托盘&#xff0c;采用聚四氟乙烯&#xff08;PTFE&#xff09;材料制造而成。PTFE是一种具有出色耐腐蚀性、高温稳定性和优异物理特性的材料。 PTFE托盘在化工领域中被广泛应用&#xff0c;主要用于处理腐蚀性的化学物质。…