php序列化

SAP设计模式

独自空忆成欢 提交于 2020-03-31 11:11:15
前言 周末做了一下北邮的CTF,这里记录一下做出来的几道题。(PS:比较菜有很多没做出来 >_< ,还是要更加努力学习啊(ง •̀o•́)ง,剩下的等大佬们出了wp后在复现一下) Web ez_bypass 题目源码: I put something in F12 for you include 'flag.php'; $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}'; if(isset($_GET['gg'])&&isset($_GET['id'])) { $id=$_GET['id']; $gg=$_GET['gg']; if (md5($id) === md5($gg) && $id !== $gg) { echo 'You got the first step'; if(isset($_POST['passwd'])) { $passwd=$_POST['passwd']; if (!is_numeric($passwd)) { if($passwd==1234567) { echo 'Good Job!'; highlight_file('flag.php'); die('By Retr_0'); } else { echo "can you think twice??"; } } else{ echo 'You can not get

PHP函数serialize()与unserialize()

让人想犯罪 __ 提交于 2020-03-01 22:48:02
serialize — Generates a storable representation of a value,产生一个可存储的值的表示。 unserialize — Creates a PHP value from a stored representation,从已存储的表示中创建 PHP 的值。 serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不同PHP程序间传递了。 而unserialize()就是把序列化的字符串转换回PHP的值。 //$newsID是一个通过_POST获到的数组 $Id=serialize($newsId);//将数组中的数据序列化直接存到数据库的字段中 $sql = "insert into article_specialtopic (banner,title,articleIDs) values('$banner','$title','$Id')"; if (!mysqli_query($link,$sql)) { die('Error: ' . mysqli_error()); }else{ echo

php序列化(serialize)和反序列化(unserialize)函数

独自空忆成欢 提交于 2020-03-01 15:15:20
用法:serialize()、unserialize() 适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。比较有用的地方就是将数据存入数据库或记录在文件中的时候. 可以对一般变量进行序列化,也可以对字典进行序列化。 <?php $array = array(); $array['keys'] = 'www'; $array['values']='11111'; $a = serialize($array); echo $a; unset($array); $a = unserialize($a); print_r($a); ?> 输出: a:2:{s:4:"keys";s:3:"www";s:6:"values";s:5:"11111";} Array ( [keys] => www [values] => 11111 ) 例题: bugku-Web flag.php 来源: https://www.cnblogs.com/RenoStudio/p/10355133.html

PHP 类与对象 全解析(三)

我怕爱的太早我们不能终老 提交于 2020-02-24 01:56:18
目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 13.魔术方法 定义:PHP把所有以__(两个下划线)开头的类方法当成魔术方法 __construct, __destruct (参看 构造方法和析构方法), __call, __callStatic, __get, __set, __isset, __unset (参看 重载), __sleep, __wakeup, __toString, __set_state 和 __clone 等方法在PHP中被称为“魔术方法”(Magic methods)。 你在命名自己的类方法时不能使用这些方法名。 serialize() 作用: 第一. 在序列化之前,关闭对象可能具有的任何数据库连接等. 第二. 指定对象中需要被序列化的成员属性,如果某个属性比较大而不需要储存下来,可以不把它写进__sleep要返回的数组中,这样该属性就不会被序列化 在用serialize序列化对象时,会自动调用__sleep方法,__sleep方法必须返回一个数组,包含需要串行化的属性。 PHP会抛弃其它属性的值, 如果没有__sleep方法,PHP将保存所有属性,包括private属性。 unserialize() 从字节流中创建了一个对象之后,马上检查是否具有__wakeup 的函数的存在。 如果存在,_

深度剖析PHP序列化和反序列化

无人久伴 提交于 2020-02-23 11:54:31
序列化 序列化格式 在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。 序列化函数原型如下: string serialize ( mixed $value ) 先看下面的例子: class CC { public $data; private $pass; public function __construct($data, $pass) { $this->data = $data; $this->pass = $pass; } } $number = 34; $str = 'uusama'; $bool = true; $null = NULL; $arr = array('a' => 1, 'b' => 2); $cc = new CC('uu', true); var_dump(serialize($number)); var_dump(serialize($str)); var_dump(serialize($bool)); var_dump(serialize($null)); var_dump(serialize($arr)); var_dump(serialize($cc)); 输出结果为: string(5) "i:34;" string(13) "s:6:"uusama";" string(4) "b:1;" string(2)

PHP反序列化漏洞-CVE-2016-7124(绕过__wakeup)复现

