2020强网杯 强网先锋 funhash wp
题:
解题思路:
第一关:
变量hash1的值要和md4加密后的值相等 了解php弱类型比较原则 构造 hash1是0e开头的 md4加密后的hash1也是0e开头的即可
编写php代码如下:
得到0e1440680632加密后的结果为00e74535336080361850230703949592 第一关通过~
第二关:
利用md5函数处理不了数组的原理,即可通过第二关 即hash2[]=xx&hash3[]=yy
第三关:
SQL语句为SELECT * FROM flag WHERE password = ' md5($hash4) '
即只要让md5($hash4)的值为: ' or '1 这样 SQL语句就变为 SELECT * FROM flag WHERE password = ' ' or '1xxx' 即执行or 后面的语句 ,
如果是or '1aaa'会进行类型转换,转换成int类型的1,即or '1aaa' 相当于or 1,1就相当于true 但是 or 'a1'就相当于or 0 因为他不是数字开头 0就相当于false
知道了这个之后就要找一个值 让他的md5加密结果为这个 无意间翻盘一篇博客,里面就写到了这个 该值为 ffifdyop
md5('ffifdyop')= 276f722736c95d99e921722cf9ed621c
因为设置md5设置第二个参数是true,那么会自动截取前16个字节的数据,即为276f722736c95d99 十六个字节转换成字符串就是%27%6f%72%27%36%c9%5d%99 解码得到
这就是我们想要的结果。
参考博客:https://www.cnblogs.com/piaomiaohongchen/p/10659359.html
所以最后的payload为:?hash1=0e1440680632&hash2[]=1&hash3[]=2&hash4=ffifdyop 即可得到flag