4.天网管理系统

CTF-Web4(涉及反序列化)

CTF-Web4(涉及反序列化)



这道题还是看源码:

CTF-Web4(涉及反序列化)

看到注释里面有一个提示,当传入的username值经md5加密后等于0,就会返回某样东西,多半就是flag或者源码

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

== :  比较运算符号  不会检查条件式的表达式的类型

===:  恒等计算符 , 同时检查表达式的值与类型。(会检查表达式类型,如bool)

 

  用双等号进行比较时,如果等号左右两边有数字类型的值,刚会把另一个值转化为数字,然后进行比较。如果是纯字符串或者NULL时,会转化为0进行比较。同样,大小于号也和等号一样,比较时可能出现不正确的结果。

  因此只要找到一个字串MD5加密后第一个字符为0即可,总体结构就是e+数字,这里提供几个:240610708,aabg7XSs,aabC9RqS,s878926199a、QNKCDZ

CTF-Web4(涉及反序列化)

CTF-Web4(涉及反序列化)

即:

CTF-Web4(涉及反序列化)

知识拓展:

PHP序列化与反序列化
serialize() 对输入的数据进行序列化转换
unserialize() 恢复原先变量,还原已经序列化的对象。

(直白点说所谓的序列化就是类似我们打单机游戏时的存档,把我们当前的数据经过序列化写入到文件中,然后保存在硬盘中,当下一次玩时直接通过反序列化读取我们的存档文件,为什么要反序列化的原因在于,序列化写入文件的数据我们是看不懂的,计算机也需要反序列化才能获取数据)

上面返回的信息的意思就是将接收到的password经过反序列化还原成数组,其中user和pass都要等于后台的某个值,然后会返回一个flag,但关键是我们并不知道后台的这两个值是什么,于是这里考察的就是php的弱类型了,bool类型的true跟任意字符串都可以弱类型相等,因此我们可以构造bool类型的序列化数据:(a代表array,s代表string,b代表bool,而数字代表个数/长度)

 构造password值为: a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

这句话的意思是password是一个长度为2的数组(a指数组,s指字符string,数字是长度),他的一个元素是user,长度为4,bool值为1,另一个元素是pass,长度为4,bool值为1

 在密码栏中提交构造的值,即可获取flag: ctf{dwduwkhduw5465}

CTF-Web4(涉及反序列化)

 

相关文章: