- 网络攻防实战研究:MySQL数据库安全
- 祝烈煌
- 2750字
- 2021-04-04 14:32:34
1.9 MySQL数据库密码安全
MySQL 数据库用户的密码和其他数据库用户的密码一样,在应用系统的代码中是以明文出现的,只要获得了相应的文件读取权限,就可以直接从数据库连接文件中读取用户的密码。
在ASP代码中,conn.asp数据库连接文件通常包含数据库类型、物理位置、用户名和密码等信息。而在MySQL数据库中,即使获取了某个用户的数据库用户(root用户除外)的密码,也只能操作该用户的数据库中的数据。
在实际攻防过程中,攻击者在获取了WebShell的情况下,可以直下载MySQL数据库中用于保存用户信息的user.MYD文件。该文件中保存的是MySQL数据库中所有用户所对应的数据库密码,只要破解这些密码,就可以操作这些数据。因此,研究 MySQL 数据库的加密方式,在网络安全维护过程中具有重要的意义。试想一下:如果攻击者获取了 MySQL 中保存的用户数据,只要将其解密,就可以通过正常途径访问数据库了(可以直接操作数据库中的数据,甚至可以提升权限)。
1.9.1 MySQL数据库的加密方式
MySQL 数据库的密码认证有两种方式:MySQL 4.1 版本之前是以 MYSQL323 方式加密的;MySQL 4.1和之后的版本都是以MYSQLSHA1方式加密的。MySQL数据库自带Old_Password(str)和Password(str)函数,它们都可以在MySQL数据库中进行查询操作,前者是以MYSQL323方式加密的,后者是以MYSQLSHA1方式加密的。
1.以MYSQL323方式加密
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_66_1.jpg?sign=1739426974-GW8quQkRZTzdJNnxgsLTyn3UUAw1yQQs-0-d1c4275128faa7a34bc72777fc493218)
查询结果为MYSQL323=10c886615b135b38。
2.以MYSQLSHA1方式加密
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_66_2.jpg?sign=1739426974-xNRJgQmZ0cZOiPAr61zZCh3YV7Mj8etK-0-39bb0d55554a2061e987abd59ce81c3d)
查询结果为MYSQLSHA1=*A2EBAE36132928537ADA8E6D1F7C5C5886713CC2。
如图1-73所示:以MYSQL323方式加密,生成的字符串是16位的;以MYSQLSHA1方式加密,生成的字符串是41位的。其中,“*”不参与实际的密码运算。在实际破解过程中会去掉“*”,也就是说,以MYSQLSHA1方式加密的密码的实际位数是40位。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_66_3.jpg?sign=1739426974-W7ULEtFaUZ3izsHTllFvfpm06LQXskIF-0-2745128b41a97e0542f1b08466601438)
图1-73 在MySQL数据库中查询同一密码的不同SHA值
1.9.2 MySQL数据库文件结构
1.文件类型
MySQL 数据库文件有 frm、MYD、MYI 三种类型。frm 文件是用于描述表结构的文件;MYD文件是表的数据文件;MYI文件用于描述表数据文件中任何索引的数据树。这些文件通常存储在一个特定的文件夹中,默认路径为C:\Program Files\MySQL\MySQL Server 5.0\data。
2.用户密码文件
在MySQL数据库中,所有设置都默认保存在C:\Program Files\MySQL\MySQL Server 5.0\data\mysql文件夹中(也就是安装程序的data目录下)。
如图1-74所示,与用户有关的文件有三个,分别是 user.frm、user.MYD 和 user.MYI。MySQL数据库用户的密码都保存在user.MYD文件中,包括root用户和其他用户的密码。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_67_1.jpg?sign=1739426974-eHvgWbtHVIAaNgh1XzhpEVCy2KCYewv4-0-73340857cb3c5b30494c34c0df540217)
图1-74 MySQL数据库用户的密码文件
1.9.3 MySQL密码散列值
使用 UltraEdit-32 编辑器打开 user.MYD 文件,然后在二进制模式中查看,如图1-75所示,在“root*”后面有一个字符串。选中这个字符串,将其复制到记事本程序中。这个字符串(即506D1427 F6F61696B4501445C90624897266DAE3)就是用户密码的散列值。
注意
· 不要复制“root”后面的“*”。
· 在一些情况下,需要往后面看看,否则得到的不是完整的MYSQLSHA1密码值(其正确的位数是40位)。
· 如果使用John the Ripper进行密码破解,在复制时需要带上“root”后面的“*”。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_68_1.jpg?sign=1739426974-N6SaYLoCQZdB6mSBtlqsD6NpL2mkX89e-0-7df06f389630960a1f609ac4937da309)
图1-75 获取用户密码的散列值
1.9.4 Hashcat和John the Ripper的使用
1.Hashcat
Hashcat是一个免费的开源软件,支持多种算法,官方网站见链接1-14,常用命令如下。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_68_2.jpg?sign=1739426974-vBjPdc7wZH6sGRVfDBDgbXvIDGAny9Wp-0-4ec537a8497c24a3731218e364228226)
2.John the Ripper
John the Ripper的下载地址见链接1-15。John the Ripper除了能破解Linux密码,还能破解多种格式的密码。
执行如下命令,在Kali中使用John the Ripper对MySQL数据库的密码破解进行测试,如图1-76所示。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_68_3.jpg?sign=1739426974-uMMgxhdeqUizq1XL38p5z7EPMhhtRzTv-0-23883275e97bf638135aea8573ebebbc)
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_68_4.jpg?sign=1739426974-TcEuDi7eUXmncFMsxqVvAMfXoqvGjO8C-0-8e135800095ec532366b055d4fe5c016)
图1-76 测试MySQL密码破解
1.9.5 Cain的使用
Cain是一个综合密码破解工具,下载地址见链接1-16。
1.将MySQL用户密码字符串放入Cain破解列表
在 Cain 主界面单击“Cracker”标签,然后将用户密码的加密字符串 506D1427F6F61696B450 1445C90624897266DAE3放入“Hash”列。如图1-77所示,单击右键,在弹出的快捷菜单中选择“Add to list”选项。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_69_1.jpg?sign=1739426974-41okIrBHinDIEfhnipR0Sa8Z0TRS8BUV-0-684f2a5fd0469f9a6f62a0023a5091b7)
图1-77 使用Cain破解MySQL密码
如图1-78所示,将字符串复制到“Hash”输入框中(在“Username”输入框中,可以输入任意内容)。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_69_2.jpg?sign=1739426974-7z4duW5UcougZI74ePwNmQjJEXaOkt1Y-0-7399793b2b1afe09108f02a94156d3fe)
图1-78 添加密码散列值
2.使用字典进行破解
如图1-79所示,选中刚刚添加的需要破解的字符串,然后单击右键,在弹出的快捷菜单中选择“Dictionary Attack”→“MySQL SHA1 Hashes”选项。“MySQL SHA1 Hashes”选项针对的是MySQL 4.1及后续版本;对MySQL 4.1以前版本的散列值,应选择“MySQL v3.23 Hashes”选项。
选择破解方式后,会出现一个用于选择字典的窗口,如图1-80所示。在“Dictionary”列表框中单击右键,可以添加字典文件(一个或多个)。字典选择完毕,可以在“Options”设置区进行选择,然后单击“Start”按钮进行破解。
说明
在“Options”设置区有八种方式可以选择,列举如下。
· 字符串首字母大写。
· 字符串反转。
· 双倍字符串。
· 字符串全部小写。
· 字符串全部大写。
· 在字符串中添加数字。
· 在每个字符串中进行大写轮换。
· 在字符串中添加两个数字。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_70_1.jpg?sign=1739426974-cVpskgOKQKh67yCXSsxhkKsHxFlnSdNd-0-71f131e12cc0b5879d948f92cc152646)
图1-79 选择破解方式
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_70_2.jpg?sign=1739426974-byFihUl39QYVeaIN3eVsoll3GIS8eGvP-0-4f74cddec687b210bc9dee1313515079)
图1-80 MySQL字典破解设置
破解完成后,Cain会给出一些提示信息,示例如下。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_70_3.jpg?sign=1739426974-mGcPOoGP8FtrybLXAz5iM16NeQ1ecpW2-0-51d6d623fcc69a093b4ab8117a43ed55)
以上信息表明,加密的密码是“databasepassword”。回到Cain主窗口,破解的密码值会自动出现在“Password”列中,如图1-81所示。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_71_1.jpg?sign=1739426974-ENiSxUzcv5JrsV47P0Pqblv80uLIZRGm-0-40288afa49134bd0af4b0dcaa3920d1c)
图1-81 密码破解成功
3.破解探讨
(1)字典破解与字典强度有关
打开“MySQL Command Line Client”窗口,输入密码,然后输入以下命令,重置密码。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_71_2.jpg?sign=1739426974-qLp8MnJIKvKAI1Enjv3BcFraiF3SHqWG-0-223fb95a6553a06aa016094e0770602d)
在本例中,将原来的密码修改为“1977-05-05”,如图1-82所示。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_71_3.jpg?sign=1739426974-s6EcjmV2n6QrLkX3pUpLqxoR6pbpd164-0-818483af13a7adde28f32e4331aedef5)
图1-82 修改MySQL用户的密码
再次使用UltraEdit-32打开C:\Program Files\MySQL\MySQL Server 5.0\data\MySQL\user.MYD文件,获取其新的密码字符串B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12,然后重新选择一个字典。在本例中,选择生成的生日字典。如图1-83和图1-84所示,仅选择小写字符串进行破解,很快就能得到结果。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_72_1.jpg?sign=1739426974-I3H5mjJHVIvq27MmLnmcIqGpBfkUdanY-0-21e6b89aa5096c0e6f1eb18ab38e6c48)
图1-83 再次破解MySQL密码
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_72_2.jpg?sign=1739426974-aTTvv579NnyYrAiWWc8KumSTD1K5RPIh-0-955db89776264a1707e13c58f61e77c1)
图1-84 修改MySQL密码后再次进行破解
结果表明,在使用Cain破解MySQL密码时,如果采用的是字典破解,那么破解效果与字典强度有关——只要密码在字典中,就一定能够破解。
(2)使用彩虹表进行破解
Cain还提供了使用彩虹表破解MySQL的方式。
如图1-85所示,选中需要破解的密码,然后单击右键,在弹出的快捷菜单中选择“Cryptanalysis Attack”→“MySQL SHA1 Hashes via RainbowTables”选项。如图1-86所示,在实际的测试中,因为使用的SHA彩虹表的格式是rti,而Cain中使用的格式是rt,所以需要将下载的所有彩虹表的文件后缀由“rti”改为“rt”。如果提示信息显示破解失败,应该是彩虹表的格式不一样所致(Cain 只承认它自己提供的彩虹表)。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_73_1.jpg?sign=1739426974-HFrgPvfmw2H5eXDS13vuxiYn3SN6IbEy-0-c4fbb6e4124c9bd2d18577917ac02379)
图1-85 使用彩虹表破解方式
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_73_2.jpg?sign=1739426974-wRmvBKVPUYnIFXvhH7ndmtUEcehtvSZX-0-f2a8f2f2f8914405ccca8bae8f41b432)
图1-86 使用彩虹表进行破解
(3)Hash计算器
Cain提供了针对各种散列值的计算功能。
在Cain主界面单击计算机图标,即可打开Hash计算器。在“Text to hash”文本框中输入需要转换的原始值,例如“12345678”,然后单击“Calculate”按钮进行计算。如图1-87所示,可以看到14种散列值。
(4)生成彩虹表
在Cain的安装目录C:\Program Files\Cain\Winrtgen中,直接运行Winrtgen工具,如图1-88所示。该工具为彩虹表生成器,可以方便地生成各种类型的彩虹表。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_74_1.jpg?sign=1739426974-3XTWw9SSyICKHbxSkPoyT4nXcxH7I2iF-0-f9b21b68f79ab0efeb881a2779726d65)
图1-87 计算散列值
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_74_2.jpg?sign=1739426974-f2dE0DryRL45QxhpIJWgB1EhjWtrj2Nr-0-2459e7a49692f19fecf12413d5fc0aaf)
图1-88 Winrtgen彩虹表生成工具
(5)设置彩虹表
单击“Add Table”按钮,在“Rainbow Table properties”窗口的“Hash”下拉列表中选择“mysqlsha1”选项,根据实际情况分别设置“Min Len”“Max Len”“Index”“Chain Len”“Chain Count”“N° of tables”的值,如图1-89所示。在一般情况下,仅需要设置“Min Len”“Max Len”“N° of tables”的值。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_74_3.jpg?sign=1739426974-zhb11fCrqrgP7CulGu3LL0o2rkTO3GmF-0-67e72ad3fcdd73de714225ff89ee9636)
图1-89 设置彩虹表
“N° of tables”主要用来测试生成的散列值的完整度。输入不同的值,在“Table properties”区域会显示相应的百分比,以便用户通过尝试来确定一共需要生成多少个表。单击“Benchmark”按钮可以进行时间估算。单击“OK”按钮,保存对彩虹表生成的设置。
在彩虹表生成器中,单击“Start”按钮,开始生成彩虹表。如图1-90所示,在“Status”列中会显示所生成彩虹表的大小和进度。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_75_1.jpg?sign=1739426974-hqMoMaCpxpXKLMOTSqgXFdoIhcX8M6FC-0-6c2cadd5048eed7323bffe47ce60e73a)
图1-90 开始生成彩虹表
(6)MYSQL323密码的快速破解方式
对于 16 位的 MySQL 密码(MYSQL323),有一种快速破解方式。编译以下程序,可以直接进行破解。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_75_2.jpg?sign=1739426974-4Ft48QAxxJXYbtjpwypaB5CR4tYkJbc5-0-3b0bfe6a178ac0a566303032007eeb0b)
破解结果如图1-91所示,代码如下。
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_75_3.jpg?sign=1739426974-LHKap9dS3gVgOIYflSQetAHfkU2PoAGb-0-04ebedbe80aed53039db2e2b0e2831a1)
图1-91 快速破解MySQL密码
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_75_4.jpg?sign=1739426974-BivKveXL6KKcFC0KAZYN77AYAmFnx4Bq-0-046164fdf3a7832aff9e970d3a2670d5)
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_76_1.jpg?sign=1739426974-5R9OCVJj2FrGw9BI5wwVjhCUhzjX5WET-0-2b4d2229bc2fab70ccfc6cc687a6a95e)
![](https://epubservercos.yuewen.com/E55E1D/18279401208274706/epubprivate/OEBPS/Images/35530_77_1.jpg?sign=1739426974-G2G6bnLSrbg6B7pqf7EKWJvQ6TyGJ5JS-0-4368d51121d0f4aba789d2000a234651)