解题步骤:

打开靶场地址,显示如下:

img

查看网页源代码,没有发现特殊内容,扔进御剑去扫描,也没扫出有用的信息(字典不够强大)。上网搜索一番,发现本题的解题思路跟题目有关,题目是PHP2,这里的PHP2不是指的1997年发行PHP2.0版本,而是隐含着解题的关键信息:2在英语中是复数,跟在名词后面一般要加s,所以这里的PHP2就隐含着PHPS,phps的信息如下:

img

说简单点就相当于存储着php源码的txt文件,phps只在人为设置后存在,index.phps就表示index.php的源码,所以当我们在url中加上index.phps,再次访问就会看到index.php的源码:

img

需要注意的是phps在Firefox浏览器中无法正常显示,可以使用Chrome浏览器。接下来对源码进行分析:

<?php
if("admin"===$_GET[id]) {    //此处的作用是通过GET方式传入的id参数如果等于"admin",则返回not allowed!,这里只验证admin这个字符串,可以用其他方式绕过
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]); //这里的将传入的id参数进行url解码,浏览器解码一次,这里解码一次,相当于一共要进行两次url解码
if($_GET[id] == "admin")  //如果解码后的id参数等于"admin"这个字符串,则输出key即flag。
{
  echo "<p>Access granted!</p>";
  echo "<p>Key: xxxxxxx </p>";
}
?>

Can you anthenticate to this website?

分析完源码之后我们就要开始构造payload,源码要求我们让传入的id参数在经过两次url解码之后等于admin这个字符串,所以反过来想,我们在构造payload时只需对admin这个字符串进行两次url编码即可。

img

img

最后得到字符串%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45,构造payload为?id=%25%36%31%25%36%34%25%36%44%25%36%39%25%36%45,在浏览器中打开,得到flag:

img

xctf{a6b0edc17473ba4cc0f0f83ccb6964d0}

最后修改:2022 年 07 月 28 日
如果觉得我的文章对你有用,请随意赞赏