php反序列化--2--PHP反序列化漏洞基础知识

一、什么是反序列化?

反序列化是将序列化的字符串还原为PHP的值的过程。

二、如何反序列化

使用unserialize()函数来执行反序列化操作

代码1:

$serializedStr = 'O:8:"stdClass":1:{s:4:"data";s:6:"sample";}';
$originalData = unserialize($serializedStr);
echo $originalData->data;

结果:

sample

三、反序列化漏洞是怎么产生的?

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

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

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

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

代码2:

<?php

class summer{#定义了一个summer类
    public $a = '';
    public function displayVar(){   
        eval($this->a);#执行一个系统指令,将a里边的值定义到eval中
    }
}

$get = $_GET["spring"];
$b = unserialize($get);

$b->displayVar();

?>

1、使用$_GET获取get方法传输的spring参数

2、使用unserialize()函数对传入的值进行反序列化

注:eval()函数在PHP中的功能是将字符串作为PHP代码来执行

3、然后调用displayVar()将传入的参数执行出来。

4、如此可以看见,get传入的值必须是序列化后的值.

5、如何获得序列化后的值呢?

代码3

<?php

class summer{   #定义了一个summer类
    public $a ="system('whoami');";
   }

echo serialize(new summer);
?>

结果:

O:6:"summer":1:{s:1:"a";s:17:"system('whoami');";} 

 6、查看代码2是通过get方法获取spring参数的值,

如下图构造url,即可执行命令。

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

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

相关文章

03-Charles实战

一、抓包分析问题示例 1&#xff09;问题描述 2&#xff09;抓包分析 这是后台响应回来的错误信息&#xff0c;说明问题一是后台的原因&#xff1b;但是后台只响应了一条信息&#xff0c;而前端页面却显示两条错误信息&#xff0c;说明前端页面处理异常的时候逻辑有问题&#…

Android-- 集成谷歌地图

引言 项目需求需要在谷歌地图&#xff1a; 地图展示&#xff0c;设备点聚合&#xff0c;设备站点&#xff0c;绘制点和区域等功能。 我只针对我涉及到的技术做一下总结&#xff0c;希望能帮到开始接触谷歌地图的伙伴们。 集成步骤 1、在项目的modle的build.gradle中添加依赖如…

深层神经网络示例

维度说明&#xff1a; A[L]、Z[L]&#xff1a;&#xff08;本层神经元个数、样本数&#xff09; W[L]&#xff1a;&#xff08;本层神经元个数、上层神经元个数&#xff09; b[L]&#xff1a;&#xff08;本层神经元个数、1&#xff09; dZ[L]&#xff1a;dA[L] * g’A&#xf…

leetcode 513. 找树左下角的值

给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二叉树的节点个数的范围是 [1,104]-231 < Node.val &…

python的字符串

字符串 简单操作 创建 利用 ‘ ’ 或 “ ” 将字符或数字包裹起来的都为字符串 a"你好" 格式化字符串 元组的字符格式化 字符串格式化函数 srt.format() f格式化 方法 split()//指定分割符经行分割 strip()//指定移除字符头尾的字符 join()//指定序列中的字符连接成新…

Java 设计模式系列:外观模式

简介 外观模式&#xff08;Facade Pattern&#xff09;是一种设计模式&#xff0c;又名门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口&#xff0c;外部应用程序不用关心内部…

Redis系列命令更新--Redis哈希命令

一、设置密码验证&#xff1a; 使用文本编辑器&#xff0c;这里使用Notepad&#xff0c;打开Redis服务配置文件。 注意&#xff1a;不要找错了&#xff0c;通常为redis.windows-service.conf&#xff0c;而不是redis.windows.conf。后者是以非系统服务方式启动程序使用的配置…

2-33 基于matlab的用于计算无故障的斜齿轮对啮合时接触线长度随时间的变化

基于matlab的用于计算无故障的斜齿轮对啮合时接触线长度随时间的变化&#xff0c;根据需求设置斜齿轮对的相应参数&#xff0c;得到结果。程序已调通&#xff0c;可直接运行。 2-33 斜齿轮对啮合时接触线长度 齿轮参数 - 小红书 (xiaohongshu.com)

【日常记录】【CSS】display:inline 的样式截断

