warmup
【题目】
【步骤】
-
首先查看页面源代码,发现有提示:source.php,进入该页面
-
得到一串php代码
-
在代码中,whitelist中包含两个php文件,提示我们进入hint.php,打开后得到flag文件的大概位置
-
在source.php中,有四个用来检测page变量:
-
若page为字符串,返回true;
-
若page存在whitelist中,返回true
-
若page截取后存在于whitelist中,返回true;
-
对page进行url解码并截取,若page存在于whitelist中,返回true;
第二个语句直接判断$page,不可用
第三个语句截取'?'前部分,由于?被后部分被解析为get方式提交的参数,也不可利用
第四个if语句中,先进行url解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可通过第四个if语句校验。('?'两次编码值为'%253f'),构造url:
http://399fe153-1f62-43d5-a67f-e645a0e7ac66.node3.buuoj.cn/source.php?file=source.php%253f../ffffllllaaaagggg<br><br>经过测试发现无返回值,这可能是因为我们不知道ffffllllaaaagggg文件存放的具体位置<br>所以依次增加../,最终成功拿到flag