Web渗透:php反序列化漏洞

反序列化漏洞(Deserialization Vulnerability)是一种在应用程序处理数据的过程中,因不安全的反序列化操作引发的安全漏洞;反序列化是指将序列化的数据(通常是字节流或字符串)转换回对象的过程,如果反序列化操作未进行适当的验证或消毒,攻击者可以通过精心构造的恶意数据进行攻击,执行任意代码、获取敏感信息、或破坏数据的完整性。本文我们就来探讨一下反序列化漏洞产生的原因和漏洞利用方法。

序列化与反序列化

要掌握反序列化漏洞的产生原理肯定首先要明白序列化和反序列究竟是什么样的过程,这会儿我们就先针对这两个概念进行说明:

①序列化:序列化(Serialization)是一种将对象的状态转换为可存储或可传输格式的过程。

通过序列化,程序中的复杂数据结构(如对象、数组、数据结构等)可以转换为字节流、字符串或其他格式,从而能够存储到文件中、发送到远程服务器或者传输通过网络。

②反序列化:反序列化(Deserialization)是序列化的逆过程,即将序列化的字节流或字符串恢复成原来的对象或数据结构。

接下来我们就通过PHP代码来针对这两个过程进行演示:

①序列化例子
<?php
class Person {public $name;public $age;
​public function __construct($name, $age) {$this->name = $name;$this->age = $age;}
}
​
$person = new Person("Alice", 30);
$serializedData = serialize($person);
​
echo "Serialized Data: " . $serializedData;
?>

class Person:定义一个名为Person的类;$name、$age:定义Person类的公共属性name和age

public function __construct($name, $age):定义一个构造函数,用于初始化对象的nameage属性。

接着使用new关键字创建一个Person类的实例,传入名字Alice和年龄30作为参数,初始化nameage属性;在初始化对象完成后调用serialize函数,将Person对象转换为一个字符串。这一过程称为序列化,生成的字符串可以用于存储或传输。

解释我们使用echo语句输出序列化后的字符串,输出结果:运行这段代码将输出类似以下内容的字符串,这个字符串表示序列化后的Person对象:

Serialized Data: O:6:"Person":2:{s:4:"name";s:5:"Alice";s:3:"age";i:30;}

O:6:"Person":2: 表示一个Person对象,类名长度为6,包含2个属性。

{s:4:"name";s:5:"Alice";s:3:"age";i:30;} 是对象的属性及其对应的值:

  • s:4:"name";s:5:"Alice"; 表示字符串属性name的值为Alice

  • s:3:"age";i:30; 表示整数属性age的值为30

②反序列化例子
<?php
class Person {public $name;public $age;
​public function __construct($name, $age) {$this->name = $name;$this->age = $age;}
}
​
$serializedData = 'O:6:"Person":2:{s:4:"name";s:5:"Alice";s:3:"age";i:30;}';
$person = unserialize($serializedData);
​
echo "Name: " . $person->name . "\n";
echo "Age: " . $person->age;
?>

这个示例中,我们使用unserialize函数将序列化的字符串恢复为原始的Person对象,并输出该对象的Name属性值和Age属性值;最后输出的结果为:

Name: Alice Age: 30

序列化和反序列化是软件开发中非常重要且常用的技术,主要用于数据的持久化存储和跨网络传输;正因为常用所以有着不好的编程习惯的开发者们可能经常会在代码中编写一些不安全的序列化代码;不安全的序列化和反序列化主要是指在处理用户输入或不受信任的数据时,没有进行适当的验证和消毒,导致安全漏洞----反序列化漏洞,接下去我们就以pikachu靶场中的反序列化漏洞关卡针对反序列化漏洞的产生原理进行讨论。

示例:

1.打开关卡可以看到页面中存在一个输入框用以接收序列化数据:

输入带有恶意代码的序列化数据:

O:1:"S":1:{s:4:"test";s:29:"<script>alert("xss")</script>";}

此时页面出现弹窗:

payload构造:

这个关卡构造攻击语句的前提是要知道源码中存在的数据结构,而这些内容在当前页面中是没有的,我们需要从站点源码中去获取该数据结构以构造我们的序列化攻击语句,这个时候我们就来看一下当前关卡的相关代码:

class S{var $test = "pikachu";function __construct(){echo $this->test;}
}
​
$html='';
if(isset($_POST['o'])){$s = $_POST['o'];if(!@$unser = unserialize($s)){$html.="<p>大兄弟,来点劲爆点儿的!</p>";}else{$html.="<p>{$unser->test}</p>";}
​
}

