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

 

posted @ 2020-09-03 17:27  kakeruj  阅读(194)  评论(0)    收藏  举报