攻防世界-PHP2题

攻防世界-PHP2题

打开靶场网址后发现页面只有一句话:

image-20211113102915425

该语句的意思为:你能验证这个网站吗?

常规操作,进行抓包,发现什么也没有抓到,进入index.php网址发现与当前界面相同,于是用御剑进行网址目录扫描:

image-20211113103141889

扫描后可以发现存在网址/index.phps(如果没有扫描到,则说明你需要在字典中加入这个网址)

进入网址可看到页面的源代码,将源代码复制下来进行分析:

image-20211113103245895

image-20211113103305595

进行代码审计,可以发现页面存在传入参数id,并且,如果id的值为admin,则输出not allowed,且直接结束:

if("admin"===$_GET[id]) {
    
    
  echo("<p>not allowed!</p>");
  exit();
}

但是,后续代码又显示,将id进行url解码之后,id的值必须是admin才能够正确进入,并输出key:

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
    
    
  echo "<p>Access granted!</p>";
  echo "<p>Key: xxxxxxx </p>";
}

所以,id的输入值应该为admin,但是admin必须进行url编码,由于浏览器会进行一次url解码,所以如果想要服务器端进行一次url解码,则必须对admin进行两次url编码:

image-20211113103715811

再将编码后的值作为id的参数进行传入:

/?id=%2561%2564%256d%2569%256e

image-20211113103814616

此时,成功查出flag值!

猜你喜欢

转载自blog.csdn.net/weixin_46784800/article/details/121301200