class S:定义一个名为S的类;var $test = "pikachu";:定义一个公共变量$test,并初始化为字符串"pikachu"function __construct():定义类的构造函数。在创建S类的实例时会自动调用此函数。echo $this->test;:构造函数输出类的属性$test的值(即"pikachu")。

$html = '';:初始化一个空字符串变量$html,用于存储最终的HTML输出。

if (isset($_POST['o'])):检查是否通过POST请求传递了参数o

$s = $_POST['o'];:将POST请求中的参数o的值赋给变量$s

if (!@$unser = unserialize($s))

  • unserialize($s):尝试反序列化变量$s。反序列化是将序列化的字符串转换回对象。

  • @$unser:使用@符号抑制反序列化过程中可能产生的警告或错误。

  • if (!@$unser = unserialize($s)):如果反序列化失败($unserfalse),则执行大括号内的代码块。

如果反序列化失败,向$html追加一段HTML内容,显示“大兄弟,来点劲爆点儿的!”;如果反序列化成功,将反序列化得到的对象的test属性值插入到HTML中,并追加到$html;

这个时候我们来看一下我们构造的Payload:

O:1:"S":1:{s:4:"test";s:29:"<script>alert("xss")</script>";}

根据源码我们构造了序列化数据;这是一个S对象,他的成员变量test的值为<script>alert("xss")</script>;在后端程序接收到我们的输入后会将数据进行反序列化,接着将test值输入至页面中并进行解析执行产生弹窗;至此攻击成功!

这个代码存在反序列化漏洞;因为它直接对用户提供的数据进行反序列化,攻击者在获得代码中相关的数据结构后就可以构造恶意的序列化数据,导致任意代码执行或其他安全问题,要防止这种漏洞,应该避免对不可信数据进行反序列化,或者严格限制反序列化的类,并进行数据验证。

安全建议
  1. 避免反序列化用户输入的数据。

  2. 如果必须反序列化,使用允许列表限制可反序列化的类。

  3. 对输入数据进行严格的验证和消毒。

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

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

相关文章

k8s架构设计思想

1.谷歌borg云计算管理平台 一类&#xff1a;infrastucture platform software 另一类&#xff1a;borg为主的非虚拟化技术&#xff0c;调度进程 核心是轻量级作业调度&#xff0c;不是做虚拟化/云平台的 borg本身用了一些容器技术 生产业务product workload要求高可用&#xf…

AI 基础设施要点——AB Periasamy 和 Matthew DeMello 主持的 AI

MinIO 的联合创始人兼首席执行官 AB Periasamy 最近在 AI in Business 播客中亮相&#xff0c;他与 Emerj 的高级编辑 Matthew DeMello 就企业的 AI 基础设施和对象存储进行了丰富的对话。 在这篇博文中&#xff0c;我们将带您了解所讨论内容的删节版本。让我们开始吧。 AB 和…

操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 &#xff1a; 并发的实质是一个处理器在几个进程之间的多路复用&#xff0c;并发是对有限的物理资源强制行使多用户共享&#xff0c;消除计算机部件之间的互等现象&#xff0c;以提高系统资源利用率。 &#xff08;1&#xff09;并发进程——互斥性&#xff1a; 进…

ingress相关yaml文件报错且相关资源一切正常解决方法

今天在执行ingress相关文件的时候莫名其妙报错了&#xff0c;问了别人得知了这个方法 执行ingress相关文件报错 01.yaml是我自己创建关于ingress的yaml文件 报错信息 且相关资源一切正常 解决方法 kubectl get validatingwebhookconfigurations删除ingress-nginx-admissio…

在Qt中,直接include <moc_xxxxx.cpp> 为什么不会出现符号冲突的错误?

在逛Qt官方社区的时候看到这样一个帖子&#xff1a; https://forum.qt.io/topic/117973/how-does-include-moc_-cpp-work 大概的意思是moc_xxx.cpp如果已经被编译器编译&#xff0c;那么在另一个cpp文件中include同一个moc_xxx.cpp应该出现符号冲突才对&#xff0c;但是Qt却能正…

【RNN练习】LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前期准备工作 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn1. 导入数据 data pd.read_cs…

汽车抬头显示器HUD阳光倒灌实验太阳光模拟器

简述 HUD阳光倒灌实验是评估汽车抬头显示器&#xff08;HUD&#xff09;在强烈日照条件下的性能表现的一种测试方法。该实验通过模拟太阳光照射&#xff0c;检测HUD在阳光直射下的显示效果&#xff0c;以确保驾驶者在强烈日照下仍能清晰地看到HUD显示的信息&#xff0c;从而提…

