当前位置: 代码迷 >> 综合 >> md5()的用法与PHP弱比较,强比较md5()数组绕过之[BJDCTF2020]Easy MD51
  详细解决方案

md5()的用法与PHP弱比较,强比较md5()数组绕过之[BJDCTF2020]Easy MD51

热度:83   发布时间:2023-12-03 03:20:09.0

首先博文参考和知识总结得很好,感谢:

[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&param2[]=2即可得到Flag: