Nssctf Web Easy_md5

字数: 287

网页显示了原始 php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 <?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!';
}
?>

经典一个 GET 方法一个 POST 方法。

1
2
if ($name != $password && md5($name) == md5($password)){
    echo $flag;

需要在保证它们不相同的情况下,它们的 md5() 处理后的值可以通过弱类型比较==

md5() 计算字符串的 md5 哈希值,并返回其哈希值。
对于 php7 及之前版本,可以用 0e 处理完全识别为科学记数法的数字。
当两边都是字符串例如:0e462, 0e830 php 就会把两个字符串内容都看作数字,将其转换为数字再比较变成了 0。

比如:
name = 240610708
password=QNKCDZO

还有一种方法是使用数组绕过。 md5 函数无法处理数组参数,传入一个数字会返回 NULL。
可以使用:

1
name[]=1 password[]=2

上面用 hackbar 传参即可。