今天做了一道关于序列化的题目,收益颇多,愉快地开始。
![](https://img2018.cnblogs.com/blog/990054/201901/990054-20190120165917648-1385756353.png)
首先,提示了“hint”,所以尝试加入hint参数。这儿没啥好说的,最后hint=1显示了重点内容。如下图所示
![](https://img2018.cnblogs.com/blog/990054/201901/990054-20190120165933747-149452166.png)
没错,是金灿灿的网页代码,开心,仔细分析。
代码分析:
<?php
error_reporting(0); //不提示警告信息
include_once("flag.php");
$cookie = $_COOKIE['ISecer']; //获取cookie“ISecer”信息存至$cookie
if(isset($_GET['hint'])){ //一条件表示hint值不为空则显示网页源代码
show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY") //二条件表示$cookie的反序列化值为$KEY则返回flag。这是重点咩
{
echo "$flag";
}
else { //三条件表示返回源代码
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet" href="admin.css" type="text/css">
</head>
<body>
<br>
<div class="container" align="center">
<form method="POST" action="#">
<p><input name="user" type="text" placeholder="Username"></p>
<p><input name="password" type="password" placeholder="Password"></p>
<p><input value="Login" type="button"/></p>
</form>
</div>
</body>
</html>
<?php
} //最后,为$KEY赋值 这儿只是起到了迷惑作用,它不会对前面的条件判断有任何影响,前面的$KEY值为空666
$KEY='ISecer:www.isecer.com';
?>
愉快地分析完代码,指导关键在二条件。详细分析,$KEY值为空,则$cookie应为空字符串的序列化值,即COOKIE中的ISecer应为空字符串的序列化值。
分析到这里,我们明白,是时候在包中的cookie添加此字段值啦-。-
方法如下:
在百度到的PHP序列化工具中输入 "",生成序列化后的值 s:0:""; 。如下图所示
![](https://img2018.cnblogs.com/blog/990054/201901/990054-20190120170017147-99997135.png)
输入原网址http://120.24.86.145:8002/flagphp/ ,使用burpsuite拦截数据包,在COOKIE中添加此字段信息。如下图所示
![](https://img2018.cnblogs.com/blog/990054/201901/990054-20190120170116085-913781779.png)
添加后在【Raw】中可见结果,这也指明了在【Raw】中直接添加cookie的方法-。-如下图所示
![](https://img2018.cnblogs.com/blog/990054/201901/990054-20190120170122570-1969188588.png)
好嘞,愉快地点击【Go】。
结果出来了,开心-。-如下图所示
![](https://img2018.cnblogs.com/blog/990054/201901/990054-20190120170153729-54336266.png)
我学会了PHP序列化和反序列化,并且第一次亲手添加了Cookie,嗯,很棒-。-
PHP序列化与反序列化:所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。