3.3 巧用Cain破解MySQL数据库密码

MySQL数据库用户的密码与其他数据库用户的密码一样,在应用系统代码中都是以明文形式出现的,在获取文件读取权限后即可直接从数据库连接文件中读取。例如,ASP代码中的conn.asp数据库连接文件中一般都包含数据库类型、物理位置、用户名和密码等信息,而在MySQL中,即使获取了某一个用户的数据库用户(root用户除外)的密码,也只能操作某一个用户的数据库中的数据。在实际攻防过程中,在获取WebShell的情况下,可以直接下载MySQL数据库中的user.myd文件,该文件中保存的是MySQL数据库中所有用户对应的数据库密码,只要能够破解这些密码,就可以正大光明地操作这些数据了。虽然网上有很多修改MySQL数据库用户密码的方法,但大都不可取,因为修改用户密码的事情很容易被人发现!

研究MySQL数据库的加解密方式,在网络攻防过程中具有重要的意义。设想一下:一旦获取了网站的部分权限,如果能够获取MySQL中保存的用户数据,那么解密后即可通过正常途径访问数据库,一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。目前关于破解MySQL方面的研究还不是很多,本节算是抛砖引玉,虽然效果不是特别好,但也算是对破解MySQL数据库用户密码的一种探讨和尝试。

3.3.1 MySQL的加密方式

MySQL数据库的认证密码有两种方式,MySQL 4.1之前是MySQL323加密,MySQL 4.1及之后的版本都是MySQLSHA1加密。MySQL数据库自带Old_Password(str)和Password(str)函数,它们均可以在MySQL数据库里进行查询,前者是MySQL323加密,后者是MySQLSHA1加密。

1.以MySQL323方式加密

以MySQL323方式加密,示例如下。

SELECT Old_Password('bbs.antian365.com');  

查询结果如下。

MYSQL323 = 10c886615b135b38 

2.以MySQLSHA1方式加密

以MySQLSHA1方式加密,示例如下。

SELECT Password('bbs.antian365.com');  

查询结果如下。

MYSQLSHA1 = *A2EBAE36132928537ADA8E6D1F7C5C5886713CC2 

执行结果如图3-13所示,MYSQL323加密生成的是16位字符串,而MySQLSHA1加密生成的是41位字符串,其中“*”不参加实际的密码运算。通过观察发现,很多用户都携带了“*”,在实际破解过程中需要去掉“*”,也就是说,MySQLSHA1加密密码的实际位数是40位。

0133-1

图3-13 在MySQL数据库中查询同一密码的不同SHA值

3.3.2 MySQL数据库文件结构

MySQL数据库的文件结构情况如下。

1.MySQL数据库文件类型

MySQL数据库文件有FRM、MYD和MYI共3种格式。FRM是描述表结构的文件。MYD是表的数据文件。MYI是表数据文件中任何索引的数据树,一般单独存储在一个文件夹中,默认路径为C:\Program Files\MySQL\MySQL Server 5.0\data。

2.MySQL数据库用户密码文件

在MySQL数据库中,所有设置默认都保存在C:\Program Files\MySQL\MySQL Server 5.0\data\MySQL目录下,也就是安装程序的data目录下。如图3-14所示,与用户有关的文件一共有3个,分别是user.frm、user.MYD和user.MYI。MySQL数据库的用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。

0133-2

图3-14 MySQL数据库用户密码文件

3.3.3 破解MySQL数据库密码

01 获取MySQL数据库用户密码加密字符串

使用UltraEdit-32编辑器直接打开user.MYD文件,使用二进制模式查看。如图3-15所示,在root用户后面是一串字符串,选中这些字符串并将其复制到“记事本”中,这些字符串即为用户加密值,本例为“506D1427F6F61696B4501445C90624897266DAE3”。

0134-1

图3-15 获取加密的字符串

注意

(1)root后面的“*”不要复制到字符串中。

(2)有些情况下,需要往后面看看,否则得到的不是完整的MYSQLSHA1密码。总之,密码位数是40位。

02 将MySQL用户密码字符串加入Cain破解列表

我们使用Cain & Abel破解MySQL数据库用户密码。Cain & Abel是一个可以破解屏保口令、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令,支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database口令解码、Cisco PIX Firewall口令解码、Cisco MD5解码、NTLM Session Security口令解码、IKE Aggressive Mode Pre-Shared Keys口令解码、Dialup口令解码、远程桌面口令解码等的综合工具,还可以实现远程破解、挂字典及暴力破解,其Sniffer功能极其强大,几乎可以明文捕获一切账号口令,包括FTP、HTTP、IMAP、POP3、SMB、TELNET、VNC、TDS、SMTP、MSKERB5-PREAUTH、MSN、RADIUS-KEYS、RADIUS-USERS、ICQ、IKE Aggressive Mode Pre-Shared Keys Authentications。

Cain & Abel目前的最新版本是4.9.30,下载地址为http://www.newhua.com/soft/ 53494.htm。下载完毕,安装并运行。

在Cain & Abel主界面单击“Cracker”标签,然后将用户密码的加密字符串“506D1427F6F61696B4501445C90624897266DAE3”加入MySQL Hashes破解列表中,如图3-16所示。

0135-1

图3-16 使用Cain破解MySQL密码

在快捷菜单中单击“Add to list”选项,将字符串复制到“Hash”输入框中,在“Username”输入框中可以输入任意内容,如图3-17所示。

