在php中操纵/绕过md5?

时间:2016-11-01 13:58:30

标签: php md5

我的大学(IT-Securiy)有一个程序,您必须尝试捕获"标记"例如,通过操纵php或html代码。我们只看到下面的代码,程序运行在他们的网站上。所以我们需要以某种方式操纵网址或类似的东西...但我真的坚持这一点:

<?php
require_once '_flags.php';


highlight_file(__FILE__);


if (isset($_GET['pw']) &&
        md5($_GET['pw']) == '0e13371337133713371337133713371337') {
    echo $doyouphp3_flag;
}

我知道,我必须通过添加...

来提交密码
?pw=...

...在网址的末尾,但我只是不知道... 有没有办法绕过md5功能,例如,因为我不认为他们要我强制密码......

希望有人可以帮助我,或者至少给我一个提示。

的Marius

1 个答案:

答案 0 :(得分:1)

您只需要观察 <div *ngIf="this.router.url !== '/main/item:id'"> 是一个数字,它不是有效的md5哈希值。

然后你需要知道涉及数字字符串的php松散比较(使用0e13371337133713371337133713371337运算符)是如何工作的。您可以在documentation

上阅读
  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较用数字表示。

所以,现在你知道了

==

所以,你只需要找到一个同样是数字的md5哈希。

var_dump('0' == '0e13371337133713371337133713371337'); // true var_dump('0e123' == '0e13371337133713371337133713371337'); // true var_dump('0e65165165165165' == '0e13371337133713371337133713371337'); // true 的md5哈希为2406107080e462097431906509019562988736854为真。所以你可以使用它。但"0e13371337133713371337133713371337" == "0e462097431906509019562988736854"也应该可以正常使用。

这里有什么教训? QNKCDZO md5('240610708') == md5('QNKCDZO')true并且它很危险,您应该使用===代替==