XCTF新手题-PHP2 (NO.GFSJ0234)
打开靶机,启动虚拟环境
复制网址,用火狐浏览器打开
显示“你能登录这个网站吗?”,点击任何区域都没反应,这时按“F12”打开网页源码查看
同样也可以在命令行控制台下输入“curl -i 网址”
查看返回结果
火狐查看源码也并未发现什么,回顾题目提示,可以猜测是关于php的内容,利用御剑扫描后台可以看到index.php
文件
于是按照扫描结果的网址查看,结果还是只显示之前的内容
此时想到,phps文件实际上才是php的源代码文件,在通常情况下它被用来直接在Web浏览器中显示给用户(访问者)查看php代码的内容。因为用户无法直接通过Web浏览器看到php文件的内容,所以需要使用phps文件来代替。在火狐以及命令行控制台下查看:
主要代码如下:
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
代码解读:
传入id的值等于经过函数“$_GET[id] = urldecode($_GET[id])”
处理后仍然为“admin”的值,此函数为url解码函数即需要输入的id值为“admin”的URL16进制加密处理的值,使用URL在线加解密网站转换
直接在网址后添加转换结果“?=%61%64%6d%69%6e",还是不能得出flag
有可能是“%”也需要进行URL编码,在此将“%61%64%6d%69%6e”再次编码转换得到“%2561%2564%256d%2569%256e",传输之后得出flag
注意:
在代码发现存在if("admin"===$_GET[id])
和 if("admin"==$_GET[id])
与PHP语法相关,即“==”
,“==”
操作符只进行值的比较,不考虑变量的数据类型,有可能出现一些不符合预期的比较结果;而“===”
操作符是PHP中的全等操作符,它用于比较两个变量值和数据类型是否都相等。