文章目录 1. 案例2. css属性&#xff1a;box-decoration-break参考地址 1. 案例 现在有一篇文章&#xff0c;某些句子&#xff0c;是要被标记的&#xff0c;加一些css 让他突出一下 可以看到&#xff0c;在最后&#xff0c;断开了&#xff0c;那如若要让 断开哪里的样式 和 开始…

《C专家编程》杂谈

库函数调用和系统调用的区别 系统调用比函数调用要慢很多&#xff0c;因为还要切换到内核模式。

时域分析----移动平均滤波器介绍及其在金融应用示例

介绍 移动平均滤波器&#xff08;Moving Average Filter&#xff09;是一种基本但功能强大的信号处理技术&#xff0c;广泛应用于各种数据平滑和去噪任务中。其主要目的是通过对数据进行平均处理&#xff0c;减少随机波动和噪声&#xff0c;从而突出数据中的趋势和规律。移动平…

二进制成分分析软件(组件漏洞扫描)

免费试用软件 华为云腾讯云 华为云 进入二进制成分分析页面 二进制扫描地址 一个账号免费扫描5次 腾讯云 进入二进制成分分析页面 二进制扫描地址 免费300M流量 其他二进制分析软件 推荐使用悬镜、墨菲安全&#xff0c;支持IDEA插件&#xff0c;在线分析maven依赖。 …

操作系统真象还原:文件描述符简介

14.3 文件描述符简介 14.3.1 文件描述符原理 inode 是操作系统为自己的文件系统准备的数据结构&#xff0c;它用于文件存储的管理&#xff0c;与用户关系不大&#xff0c;咱们要介绍的文件描述符才是与用户息息相关的。 文件描述符即 file descriptor&#xff0c;但凡叫“描…

【周末闲谈】Stable Diffusion会魔法的绘画师

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言Stable Diffusion介绍 使用ComfyUI 和 WebUIComfyUIWebUI 配置需求 Stable Diffusion资源分享吐司AiAUTOMATIC1111Civitai绘世整合包Nenly同学stability.ai 前言 在很早之前&…

【前端项目笔记】10 项目优化上线

项目优化上线 目标&#xff1a;优化Vue项目部署Vue项目&#xff08;上线提供使用&#xff09; 项目优化 项目优化策略&#xff1a; 生成打包报告&#xff1a;根据生成的报告发现问题并解决第三方库启用CDN&#xff1a;提高首屏页面的加载效率Element-UI组件按需加载路由懒加…

Django 删除所有数据

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Post(models.Model):title models.CharField(max_length200)content models.TextField()pub_date models.DateTimeField(date published)class Book(models.Model):title models.CharFiel…

优势洗牌(田忌赛马

Nums2的位置不能改变&#xff0c;所以用优先队列&#xff0c;存储索引的同时弄出最大值&#xff0c;nums1用双指针排序&#xff0c;因为它位置可以比变化。 对nums2进行最大堆排序&#xff0c;存储索引位置和值 Nums1 sort排序即可。 class Solution {public int[] advantag…

Go:基本变量与数据类型

目录 前言 前期准备 Hello World! 一、基本变量 1.1 声明变量 1.2 初始化变量 1.3 变量声明到初始化的过程 1.4 变量值交换 1.5 匿名变量 1.6 变量的作用域 二、数据类型 1.1 整型 1.2 浮点型 1.3 字符串 1.4 布尔类型 1.5 数据类型判断 1.6 数据类型转换 1.…

Linux系列--用户、文件管理

一、概述 Linux系统中超级用户是root&#xff0c;通过超级用户root可以创建其它的普通用户&#xff0c;Linux是一个支持多用户的操作系统。在实际使用中&#xff0c;一般会分配给开发人员专属的账户&#xff0c;这个账户只拥有部分权限&#xff0c;如果权限太高&#xff0c;操作…

golang程序性能提升改进篇之文件的读写---第一篇

背景&#xff1a;接手的项目是golang开发的&#xff08;本人初次接触golang&#xff09;经常出现oom。这个程序是计算和io密集型&#xff0c;调用流量属于明显有波峰波谷&#xff0c;但是因为各种原因&#xff0c;当前无法快速通过serverless或者动态在高峰时段调整资源&#x…