Pikachu靶场——PHP反序列化漏洞

文章目录

  • 1. PHP反序列化
    • 1.1 反序列化代码审计
    • 1.2 漏洞防御

1. PHP反序列化

可参考我写的另一篇博客:反序列化漏洞及漏洞复现。

序列化serialize()

序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:

class S{public $test="pikachu";
}$s=new S(); 		//创建一个对象serialize($s); 		//把这个对象进行序列化序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}O:代表object1:表示该对象的类名的字节数(即类名长度为1S:对象的名称1:表示该对象有 1 个属性。s:数据类型4:变量名称的长度test:变量名称s:数据类型7:变量值的长度pikachu:变量值

反序列化unserialize()

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

$u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");echo $u->test; //得到的结果为pikachu

注意序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

常见的几个魔法函数:

__construct():当一个对象创建时被调用。__destruct():当一个对象销毁时被调用。__toString():当一个对象被当作一个字符串使用。__sleep():在对象在被序列化之前运行。__wakeup:将在序列化之后立即被调用。

漏洞举例:

class S{var $test = "pikachu";function __destruct(){echo $this->test;}
}
$s = $_GET['test'];
@$unser = unserialize($a);payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

开始闯关

image-20230909155450025

输入正常的序列化字符串

O:1:"S":1:{s:4:"test";s:7:"pikachu";}

image-20230909155751128

因为这里没有对输入的数据进行过滤。可以结合XSS漏洞来构造我们的攻击字符串。

O:1:"S":1:{s:4:"test";s:30:"<script>alert('wuhu')</script>";}

image-20230909160349235

1.1 反序列化代码审计

表单接受序列化后的数据进行传递。

image-20230909160600053

注意:PHP中的__construct()这个函数虽然在对象创建时会被调用,但反序列化(unserialize())的时候并不会被调用。当使用 unserialize() 函数从序列化的字符串中恢复对象时,构造函数 __construct() 不会被调用。这是因为在反序列化过程中,对象是从已有的数据恢复出来的,不需要再进行初始化。所以这里的__construct()没有启动任何作用!!!

image-20230916150000718

下面的代码是对输入的值进行判断,当输入的值为序列化后的值时,unserialize()可以对其进行反序列化,if条件判断为假,进入else。并没有对用户输入的序列化字符串进行过滤以及识别。

image-20230909160648527

反序列化后的对象 u n s e r 调用其属性 t e s t ,并且将值赋值给了 unser调用其属性test,并且将值赋值给了 unser调用其属性test,并且将值赋值给了html,然后输出显示$html。

1.2 漏洞防御

  • 对反序列化数据进行校验,在反序列化操作前,对输入的序列化字符串进行校验,过滤和验证,判断数据是否合法。
  • 限制应用程序运行账户的权限,降低攻击者在利用反序列化漏洞的影响范围。
  • 所以安全序列化机制,采用安全稳定的序列化协议
  • 安全开发规范。

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

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

相关文章

【MySQL】初识数据库

目录 ♫什么是数据库 ♫数据库的分类 ♪关系型数据库 ♪非关系型数据库 ♫显示已有的数据库 ♫创建数据库 ♫删除数据库 ♫使用数据库 ♫数据类型 ♪数值类型 ♪字符串类型 ♪日期类型 ♫创建表 ♫查看表 ♪查看当前数据库下所以表&#xff1a; ♪查看指定表结构&#x…

java多线程相关介绍

1. 线程的创建和启动 在 Java 中创建线程有两种方式。一种是继承 Thread 类并重写其中的 run() 方法&#xff0c;另一种是实现 Runnable 接口并重写其中的 run() 方法。创建完线程对象后&#xff0c;调用 start() 方法可以启动线程。 2. 线程的状态 Java 的线程在不同阶段会处于…

SimpleCG动画示例--汉诺塔动画演示

前言 SimpleCG的使用方法在前面已经介绍了许多&#xff0c;有兴趣的同学如果有去动手&#xff0c;制作一些简单动画应该没多大问题的。所以这次我们来演示一下简单动画。我们刚学习C语言的递归函数时&#xff0c;有一个经典例子相信很多同学都写过&#xff0c;那就是汉诺塔。那…

hadoop生态现状、介绍、部署

一、引出hadoop 1、hadoop的高薪现状 各招聘平台都有许多hadoop高薪职位&#xff0c;可以看看职位所需求的技能 ----> hadoop是什么&#xff0c;为什么会这么高薪&#xff1f;引出大数据&#xff0c;大数据时代&#xff0c;大数据与云计算 2、大数据时代的介绍 大数据的故事…

buuctf-[WUSTCTF2020]CV Maker

打开环境 随便登录注册一下 进入到了profile.php 其他没有什么页面&#xff0c;只能更换头像上传文件&#xff0c;所以猜测是文件上传漏洞 上传一句话木马看看 <?php eval($_POST[a]);?>回显 搜索一下 添加文件头GIF89a。上传php文件 查看页面源代码&#xff0c;看…

【分布式云储存】Springboot微服务接入MinIO实现文件服务

