NSS平台链接:NSSCTF | 在线CTF平台
题目:
<?php
highlight_file(__FILE__);
include 'flag2.php';
if (isset($_GET['name']) && isset($_POST['password'])){
$name = $_GET['name'];
$password = $_POST['password'];
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
else {
echo "wrong!";
}
}
else {
echo 'wrong!';
}
?>
这道题是一道php代码审计题,读代码我们可以知道我们需要满足以下条件:
1.get传一个name参数,post传一个password参数
2.get传的参数值不能和post传的参数值一样
3.name的md5参数值要和password的md5参数值弱相等
我们先来了解下强比较和弱比较,这里借鉴某位大佬的博客:php比较绕过(强比较“===”/弱比较“==“)-CSDN博客
了解了强比较和弱比较后,我们再来了解一下MD5的强弱类型比较,这里依旧借鉴某位大佬的博客:MD5绕过(强弱类型比较)_md5弱比较_陈wonton的博客-CSDN博客
ok,我们了解到一些字符串md5值以0e开头:
QNKCDZO
240610708
s878926199a
s155964671a
s21587387a
很明显这几个值本身是不一样的,但是进行md5弱比较的时候就相等了,满足题目要求,于是我们任从其中选两个,一个作为name一个作为 password
使用hackbar进行传参:
成功打印出flag:
总结:本题主要考查我们get,post传参以及md5弱比较绕过