Manipulate/bypass php 中的 md5?
Manipulate/bypass md5 in php?
我的大学 (IT-Securiy) 有一个程序,您必须尝试通过操纵 php 或 html 代码来捕获 "flags"。我们只看到下面的代码,程序在他们的网站上运行。所以我们需要以某种方式操纵 url 或类似的东西......但我真的坚持在这里:
<?php
require_once '_flags.php';
highlight_file(__FILE__);
if (isset($_GET['pw']) &&
md5($_GET['pw']) == '0e13371337133713371337133713371337') {
echo $doyouphp3_flag;
}
我知道,我必须通过添加 ...
来提交密码
?pw=...
...在url的末尾,但我只是不知道...
有什么方法可以绕过 md5 功能吗,例如,因为我认为他们不希望我强行输入密码...
希望有人能帮助我或者至少给我一个提示。
马吕斯
你只需要观察 0e13371337133713371337133713371337
是一个数字,它不是一个有效的 md5 散列。
然后您需要知道涉及数字字符串的 php 松散比较(使用 ==
运算符)是如何工作的。您可以在 documentation:
上阅读
If you compare a number with a string or the comparison involves
numerical strings, then each string is converted to a number and the
comparison performed numerically.
所以,现在你知道了
var_dump('0' == '0e13371337133713371337133713371337'); // true
var_dump('0e123' == '0e13371337133713371337133713371337'); // true
var_dump('0e65165165165165' == '0e13371337133713371337133713371337'); // true
因此,您只需要找到一个也是数字的 md5 哈希。
240610708
的md5散列为0e462097431906509019562988736854
,"0e13371337133713371337133713371337" == "0e462097431906509019562988736854"
为真。所以你可以使用它。但 QNKCDZO
应该也能正常工作。
这里有什么教训? md5('240610708') == md5('QNKCDZO')
是 true
,这很危险,您应该使用 ===
而不是 ==
。
我的大学 (IT-Securiy) 有一个程序,您必须尝试通过操纵 php 或 html 代码来捕获 "flags"。我们只看到下面的代码,程序在他们的网站上运行。所以我们需要以某种方式操纵 url 或类似的东西......但我真的坚持在这里:
<?php
require_once '_flags.php';
highlight_file(__FILE__);
if (isset($_GET['pw']) &&
md5($_GET['pw']) == '0e13371337133713371337133713371337') {
echo $doyouphp3_flag;
}
我知道,我必须通过添加 ...
来提交密码?pw=...
...在url的末尾,但我只是不知道... 有什么方法可以绕过 md5 功能吗,例如,因为我认为他们不希望我强行输入密码...
希望有人能帮助我或者至少给我一个提示。
马吕斯
你只需要观察 0e13371337133713371337133713371337
是一个数字,它不是一个有效的 md5 散列。
然后您需要知道涉及数字字符串的 php 松散比较(使用 ==
运算符)是如何工作的。您可以在 documentation:
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.
所以,现在你知道了
var_dump('0' == '0e13371337133713371337133713371337'); // true
var_dump('0e123' == '0e13371337133713371337133713371337'); // true
var_dump('0e65165165165165' == '0e13371337133713371337133713371337'); // true
因此,您只需要找到一个也是数字的 md5 哈希。
240610708
的md5散列为0e462097431906509019562988736854
,"0e13371337133713371337133713371337" == "0e462097431906509019562988736854"
为真。所以你可以使用它。但 QNKCDZO
应该也能正常工作。
这里有什么教训? md5('240610708') == md5('QNKCDZO')
是 true
,这很危险,您应该使用 ===
而不是 ==
。