0135-2

图3-17 在MD5Crack4中验证MD5值

03 使用字典进行破解

如图3-18所示,选中刚才添加的需要破解的字符串,然后选择“Dictionary Attack”(字典破解)选项,在弹出的菜单中选择“MySQL SHA1 Hashes”方式进行破解。该方式针对的是MySQL 4.1及后续版本,对于MySQL 4.1以前的版本,应选择“MySQL v3.23 Hashes”选项。

0136-1

图3-18 选择破解方式

选择“Dictionary Attack”(字典破解)选项后,会出现一个窗口,主要用于选择字典,如图3-19所示,在“Dictionary”设置区下方单击右键,可以添加1个或者多个字典文件。字典选择完毕后,可以在“Options”(选项)设置区中进行选择,然后单击“Start”按钮进行破解。

0136-2

图3-19 设置字典破解

说明

在“Options”设置区中一共有8种方式,具体如下。

(1)字符串首字母大写。

(2)字符串反转。

(3)双倍字符串。

(4)字符串全部小写。

(5)字符串全部大写。

(6)在字符串中加入数字。

(7)在每个字符串中进行大写轮换。

(8)在字符串中加入2个数字。

破解成功后,Cain会给出一些提示信息,如下所示。

Plaintext of user <none> is databasepassword 
Attack stopped! 
1 of 1 hashes cracked 

以上信息表明加密的密码是“databasepassword”。

回到Cain破解主窗口,破解的密码值会自动加入“Password”列中,如图3-20所示。

0137-1

图3-20 破解成功

3.3.4 破解探讨

下面我们探讨与本次破解相关的话题。

1.字典破解与字典强度有关

依次单击“开始”→“程序”→“MySQL”→“MySQL Server 5.0”→“MySQL Command Line Client”选项,打开“MySQL Command Line Client”窗口,输入密码后,输入以下代码设置一个新的密码。

Use MYSQL 
update user set password=password("1977-05-05") where user="root"; 
flush privileges; 

本例中将原来的密码修改为“1977-05-05”,其结果如图3-21所示。

0138-1

图3-21 修改MySQL用户密码

再次用UltraEdit-32打开“C:\Program Files\MySQL\MySQL Server 5.0\data\MYSQL\ user.MYD”,获取新的密码字符串“B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12”,重新选择一个字典文件,本例选择生成的生日字典,如图3-22和图3-23所示,仅选择小写字符串进行破解,很快就获取了破解结果。

0138-2

图3-22 再次破解MySQL密码

0138-3

图3-23 修改MySQL密码后再次破解MySQL密码

2.使用彩虹表进行破解

Cain提供了彩虹表破解MySQL的方式,在破解方式中选择“Cryptanalysis Attack”→“MySQL SHA1 Hashes via RainbowTables”选项即可,如图3-24和图3-25所示。

0139-1

图3-24 使用彩虹表破解方式

0139-2

图3-25 使用彩虹表进行破解

在实际测试过程中,由于网络上提供的SHA彩虹表是RTI格式的,而Cain中使用的是RT格式的。笔者将下载的所有彩虹表中文件后缀由“RTI”修改为“RT”,然后进行破解,提示破解不成功,其原因应该是彩虹表的格式不一样,Cain只承认它自己提供的彩虹表。

3.Hash计算器

Cain提供了各种Hashes计算。在主界面中单击计算机图标按钮,弹出Hash计算器,在“Text to hash”输入框中输入需要转换的原始值,如“12345678”,单击“Calculate”按钮进行计算,如图3-26所示,可以看到14种Hash值。

0140-1

图3-26 计算Hashes值

4.生成彩虹表

在Cain的安装目录C:\Program Files\Cain\Winrtgen中直接运行Winrtgen,如图3-27所示,该工具为彩虹表生成器,可以很方便地生成各种类型的彩虹表值。

0140-2

图3-27 Winrtgen彩虹表生成工具

5.设置彩虹表

单击“Add Table”按钮,在“Rainbow Table properties”对话框的“Hash”下拉列表中选择“mysqlsha1”选项,根据实际情况分别设置“Min Len”、“Max Len”、“Index”、“Chain len”、“Chain Count”及“N of tables”的值,一般情况下,仅需要设置“Min Len”、“Max Len”及“N of tables”的值。“N of tables”主要用来测试Hashes生成的完整度,输入不同的值,会在“Table properties”显示区中显示百分比,使用户可以通过尝试确定一共需要生成多少个表。单击“Benchmark”按钮可以进行时间估算。如图3-28所示,单击“OK”按钮完成生成设置。

0141-1

图3-28 设置彩虹表

在彩虹表生成器中,如图3-29所示,单击“Start”按钮开始生成彩虹表,在“Status”列中会显示生成的大小和进度。

0141-2

图3-29 开始生成彩虹表

由于生成彩虹表的时间比较长,在网上也没有搜索到以“rt”结尾的MySQL Sha1 Hashes表,因此,本次破解主要以字典破解为主,彩虹表的破解将在全部生成后进行。

在服务器权限设置不太严格的情况下,通过WebShell完全可以将MySQL下的user.MYD文件下载到本地。只要破解了root用户的密码,借助WebShell就可以做很多事情。本节通过使用Cain破解MySQL密码,算是一种较好的尝试,只要使用字典工具生成一些具有一定强度的字典,对于那些设计不太复杂的MySQL密码,破解还是比较容易的。