打开题目,就是一串字符串
d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
先拿去解密一下试试,结果得到了一个空密码。

这个时候就得考虑一下其它线索了,回看题目“备份是个好习惯”,和备份有关???那扫扫看

扫出来了一个 bak 文件。 小知识:备份文件一般都是.bak或者.swp
把备份文件下载下来,打开之后是网页的源码。
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";//包含 flag.php 文件
ini_set("display_errors", 0);//设置不返回错误信息
$str = strstr($_SERVER['REQUEST_URI'], '?');//判断URL里是否有问号,存在就返回给 $str
$str = substr($str,1);//获取 ? 后面的值
$str = str_replace('key','',$str);//将 $str 里面的 key 替换为空
parse_str($str);//解析字符串
echo md5($key1);//将 key1 进行 MD5 加密并输出
echo md5($key2);//将 key2 进行 MD5 加密并输出
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";//如果 key1 和 key2 的值不相等,但是两个的 MD5 相等,就返回 flag
}
?>
阅读源码,在这里贴上函数的用法
strstr()
substr()
str_replace()
parse_str()
到这里,就只剩下一个问题了,如果绕过两个不同的值有相同的 MD5?
1.我们都知道,MD5 加密是对字符串进行加密,那么如果我们传入的不是字符串,而是一个数组呢??? 它没法进行加密,返回空,结果不就相等了吗。
所以就可以构造这么一个 URL
http://123.206.87.240:8002/web16/index.php?kkeyey1[]=wsafe&kkeyey2[]=sjkfsfd
2.还有一个办法,众所周知,科学计数法是 *e***** ,那么要使两个数的值相等,就只能是 0e***** ,所以只要找到两个加密之后是 0e 开头的数字,就可以绕过限制了,在网上查了一下,找到了这么几个。
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
前面之所以传入的是 kkeyey1 而不是 key1 ,是为了绕过 str_replace 这个函数的限制,这个函数将 key 替换为空,剩下的拼接在一起正好就成了 key1.
网友评论