攻防世界 web进阶区 PHP2
解题
首先打开网址查看题目
题目并没有给出什么有用的提示,尝试了在源代码中寻找提示、抓包寻找提示都没有得到什么有用的信息。所以尝试网站中有什么文件可以利用。
发现常用的index.php并没有什么用,这里新出来一个index.phps文件需要记住,提示在这个文件里。
可以看到是一段不完全的php代码。在源代码中找到了注释掉的部分代码。
下面便可以整理代码进行代码审计。
可以看到在这段php代码中首先使用get方法获取了一个变量id。然后将这个变量与admin相比较,而很明显,这个比较的结果并不是我们想要的,所以我们接着往下看。在下面会将id以url的方式进行解密,然后在和admin及逆行比较。
我们要实现的是第二个比较,也就是要求id!=admin && ueldecode(id)==admin。
所以我们想办法来实现他们。
我们知道,首先在浏览器输入的url的时候会进行一次url解码,而题目的代码中又有一次url解码,所以是2次解码。
所以我们看到,首先第一次解码会解出%61dmin,第二次解码会解出admin所以第一次进行的比较是%61dmin!=admin第二次进行的比较是admin==admin,所以就可以得到我们的答案。
得到了我们的flag。这里需要注意的是get请求是在index.php中输入的,而不是在index.phps。
知识点
url编码/解码
在url编码中,数字和字母不变,空格变为+号,其他被编码成%加上他们assic码的16进制。使用函数urlencode()可以实现
在url解码中,数字和字母不变,+变为空格,其他依照ASSIC码进行解码。使用函数urldecode()可以实现