思路
1、根据提示,猜测此题的url下还有其他目录文件
2、用dirsearch扫一下,发现了http://123.206.87.240:8002/web16/index.php.bak
3、搜一下,发现下载了一个文件,用notepad++打开,是一段php源码
4、分析可知,页面里出现的是key1和key2的md5值,解密得undefined,这是因为没有传入他们的值,当key1不等于key2而他们的md5值相同时,返回flag
解题
1、源码里过滤了key,因此可以通过kkeyey来绕过
2、如何做到key1、key2的值不同而他们的MD5值相同?方法如下:
- 法一:由于md5()函数无法处理数组,如果传入数组,则会返回null,因此输入
http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=2得解 - 法二:利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
因此,也可以通过传入http://123.206.87.240:8002/web16/?kkeyey1=QNKCDZO&kkeyey2=240610708得解
新姿势
1、构造kkeyey绕过
2、利用md5无法处理数组而使其md5值相同
3、php函数:
-
parse_str()把查询字符串解析到变量中
例:parse_str(“name=Bill&age=60”); #$name=Bill $age=60 -
$_SERVER['REQUEST_URI']获取http://xxx后面的值,包括/
例:http://localhost/aaa/?p=222 则$_SERVER['REQUEST_URI'] 即获取/aaa/?p=222
参考 https://blog.csdn.net/wjciayf/article/details/52328601