实验吧-Web-天网管理系统

实验吧-Web-天网管理系统_第1张图片

点开解题链接,会出现一个如下页面:

实验吧-Web-天网管理系统_第2张图片

乍一看,真好!用户名,密码都给填上了,可是。。。。点击“登入系统”。。。咦~没反应!没反应!!!好吧,F12查看网页源代码

实验吧-Web-天网管理系统_第3张图片

发现问题了。。。

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

在某些情况下,PHP会把类数值数据(如含有数字的字符串等)转换成数值处理,== 运算符就是其中之一。在使用 == 运算符对两个字符串进行松散比较时,PHP会把类数值的字符串转换为数值进行比较,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。

因此只要找到一个字串加密后第一个字符为0即可,这里提供几个:240610708,aabg7XSs,aabC9RqS 

实验吧-Web-天网管理系统_第4张图片

提交之后,网页会返回一个链接,对!没错!!你才完成了第一步!!将这个链接打开

实验吧-Web-天网管理系统_第5张图片

哈哈哈哈哈哈哈哈,没错,你又发现了新世界,但是这段注释确实让人看着脑壳疼,什么意思呢?

代码意思是把post提交的password值经过"反序列化"得到一个数组,要求数组里的user和pass都等于某个值时就打印flag。

别忘了还有一个提示: "伟大的科学家php方言道:成也布尔,败也布尔" ,bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。(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;}

实验吧-Web-天网管理系统_第6张图片

没错!,就是它了!

终于做出来了。。。。

你可能感兴趣的:(CTF)