[攻防世界][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}