0
点赞
收藏
分享

微信扫一扫

记一次初学PHP反序列化

刚开始学习反序列化,此贴为记录初学的入门级反序列化的CTF题

此题为​Bugku​的一道​Web​题,考点是反序列化和​PHP​的基本知识
记一次初学PHP反序列化_php
该题的标题为:点​login​咋没反应
记一次初学PHP反序列化_反序列化_02
进入靶场之后,可以看到​Login​按钮是一个摆设,并没有提交功能
记一次初学PHP反序列化_php_03记一次初学PHP反序列化_php_04
右键查看源代码,只能看到一个​css​文件,点开看一下
第一行就是一个注释,提示我们在Url后面添加?19737
添加?19737之后,显示了源码
这里我们只看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";
}

$KEY变量为

ctf.bugku.com

Include_once​引用了​flag.php​文件(flag就在其中)

$cookie = $_COOKIE['BUGKU']

这里通过从​COOKIE​获取参数,​Cookie​的值为​BUGKU​,最后赋值给​cookie​下面进行判断,如果GET获取了19737参数的话就显示源代码,否则再判断,把​$cookie​进行反序列化,并且要与​$KEY​的值和类型相等,就可以输出​flag​了。

首先,我们已经知道了​$KEY​的值,所以我们只需要将

ctf.bugku.com

进行序列化,然后把提交方式改成Cookie提交就可以了
记一次初学PHP反序列化_php_05记一次初学PHP反序列化_反序列化_06代码为:

    $key = 'ctf.bugku.com';  
$a = serialize($key);
echo $a;
?>

serialize()函数是将对象序列化成字符
unserialize()函数是字符反序列化成对象

得到反序列化结果

s:13:"ctf.buku.com

我们使用​Burp​抓包,修改​cookie​值,即可看到​flag

这里有个小坑

记一次初学PHP反序列化_反序列化_07记一次初学PHP反序列化_网络安全_08
这里我们提交了还是没有显示​flag​,是因为下面使用的是​elseif​,因为我们请求的时候加上了​?19737​所以他不会往下进行判断,我们把​?19737​去掉就可以了
记一次初学PHP反序列化_网络安全_09
这里注意Cookie的提交格式为:

Cookie:BUGKU=s:13:”ctf.buku.com”;

记一次初学PHP反序列化_网络安全_10

举报

相关推荐

0 条评论