php 中的类型杂耍:绕过与非空数组的比较

Type-juggling in php: bypass a comparison with non-empty array

提问人:pittgi 提问时间:11/3/2023 更新时间:11/3/2023 访问量:97

问:

在我的 web-security-class 的 CTF 上,我能够在服务器上找到以下 php 代码

<?php 
        $user = array("user" => "admin");
        $secret = random_bytes(20);
          if (isset($_GET["usr"]) and isset($_GET["pwd"]))  {
            if ($_GET["usr"] == $user) {
              if (! strcmp($_GET["pwd"], $secret)) {
                echo var_dump(scandir($_GET["path"][1]));
              } else {
                echo "Wrong pwd!";
              }
            } else {
              echo "You are so close!";
            }
          }
?>

我必须发送什么有效负载才能绕过比较?$_GET["usr"] == $user

我尝试将 NULL 作为“%00”、“0”和“1”发送,因为我想弱 == 比较可能会打开一些类型杂耍的可能性,但它没有用。

php ctf 数组比较

评论

0赞 CBroe 11/3/2023
madirish.net/401:“如您所见,比较运算符对空字节 (\0) 没有任何问题” - 字符串中的空字节不再跳闸。==
0赞 M. Eriksson 11/3/2023
我不得不说,这个例子没有多大意义。为什么要一开始就与数组进行比较?我知道这是一个练习,但测试不可能的代码并不是特别有用,恕我直言。$_GET['usr']

答:

4赞 AymDev 11/3/2023 #1

变量是一个数组。GET 数据可以包含数组,您可以使用正确的语法来“绕过”条件:$user

?usr[user]=admin

我不认为你可以在这里使用类型杂耍。