WEB_备份是个好习惯

题目链接:http://123.206.87.240:8002/web16/

题解:

打开题目链接,得到一串东西

题目标题为”备份是个好习惯“,故考虑修改url为index.php.bak(bak为网站的备份文件),修改后自动得到一个备份文件

http://123.206.87.240:8002/web16/index.php.bak

打开此文件,是一段PHP源代码

可以看出题目需要我们传入两个值,分别为key1和key2,且key1和key2的值不能相同但md5值相同,通过传入值不相同的数组可以实现。但是有一点需要注意,语句str_replace(‘key’,’ ',$str)会将key替换为空格,这一点我们可以通过双写key对其进行绕过,最终的payload:?kekeyy1[]=1&kekeyy2[]=2

有两种方法绕过:

md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

payload: ?kkeyey1[]=1&kkeyey2[]=2
利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

下列的字符串的MD5值都是0e开头的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

最后看看d41d8cd98f00b204e9800998ecf8427e是什么意思,拿到MD5解密试一下,结果为NULL,也就是说这是NULL的MD5值,因为默认是没有传入key1和key2的,这两个值也就是null.

payload:  ?kkeyey1=QNKCDZO&kkeyey2=s878926199a

d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e的MD5解密为空【MD5在线解密链接:https://www.cmd5.com/

综上所述,两种方法可行:

 

或者:

即flag为:Bugku{OH_YOU_FIND_MY_MOMY}

猜你喜欢

转载自www.cnblogs.com/Gzu_zb/p/10359583.html