搜索

查看: 3122|回复: 11

[PHP] PHP session反序列化漏洞超详细讲解

[复制链接]
发表于 2023-5-4 17:04:07 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:04:07 3122 11 看全部
目录
  • session请求过程
  • session_start的作用
  • session存储机制
  • session反序列化漏洞
    session请求过程
    当第一次访问网站时,Seesion_start()函数就会创建一个唯一的Session ID,并自动通过HTTP的响应头,将这个Session ID保存到客户端Cookie中。同时,也在服务器端创建一个以Session ID命名的文件,用于保存这个用户的会话信息。当同一个用户再次访问这个网站时,也会自动通过HTTP的请求头将Cookie中保存的Seesion ID再携带过来,这时Session_start()函数就不会再去分配一个新的Session ID,而是在服务器的硬盘中去寻找和这个Session ID同名的Session文件,将这之前为这个用户保存的会话信息读出,在当前脚本中应用,达到跟踪这个用户的目的。

    session_start的作用
    当会话自动开始或者通过session_start()手动开始的时候, PHP 内部会依据客户端传来的PHPSESSID来获取现有的对应的会话数据(即session文件), PHP 会自动反序列化session文件的内容,并将之填充到 $_SESSION 超级全局变量中。如果不存在对应的会话数据,则创建名为sess_PHPSESSID(客户端传来的)的文件。如果客户端未发送PHPSESSID,则创建一个由32个字母组成的PHPSESSID,并返回set-cookie。

    session存储机制
    PHP中的Session中的内容并不是放在内存中的,而是以文件的方式来存储的,存储方式就是由配置项session.save_handler来进行确定的,默认是以文件的方式存储。存储的文件是以sess_sessionid来进行命名的,文件的内容就是Session值的序列化之后的内容。
    了解一下PHP Session在php.ini中主要存在以下配置项:

    2023021516482952.png

    2023021516482952.png


    在PHP中Session有三种序列化的方式,分别是php,php_serialize,php_binary,不同的引擎所对应的Session的存储的方式不同

    2023021516482953.png

    2023021516482953.png


    php处理器:

    2023021516482954.png

    2023021516482954.png


    php_binary处理器:

    2023021516482955.png

    2023021516482955.png


    php_serialize处理器:

    2023021516482956.png

    2023021516482956.png


    session反序列化漏洞
    PHP在session存储和读取时,都会有一个序列化和反序列化的过程,PHP内置了多种处理器用于存取 $_SESSION 数据,都会对数据进行序列化和反序列化,PHP中的Session的实现是没有的问题的,漏洞主要是由于使用不同的引擎来处理session文件造成的。
    存在$_session变量赋值

    2023021516482957.png

    2023021516482957.png


    使用php_serialize引擎来存储session
    session.php
    ";
    var_dump($_SESSION);
    echo "";
    ?>
    session2.php
    name." !";
        }
    }
    ?>
    分析:
    在session.php中存储,这里要注意,因为session.php存储器使用了php.serialize,而session.php使用的是php,因此漏洞的主要原因在于不同的引擎对于竖杠'| '的解析产生歧义。
    对于php_serialize引擎来说'| '可能只是一个正常的字符;但对于php引擎来说'| '就是分隔符,前面是$_SESSION['username']的键名,后面是GET参数经过serialize序列化后的值。从而在解析的时候造成了歧义,导致其在解析Session文件时直接对' | '后的值进行反序列化处理。
    payload.php
    age="888";
    $a ->name="cc";
    echo serialize($a);
    ?>
    漏洞复现:
    |O:4:"user":2:{s:4:"name";s:2:"cc";s:3:"age";s:3:"888";}

    2023021516482958.png

    2023021516482958.png


    然后使用session2.php读取:直接读文件就可以

    2023021516482959.png

    2023021516482959.png


    到此这篇关于PHP session反序列化漏洞超详细讲解的文章就介绍到这了,更多相关PHP session反序列化漏洞内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 14:40:07 | 显示全部楼层
    素色流年783 2023-6-29 14:40:07 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-29 17:23:27 | 显示全部楼层
    李志敏 2023-6-29 17:23:27 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 20:44:26 | 显示全部楼层
    六翼天使494 2023-6-29 20:44:26 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 22:13:58 | 显示全部楼层
    当当当当裤裆坦 2023-6-29 22:13:58 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-30 01:38:55 | 显示全部楼层
    知足常乐77 2023-6-30 01:38:55 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 10:06:41 | 显示全部楼层
    贰十岁装成熟装s 2023-6-30 10:06:41 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 15:00:38 | 显示全部楼层
    戏做顿 2023-6-30 15:00:38 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-3 22:21:16 | 显示全部楼层
    永远爱你冰塘 2023-7-3 22:21:16 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-4 17:30:47 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-7-4 17:30:47 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表