【php】【mysql】【layui】 原生初级简易留言簿系统成品代码动态网站开发网页WEB浏览器端B/S结构

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【php】【mysql】【layui】 原生初级简易留言簿系统成品代码动态网站开发网页WEB浏览器端B/S结构 获取源码方式项目说明&#xff1a;文件包含&#xff1a;项目运行环境项目运行截图 获取源码方式 加Q群…

【地质灾害监测实现有效预警,44人提前安全转移】

6月13日14时&#xff0c;国信华源地质灾害监测预警系统提前精准预警&#xff0c;安全转移10户44人。 该滑坡隐患点通过科学部署国信华源裂缝计、倾角加速度计、雨量计、预警广播等自动化、智能化监测预警设备&#xff0c;实现了对隐患点裂缝、位移、降雨量等关键要素的实时动态…

DBdoctor产品介绍

基本信息 DBdoctor是一款企业级数据库监控、巡检、性能诊断、SQL审核与优化平台&#xff0c;致力于解决一切数据库性能问题。采用eBPF技术可对数据库做细粒度的扫描&#xff0c;帮助您一分钟内找到数据库性能问题&#xff0c;实现性能诊断百倍提效。针对数据库性能诊断门槛高、…

信息化与农业生产的深度融合

信息化与农业生产的深度融合 信息化与农业生产的深度融合&#xff0c;是现代农业发展的一个重要趋势&#xff0c;它不仅促进了农业生产效率的显著提升&#xff0c;还为实现农业可持续发展和精准管理提供了强有力的支撑。这一过程不仅仅是技术的简单叠加&#xff0c;更是农业生…

自研网关架构设计

网关项目 1. 了解网关网关横向对比为什么自研网关 2. 架构设计技术栈技术要点异步化设计使用缓存缓冲合理使用串行化吞吐量为王合适的工作线程 架构图 1. 了解网关 概念 访问数据、业务逻辑或功能的 “前门”负责处理接受和处理调用过程中的所有任务 类型 RESTful APl 使用…

基于DPU的Ceph存储解决方案

1. 方案背景和挑战 Ceph是一个高度可扩展、高性能的开源分布式存储系统&#xff0c;设计用于提供优秀的对象存储、块存储和文件存储服务。它的几个核心特点是&#xff1a; 弹性扩展&#xff1a;Ceph能够无缝地水平扩展存储容量和性能&#xff0c;只需添加新的存储节点即可&am…

探索绿色消费新纪元:消费增值模式

大家好&#xff01;我是来自一家备受瞩目的科技公司的产品经理&#xff0c;我叫吴军。今天&#xff0c;我非常荣幸能与大家分享一种正在市场上引起广泛关注的创新商业模式——消费增值模式。 近年来&#xff0c;随着环保意识的日益增强&#xff0c;绿色消费逐渐成为了新时代的消…

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道 实验要求实现思路IPv6 in IPv4 与 GRE 不同点注意点配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3)&#xff1a;IPv6 网络IPv6 in IPv4隧道 R3R4基础配置局域网环境(OSPFv3)&#xff1a;IPv6 网络IPv6 in IPv4隧道 R…

css做旋转星球可举一反三

<!DOCTYPE html> <html lang"en"><head> <meta charset"UTF-8" /> <title>旋转的星球</title> <style type"text/css">.box {/*position: relative;*/position: absolute;width: 139px;height: 139p…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机&#xff1f; 刷机失败&#xff1f; 无法方控&#xff1f; 无法画中画? 原车音乐跟我安装的音乐一起播放&#xff1f; 原车音乐停了&#xff0c;我安装的软件也跟着没声音了&#xff1f; 调节声音时忽大忽小&#xff1f; 怎么安装软件&#xff1f; 软件…

访问外网的安全保障——反向沙箱

反向沙箱作为一种网络安全技术&#xff0c;其核心理念在于通过构建一个隔离且受控的环境&#xff0c;来有效阻止潜在的网络威胁对真实系统的影响。在当今日益复杂的网络环境中&#xff0c;如何借助反向沙箱实现安全上网&#xff0c;已成为众多用户关注的焦点。 随着信息化的发…

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式&#xff0c;它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…

[Cloud Networking] VLAN

1 为什么需要 VLAN(Virtual Local Area Network) VLAN是一个逻辑网络&#xff0c;VLAN将设备/用户进行逻辑分组&#xff0c;VLAN需要在Switch上创建。为什么需要这样呢&#xff1f;为何不能所有设备都在同一个网络&#xff1f; 如下网络&#xff0c;如果设备过多&#xff0c;…