首先博文参考和知识总结得很好,感谢:
[BJDCTF2020]Easy MD5_VVeaker的博客-CSDN博客
[BUUOJ记录] [BJDCTF2020]Easy MD5 - Ye'sBlog - 博客园
PHP弱类型hash比较缺陷 - Ye'sBlog - 博客园
响应里面已经告诉你这里含有一个对password 的md5加密 ,整个语句,是一个sql语句,当然 我们不知道password是多少,但是我们可以根据sql注入漏洞中的万能语句,也就是构造or 使该语句为TRUE;
那什么东西md5加密出来含有 or 1 此类万能语句呢,则需要写代码出来;
我不会写;wp里面用了ffifdyop
后端的SQL语句会变成:
select * from `admin` where password=''or'6<trash>'
这是一个TRUE语句;直接过了第一关;
第二关就是一个PHP弱比较
a b明文不同,但是md5值要相同,那只能使用0exxxxx...了
为什么呢,因为0e开头会被后台自动认为是科学计数,也就是0的次方,都是0;0==0;没毛病;
那什么样的值md5是以0e开头的呢,还是代码;
参考 PHP弱类型hash比较缺陷 - Ye'sBlog - 博客园,上面有链接;
里直接提供两个QNKCDZO和s214587387a,用GET传值直接过关
然后第三关是强比较;
md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。NULL===NULL,没毛病;
所以直接POST传入param1[]=1¶m2[]=2即可得到Flag: