0x00 直接进入状态
刚开始学习反序列化,此贴为记录初学的入门级反序列化的CTF题
此题为Bugku
的一道Web
题,考点是反序列化和PHP
的基本知识
该题的标题为:点
咋没反应login
进入靶场之后,可以看到Login
按钮是一个摆设,并没有提交功能
右键查看源代码,只能看到一个css
文件,点开看一下
第一行就是一个注释,提示我们在Url后面添加?19737
添加?19737之后,显示了源码
这里我们只看PHP代码
<?php
error_reporting(0);
$KEY='ctf.bugku.com';
include_once("flag.php");
$cookie = $_COOKIE['BUGKU'];
if(isset($_GET['19737'])){
show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY")
{
echo "$flag";
}
0x01 逐步分析
$KEY变量为
ctf.bugku.com
Include_once
引用了flag.php
文件(flag就在其中)
$cookie = $_COOKIE['BUGKU']
这里通过从COOKIE
获取参数,Cookie
的值为BUGKU
,最后赋值给cookie
下面进行判断,如果GET获取了19737参数的话就显示源代码,否则再判断,把$cookie
进行反序列化,并且要与$KEY
的值和类型相等,就可以输出flag
了。
0x02 思想
首先,我们已经知道了$KEY
的值,所以我们只需要将
ctf.bugku.com
进行序列化,然后把提交方式改成Cookie提交就可以了
代码为:
<?php
$key = 'ctf.bugku.com';
$a = serialize($key);
echo $a;
?>
serialize()函数是将对象序列化成字符
unserialize()函数是字符反序列化成对象
得到反序列化结果
s:13:"ctf.buku.com
我们使用Burp
抓包,修改cookie
值,即可看到flag
这里有个小坑
这里我们提交了还是没有显示flag
,是因为下面使用的是elseif
,因为我们请求的时候加上了?19737
所以他不会往下进行判断,我们把?19737
去掉就可以了
这里注意Cookie的提交格式为:
Cookie:BUGKU=s:13:”ctf.buku.com”;