做出这一题用的时间比较久,不过需要学习的东西还是很多的,
毕竟这一题涉及的内容比较多呀!
我今天整理出来是为了帮助那些需要帮助的人
永远爱你们的——新宝宝
天网管理系统分值:10
- 来源: zusheng
- 难度:易
- 参与人数:8993人
- Get Flag:2936人
- 答题人数:3060人
- 解题通过率:96%
天网你敢来挑战嘛
格式:ctf{ }
解题链接:http://ctf5.shiyanbar.com/10/web1/
解题思路:这一题需要很多知识点,做完这一题用了很久但是学习到了很多知识(这大概就是做题的原因)接下来就是整理题目,总结思路的时候。
打开链接就会发现:
看见这个并没有什么用呀:打开源代码:
这一句还是有用的:看到注释里面有一个提示,当传入的username值经md5加密后等于0,在某些情况下,PHP会把类数值数据(如含有数字的字符串等)转换成数值处理,== 运算符就是其中之一。在使用 == 运算符对两个字符串进行松散比较时,PHP会把类数值的字符串转换为数值进行比较,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。比如: '3' == '3ascasd'结果为true。因此只要找到一个字串加密后第一个字符为0即可,这里提供一篇博文关于这个方面的知识点:
https://www.cnblogs.com/lxz-1263030049/p/9112939.html
使用burp就会得到:user.php?fame=hjkleffifer
接着使用burp进行抓包找到这个网站的内容:
这个就需要了解一下php的知识了:http://www.111cn.net/phper/php-cy/62969.htm
写的详细并且很容易明白的。总结一下就是:
serialize() 对输入的数据进行序列化转换
unserialize() 恢复原先变量,还原已经序列化的对象。
实践序列化的格式:
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;}
就会得到答案:ctf{dwduwkhduw5465}