XCTF-Web新手题-PHP2 (NO.GFSJ0234)

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中的全等操作符,它用于比较两个变量值和数据类型是否都相等。

参考:
XCTF攻防世界 PHP2
CTF_EXP02:XCTF PHP2

猜你喜欢

转载自blog.csdn.net/MANCXUARY/article/details/132199781