[攻防世界][Web]PHP2

打开靶机对应的url

就一行字

Can you anthenticate to this website?
第一感觉就需要做目录文件扫描
使用御剑和dirsearch进行扫描,发现一个文件 index.phps
知识点:
phps 是php标准中用来表示可以查看的php源文件的约定,不会被服务器执行
直接展示代码
访问index.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>";
}
?>

Can you anthenticate to this website?
这里需要进行代码审计,从这里可以看出,需要传入id的值不能是admin,同时urldecode以后又必须是admin才有戏
知识点:
我们可以对参数进行urlencode的操作,urlencode会对所有非ascii码所表示的字符进行编码,编码成ascii码字符串组合来代替

其中 a 对应的就是 %61

参考: https://www.w3school.com.cn/tags/html_ref_urlencode.asp
那么我们只要传入%61dmin 经过 urldecode以后 就会变为 admin, 从而通过检查
这里还有一个知识点,就是apache服务器,在接受到请求后会默认对请求参数做一次urldecode, 也就是说如果我们传入的是%61dmin ,进入代码块时就已经被解析为admin而导致显示 not allowed了
所以这里需要对%61再做一次urlendcode 得到%2561
访问url
http://61.147.171.105:63925/index.php?id=%2561dmin

boom 得到flag: cyberpeace{d30a3860b94b12cc3d96717cbbb6fabb}

posted @ 2022-12-17 20:46  明月照江江  阅读(47)  评论(0编辑  收藏  举报