坐标:攻防世界
https://adworld.xctf.org.cn/challenges/details?hash=cfde0863-d43b-40f2-94c9-fadcb1fea968_2&task_category_id=3
一开始提示我们去认证这个网页:
因为一般网页都应该设有网页头部,所以我就试了试index.html和index.php,结果都不行 。
然后通过后台扫描工具发现除了index.php文件还有一个index.phps文件,了解到index.phps文件是记录php的源代码文件后访问index.phps得到代码如下表:
发现代码不完善,打开网页源码发现完整代码:
下面就是最重要的代码分析的环节(因为博主是边做题边学php所以这对博主很困难的说)
$_GET[id]表示我们要输入一个数给id,且根据"admin"===$_GET[id]知道我们赋的值会传递给admin,但根据3,4行如果我们使等号成立,那么代码不会往后执行,我们就无法得到key。
所以在第一大部分我们不能是admin=id
$_GET[id] = urldecode($_GET[id]);这个代码的意思使对id进行一次url编码,其中urldecode函数就是进行url编码的意思。
而我们都知道在访问网页时,网页会将我们输入的非法字符进行一次url编码,所以这个代码整体总共会进行两次url编码的过程。
在第二大段,代码要求我们经过两次url编码的admin=id则可以得到key。
总结
其实就是是我们输入的值进行两次url编码后变成admin。
知道原理后少做思考就可以知道id的值应该为a%2564min(不唯一)
输入后获得了flag