session.upload_progress反序列化学习

本文详细解析了PHP中session.upload_progress引发的反序列化漏洞,涉及配置、存储方式、漏洞成因及利用条件,包括不同引擎的序列化处理和环境搭建案例。

Session的配置选项和存储方式

在php.ini中存在四项配置项:

session.save_path=""       --设置session的存储路径
session.save_handler=""  --设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式)
session.auto_start   boolen --指定会话模块是否在请求开始时启动一个会话,默认为0不启动
session.serialize_handler  string --定义用来序列化/反序列化的处理器名字。默认使用php

在kali里面php的默认配置

session.save_path="/var/lib/php/sessions"    表明所有的session文件都是存储  在/var/lib/php/sessions下
session.save_handler=files              表明session是以文件的方式来进行存储的
session.auto_start=0                         表明默认不启动session
session.serialize_handler=php           表明session的默认序列化引擎使用的是php序列话引擎

 session序列化引擎的储存方式

php_binary:  存储方式是,键名的长度对应的ASCII字符+键名+经过serialize()函数序列化处理的值
php:  存储方式是,键名+竖线+经过serialize()函数序列处理的值
php_serialize(php>5.5.4):  存储方式是,经过serialize()函数序列化处理的值

漏洞成因

session在序列化存储的时候有多种不同的方式,因此要是php在反序列化我们存储的session数据和读取session时所使用的session.serialize_handler(引擎)不同,那么就有可能引发安全问题。

例如在php.ini的配置文件中默认的引擎是php_serialize

<?php
session_start();
$_SESSION['username'] = '|O:3:"qaq":0:{}'; 

 那么在session储存文件里面的就是

a:1:{s:8:"username";s:15:"|O:3:"qaq":0:{}";}

此时因为程序员的失误,将读取session的引擎设置为php 

<?php
ini_set('session.serialize_handler', 'php');
session_start();
var_dump($_SESSION);

 

然后会在session_start()返回session会话里面存储数据时,php引擎的反序列化作用下得到了qaq类。这是因为当使用php引擎的时候,php引擎会以|作为作为key和value的分隔符,那么就会将a:1:{s:8:"username";s:15:"作为SESSION的key,将o:3:"qaq":0:{}作为value,进行反序列化,最后就会得到qaq这个类。这也就导致了反序列化漏洞。

可以看一下session_staer()的处理方式和session的工作原理

PHP: session_start - Manual

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值