文章目录 前言技术回顾准备工作申请accessKey\secretKey创建数据存储桶公共资源直接访问测试 接入springboot实现文件服务依赖引入配置文件MinIO配置MinIO工具类 OkHttpSSLSocketClient兼容ssl静态资源预览解决方案资源上传预览测试测试结果 前言 上篇博客我们介绍了分布式云存…

Unity之Hololens如何升级MRTK内置shader支持URP

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

php时间选择器插件与安全过滤参数发生空格冲突

php参数过滤时&#xff0c;将“ ”作为隐患予以禁止&#xff0c;但是在时间传递时&#xff0c;如2023-09-30 10:00:00作为变量传递时&#xff0c;被禁止。 php安全参数过滤 function safe_replace($str) {$disallow_str array(%27, %2527, *, ", "", ;, <…

Qt Creator 预览界面 快捷键

一般来说&#xff0c;我们运行Qt程序所花费的时间是比较长的&#xff0c;那有时我们只改变了界面&#xff0c;那么此时花费如此长的时间去运行程序来观察界面改动的效果是非常浪费时间的行为。 此时我们可以选择预览界面来观察界面改动后的效果&#xff1a;

Java性能调优必备知识学习路线

性能调优是Java开发中一个非常重要的环节&#xff0c;它可以帮助我们提高系统的性能、稳定性、可靠性和用户体验&#xff0c;从而提高用户体验和企业竞争力。 目录 一、为什么要学习Java性能调优&#xff1f; 二、如何做好性能调优&#xff1f; 2.1 扎实的计算机基础 2.2 …

通过Nginx重新认识HTTP错误码

文章目录 概要一、HTTP错误码1.1、1xx1.2、2xx1.3、3xx1.4、4xx1.5、5xx 二、Nginx对常见错误处理三、参考资料 概要 在web开发过程中&#xff0c;通过HTTP错误码快速定位问题是一个非常重要的技能&#xff0c;同时Nginx是非常常用的一个实现HTTP协议的服务&#xff0c;因此本…

数字时代古文的传承———云南文化瑰宝“爨文化“(我为家乡发声)

文章目录 前言⭐ "爨"意味着什么&#xff0c;究竟何为"爨文化"&#xff1f;⭐ 爨文化鲜明的特点1.经济生活2.政治生活3.文化艺术 ⭐ 数字时代古文的传承与传播1.藏品数字化2.建立数据库3.传播大众化 前言 爨文化是继古滇文化之后崛起于珠江正源南盘江流域…

jieba.posseg是jieba中的一个组件,它用于对文本进行词性标注

jieba.posseg是Python中的一个分词工具&#xff0c;它可以将文本切割成词语&#xff0c;并且为每个词语标注词性。这个工具可以帮助我们更好地理解和处理自然语言文本。而pseg则是jieba.posseg的别名&#xff0c;用于方便快捷地进行调用。 下面是一个简单的例子&#xff0c;展…

jvm内存分配与回收策略

自动内存管理 解决两个问题 自动给对象分配内存 对象一般堆上分配&#xff08;而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配&#xff09; 新生对象通常会分配在新生代&#xff0c;少数情况下&#xff08;例如对象大小超过一定阈值&#xff09;也可能…

Windows下使用VS2010编译出带pdb可调试的FFmpeg库

本人主要在windows环境下开发,Linux下的gpb调试工具又不如vs调试方便(使用过其他调试工具才知道,vs果真为宇宙最强调试工具),所以决定在windows编译可以调试FFmpeg,以方便调试和学习FFmpeg内部代码。 有过在visual studio下编程的小伙伴应该都知道vs的调试信息主要依靠于…

原型、原型链、判断数据类型

目录 作用 原型链 引用类型&#xff1a;__proto__(隐式原型)属性&#xff0c;属性值是对象函数&#xff1a;prototype(原型)属性&#xff0c;属性值是对象 Function&#xff1a;本身也是函数 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(objec…

JavaScript中如何确定this的值?如何指定this的值?

&#x1f380;JavaScript中的this 在绝大多数情况下&#xff0c;函数的调用方法决定了this的值&#xff08;运行时绑定&#xff09;。this不能在执行期间被赋值&#xff0c;并且在每次函数呗调用时this的值也可能会不同。 &#x1f37f;如何确定this的值&#xff1a; 在非严格…

cesium 雷达扫描 (波纹线性雷达扫描效果)

cesium 雷达扫描 (波纹线性雷达扫描效果) 1、实现方法 使用ellipse方法加载圆型,修改ellipse中material方法来实现效果 2、示例代码 2.1 <!DOCTYPE html> <html lang="en"><head>&l

番外6:下载+安装+配置Linux

#########配置Linux---后续 step08: 点击编辑虚拟机设置&#xff0c;选择下载好的映像文件.iso进行挂载&#xff1b; step09: 点击编辑虚拟机选项&#xff0c;选择UEFI启动模式并点击确定&#xff1b; step10: 点击开启虚拟机&#xff0c;选择Install rhel &#xff1b; 备注&…

USART串口协议

通信接口 •通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 • 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 全双工&#xff1a;指通信双方能够同时进行双向通信&#xff0c;一般来说&#xff0c;全双…