首先我们先将环境下载下来。
进入之后 ,发现一句话
Can you anthenticate to this website?大概就是在说,你能告诉我这个网站吗?
嘶,先F12一手吧。啥也没有。然后扫描了一下目录。有一个index.php,然后在地址栏里输了一下,发现什么也没有。
这就很郁闷了。然后我在index.php后加了个s,index.phps。然后就出效果了。
这或许是源码泄露了。然后查看一手源码。
这是php代码。那我来吧代码扔下来吧
<?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?
又要代码审计了。
在这里我们先说一下===与==的区别
===是比较值和数据类型
==它是比较值,不比较数据类型
例如:$a='123' $b=123
$a===$b //False
$a==$b //True
里面有一个urldecode,意思就是用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符
要求admin不能等于get传过来的值,又要求在get传过来的值经过urldecode后等于admin
而且浏览器会对非ASCII字符自动进行一次urldecode,所以我们还得编码两次。
所以pyload就为:
http://220.249.52.133:51297/index.php?id=%2561dmin
%2561解码就是%61 //第一次解码
%61解码就为a //第二次解码
这样即可拿到flag
Key: cyberpeace{292e9413104ba4842802367e5e9da7aa}
最后再说一下index.phps吧
phps其实就是php Source,根据意思也可以知道是php源代码。
所以phps就是php的源代码文件。通常用来给用户查看php代码的。因为用户无法直接在Web浏览器查看php文件里的内容。然后需要用到phps文件来代替了。