Web16
题目
看了看题目叫别忘了备份果断用御剑扫描试试
果然有发现
发现网站下有一个bak文件
下载打开发现是一串源码
大概的意思
strstr看符号第一次出现的位置
substr是截取?后面的值
str replace是把?后面所有有关key的值全部替换成空格
parse str将查询字符串解析到变量
我们通过kekeyy绕过第一个过滤 然后用到md5这个函数无法处理数组问题 变成key1[] 进行绕过 这样两个key返回的都是null
看其他博客有人提到科学计数法的绕过方式 放入开头是0e的md5就可以 相当于0*10的n次方 这个是==比较漏洞
所以我将用get传值
kekeyy1=QNKCDZO
kekeyy2=s878926199a
这一题需要构造的是
key1==key2
构造的要求是md5值相同,但未计算md5的值不同的绕过。
介绍一批md5开头是0e的字符串,
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
构造payload:?kkeyey1=QNKCDZO&kkeyey2=240610708或者其他构造也可以 比如:
?kekeyy1=QNKCDZO&kekeyy2=s878926199a
最后传值得到flag
我会想他们md5值为什么就一样了
0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,
0的多少次方还是0。md5(‘240610708’) == md5(‘QNKCDZO’)成功绕过!
这样我就似乎懂了