2

所以我有这个片段:

function compare1($s1, $s2)
{
    return $s1===$s2;
}

function compare2($s1, $s2)
{
    return !strcmp($s1, $s2);
}

function challenge($s1, $s2) //Objective: return TRUE
{
    return compare1($s1, $s2) ^ compare2($s1, $s2);
}

我的要求是为 $s1 和 $s2 变量提供/附加/分配值,以便最后一个函数返回 TRUE。

我已经尝试了几乎所有我能想到的东西,比如$s1='1' and $s2=1返回 TRUE:

var_dump(compare1('1', 1) ^ compare2('1', 1)); //输出:int 1

挑战的创建者告诉我,我不应该或者不能将整数值分配给变量,但问题是没有布尔变量起作用。这是我正在谈论的网站,您可以查看是否可以提出解决方案:http ://securitytraps.no-ip.org/challs/strcmp/

提前致谢 :)

4

2 回答 2

2

怎么样

$s1= null;
$s2 = "";

这不适用于提供的工具,但可以从命令行使用。

$s1 = "";
$s2 = false;
于 2013-07-03T22:16:20.113 回答
2

好的,所以第一个放弃是该站点是一个安全陷阱站点,因此他们希望向您展示 PHP 中的漏洞。因此,虽然其他答案是有效的,但它们在通过互联网传递时不起作用。

要解决这个挑战,您实际上必须修改页面上的 HTML 并将其中一个键转换为数组,例如:<input name="s2[]" value="s2" />然后提交表单。发生这种情况时,strcmp 会将 $_POST['s1'] (string) 与 $_POST['s2'] (array) 进行比较,导致 PHP 将 strcmp 评估为 true!

于 2013-07-03T22:37:24.093 回答