独自空忆成欢 提交于 2020-01-30 21:07:39
前言 最近电脑也不知怎么了时不时断网而且我竟然找不出原因!!!很诡异.... 其他设备电脑都OK唯独我的电脑 时好时坏 我仿佛摸清了我电脑断网的时间段所以作息时间都改变了 今天12点多断网刷了会手机陪家人取超市 看到小区门口都挺严格的进出要身份证 去超市还要测体温。之后回来睡觉到6点起来家里做了火锅hhhhh 吃了之后继续学习序列化漏洞emmmm 等会又该睡觉了 一天又结束了! 预备知识 https://www.cnblogs.com/xhds/p/12233720.html PHP反序列化基础 序列化public private protect参数产生不同结果 Pubic 公有 Private 私有 Protect 保护 <?php class test{ public $name = 'xiaohua'; private $address = 'shanxi'; protected $age = '21'; } $test1 = new test(); $object = serialize($test1); print_r($object); ?> 序列化之后打印出: O:4:"test":3:{s:4:"name";s:7:"xiaohua";s:9:"testsex";s:6:"secret";s:6:"*age";s:2:"20";} Public属性序列化后格式

刷题记录:[安洵杯 2019]easy_serialize_php

邮差的信 提交于 2020-01-14 01:56:58
目录 刷题记录:[安洵杯 2019]easy_serialize_php 知识点 PHP反序列化 刷题记录:[安洵杯 2019]easy_serialize_php 题目复现链接: https://buuoj.cn/challenges 参考链接: 第二届安洵杯2019部分writeup 知识点 PHP反序列化 payload为 _SESSION[phpflag]=;s:1:"1";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";} extract后覆盖了两个没用的属性,但是后面又强制加了一个我们不可控的img属性。这个payload的精妙之处就在于phpflag被替换为空后,$serialize_info的内容为 a:2:{s:7:"";s:48:";s:1:"1";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}";s:3:"img";s:20:"Z3Vlc3RfaW1nLnBuZw==";} 刚好把后面多余的img部分截断掉 来源: https://www.cnblogs.com/20175211lyz/p/12190128.html

php序列化与反序列化

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-12 11:08:34
0x00 序列化与反序列化 序列化(serialization),在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存储为文件,存储于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能回复原先状态的过程。 可以理解为,序列化是将变量转换为可保存或可传输的字符串的过程。 而反序列化就是在适当的时候把这个字符串转化为变量的过程。 序列化,也就是serialize()函数将一个对象转换成字符串时,其返回的字符串有着一定的规则。举例如下: O:9:"democlass":3:{s:4:"name";s:4:"John";s:3:"sex";} O代表object,还有一种情况,A代表数组。 9代表对象名称占9个字符,也就是democlass。 3代表对象里面有3个变量。 {}中的s代表string,也就是变量数据类型。 {}中的数字代表相应对象名称所占的字符数量。 0x01 序列化中字母类型的解释 a array b boolean d double i integer o common object r reference s string C custom object O class N null R pointer reference U unicode string 0x02 序列化示例 <?php class demo { private

php序列化和反序列化学习

旧巷老猫 提交于 2020-01-10 20:50:27
1、什么是序列化 序列化说通俗点就是把一个对象变成可以传输的字符串。 1、举个例子,不知道大家知不知道json格式,这就是一种序列化,有可能就是通过array序列化而来的。而反序列化就是把那串可以传输的字符串再变回对象。 <?php //json序列化,json_encode(),json_decode() $book=array("book1"=>"web安全","book2"=>"主机安全","book3"=>"操作系统"); $json=json_encode($book); echo $json; ?> 输出结果: {"book1":"web安全","book2":"主机安全","book3":"操作系统"} 我们将数组序列化成json格式的字串的目的就是为了方便传输。我们可以看见,这里json格式来保存数据主要是使用键值对的形式。 2、对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了

windows下php安装redis扩展(详解版)

懵懂的女人 提交于 2019-12-30 00:49:35
亲身安装遇到的坑,百度的安装很多文章缺胳膊少腿,会发现按步骤安装完还是没有服务,下面把安装步骤与注意的地方写下了,用php5.6.27 +nts 举例 首先确定电脑已经安装好了redis并且能使用,没有安装的伙计: http://www.runoob.com/redis/redis-install.html 1.使phpinfo()函数查看PHP的版本信息,决定扩展文件版本(版本一定要对上,一定)。 2.需要php_redis.dll文件 php_redis-2.2.5-5.6-nts-vc11-x86.zip(一定要保证版本的正确性) (这里注意php版本、php是nts还是ts 、php是x64以及x86 *这些必须一致*) php_redis.dll 下载地址: https://pecl.php.net/package/redis 3.下载完成后: 双击打开php_redis-2.2.7-5.6-nts-vc11-x86.zip文件。其中的php_redis.dll是我们需要用到的 4.解压缩后,将php_redis.dll拷贝至php的ext目录下 5.修改php.ini在该文件中加入: extension=php_redis.dll 6.重启Apache后,使用phpinfo查看扩展是否成功安装 注意: 如果没有:请重新检查版本以及文件放置位置 redis扩展不需要安装