1.13 巧用Cain破解MySQL数据库密码
MySQL数据库用户密码跟其他数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件读取权限后即可直接从数据库连接文件中读取,例如asp代码中的conn.asp数据库连接文件,在该文件中一般都包含有数据库类型,物理位置,用户名和密码等信息;而在MySQL中即使获取了某一个用户的数据库用户(root用户除外)的密码,也仅仅只能操作某一个用户的数据库中的数据。在实际攻防过程中,在获取WebShell的情况下,是可以直下载MySQL数据库中保留用户的user.MYD文件,该文件中保存的是MySQL数据库中所有用户对应的数据库密码,只要能够破解这些密码那么就可以正大光明地操作这些数据,虽然网上有很多修改MySQL数据库用户密码的方法,却不可取,因为修改用户密码的事情很容易被人发现!
研究MySQL数据库的加解密方式,在网络攻防过程中具有重要的意义;设想一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途径来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。通过在网络上查找资料,目前关于破解MySQL方面的研究不多,本文算是抛砖引玉,虽然效果不是特别好,但也算是对破解MySQL数据库用户密码的一种探讨和尝试。
1.13.1 MySQL加密方式
MySQL数据库的认证密码有两种方式,MySQL 4.1版本之前是MySQL323加密,MySQL 4.1和之后的版本都是MySQLSHA1加密,MySQL数据库中自带Old_Passwor(dstr)和Password(str)函数,它们均可以在MySQL数据库里进行查询,前者是MySQL323加密,后者是MySQLSHA1方式加密。
(1)以MySQL323方式加密
SELECT Old_Password('bbs.antian365.com');
查询结果MySQL323 = 10c886615b135b38
(2)以MySQLSHA1方式加密
SELECT Password('bbs.antian365.com');
查询结果MySQLSHA1 = *A2EBAE36132928537ADA8E6D1F7C5C5886713CC2
执行结果如图1-90所示,MYSQL323加密中生成的是16位字符串,而在MySQLSHA1中生存的是41位字符串,其中*是不加入实际的密码运算中,通过观察在很多用户中都携带了“*”,在实际破解过程中去掉“*”,也就是说MySQLSHA1加密的密码的实际位数是40位。
图1-90 在MySQL数据库中查询同一密码的不同SHA值
1.13.2 MySQL数据库文件结构
(1)MySQL数据库文件类型
MySQL数据库文件共有“frm”、“MYD”“和MYI”三种文件,“.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目录下,如图1-91所示,有关用户一共有三个文件即user.frm、user.MYD和user.MYI,MySQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。
图1-91 MySQL数据库用户密码文件
1.13.3 获取MySQL数据库用户密码加密字符串
使用UltraEdit-32编辑器直接打开user.MYD文件,打开后使用二进制模式进行查看,如图1-92所示,可以看到在root用户后面是一串字符串,选中这些字符串将其复制到记事本中,这些字符串即为用户加密值,即506D1427F6F61696B4501445C90624897266DAE3。
注意:
(1)root后面的“*”不要复制到字符串中。
(2)在有些情况下需要往后面看看,否则得到的不是完整的MYSQLSHA1密码,总之其正确的密码位数是40位。
图1-92 获取加密的字符串
1.13.4 将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 后,直接安装,然后运行它,在Cain & Abel 主界面中单击“Cracker”标签,然后将用户密码的加密字符串“506D1427F6F61696B4501445 C90624897266DAE3”加入到MySQL Hashes破解列表中,如图1-93所示,单击“Add to list”按钮,如图1-94所示,将字符串复制到Hash输入框中。Username可以任意输入。
图1-93 使用Cain破解MySQL密码的主界面
图1-94 添加MySQL Hashes
1.13.5 使用字典进行破解
如图1-95所示,选中刚才添加的需要破解的字符串,然后选择“Dictionary Attack(字典破解)”,在弹出的菜单中选择“MySQL SHA1 Hashes”方式进行破解,该方式针对的是MySQL4.1后续版本,对于MySQL4.1以前版本则选择“MySQL v3.23 Hashes”进行破解。
图1-95 选择破解方式
选择“Dictionary Attack(字典破解)”后会出现一个窗口,主要用于选择字典,如图1-96所示,在Dictionary下方右键单击,可以添加一个或者多个字典文件,字典选择完毕后可以在“Options(选项)”中进行选择,然后单击“Start”按钮进行破解。
图1-96 MYSQL字典破解设置
说明:
在“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”列中,如图1-97所示,便于查看。
图1-97 破解密码成功
1.13.6 破解探讨
(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”,其结果如图1-98所示。
图1-98 修改MySQL用户密码
再次使用UltraEdit-32软件重新打开“C:\Program Files\MySQL\MySQL Server 5.0\data\MYSQL\user.MYD”获取其新的密码字符串“B046BBAF61FE3BB6F60CA99 AF39F5C2702F00D12”,然后重新选择一个字典,在本例中选择生成的生日字典,如图1-99和图1-100所示,仅仅选择小写字符串进行破解,很快就获取了破解结果。实际结果表明使用Cain来破解MySQL密码时,如果是采用字典破解,那么破解效果跟字典强度有关,只要破解的密码在字典中,则一定能够破解。
图1-99 再次破解MySQL密码
图1-100 修改MySQL密码后再次进行破解MySQL密码
(2)使用彩虹表进行破解
在Cain中还提供彩虹表破解MySQL,在破解方式中选择“Cryptanalysis Attack”-“MySQL SHA1 Hashes via RainbowTables”即可,如图1-101和图1-102所示,在实际测试过程中由于网络上提供的sha彩虹表格式是RTI,而Cain中使用的是RT,我将下载的所有彩虹表中文件后缀由RTI修改为RT,然后进行破解,提示信息显示不成功,应该是彩虹表的格式不一样,Cain中只承认它自己提供的。
图1-101 使用彩虹表破解方式
图1-102 使用彩虹表进行破解
(3)Hash计算器
在Cain中提供了各种Hashes的计算,在主界面中单击计算机图标按钮,即可弹出Hashes计算器,在“Text to hash”中输入需要转换的原始值,例如输入“12345678”,单击“Calculate”进行计算,如图1-103所示,可以看到14种Hashes值。
图1-103 计算Hashes值
(4)生成彩虹表
在Cain的安装目录C:\Program Files\Cain\Winrtgen中直接运行Winrtgen,如图1-104所示,该工具为彩虹表生成器,可以很方便地生成各种类型的彩虹表值。
图1-104 Winrtgen彩虹表生成工具
(5)设置彩虹表
在图15中单击“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”进行时间估算,如图1-105所示,单击“OK”按钮完成彩虹表生成设置。
在彩虹表生成器中,如图1-106单击“Start”按钮开始生成彩虹表,在Status中会显示生成的大小和进度。
图1-105 设置彩虹表
图1-106 开始生成彩虹表
由于彩虹表生成的时间比较漫长,在网络上也没有搜索到以rt结尾的MYSQL Sha1 hashes表,因此本次破解主要以字典破解为主,彩虹表的破解将在全部生成后进行,关于使用彩虹表来破解MYSQL密码,请关注安天365论坛(bbs.antian365.com)。在服务器权限设置不太严格的情况下,通过WebShell完全可以将MYSQL下的user.MYD文件下载到本地,只要破解了root用户的密码,然后借助WebShell可以做很多事情,本文通过使用cain来破解MYSQL密码,算是一种较好的尝试,只要使用字典工具生成一些具有一定强度的字典,对于设计不太复杂的MYSQL密码,破解还是较为容易的。