- 網絡攻防實戰研究:MySQL數據庫安全
- 祝烈煌
- 2750字
- 2020-10-30 15:11:18
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方式加密

查詢結果為MYSQL323=10c886615b135b38。
2.以MYSQLSHA1方式加密

查詢結果為MYSQLSHA1=*A2EBAE36132928537ADA8E6D1F7C5C5886713CC2。
如圖1-73所示:以MYSQL323方式加密,生成的字符串是16位的;以MYSQLSHA1方式加密,生成的字符串是41位的。其中,“*”不參與實際的密碼運算。在實際破解過程中會去掉“*”,也就是說,以MYSQLSHA1方式加密的密碼的實際位數是40位。

圖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用戶和其他用戶的密碼。

圖1-74 MySQL數據庫用戶的密碼文件
1.9.3 MySQL密碼散列值
使用 UltraEdit-32 編輯器打開 user.MYD 文件,然后在二進制模式中查看,如圖1-75所示,在“root*”后面有一個字符串。選中這個字符串,將其復制到記事本程序中。這個字符串(即506D1427 F6F61696B4501445C90624897266DAE3)就是用戶密碼的散列值。
注意
· 不要復制“root”后面的“*”。
· 在一些情況下,需要往后面看看,否則得到的不是完整的MYSQLSHA1密碼值(其正確的位數是40位)。
· 如果使用John the Ripper進行密碼破解,在復制時需要帶上“root”后面的“*”。

圖1-75 獲取用戶密碼的散列值
1.9.4 Hashcat和John the Ripper的使用
1.Hashcat
Hashcat是一個免費的開源軟件,支持多種算法,官方網站見鏈接1-14,常用命令如下。

2.John the Ripper
John the Ripper的下載地址見鏈接1-15。John the Ripper除了能破解Linux密碼,還能破解多種格式的密碼。
執行如下命令,在Kali中使用John the Ripper對MySQL數據庫的密碼破解進行測試,如圖1-76所示。


圖1-76 測試MySQL密碼破解
1.9.5 Cain的使用
Cain是一個綜合密碼破解工具,下載地址見鏈接1-16。
1.將MySQL用戶密碼字符串放入Cain破解列表
在 Cain 主界面單擊“Cracker”標簽,然后將用戶密碼的加密字符串 506D1427F6F61696B450 1445C90624897266DAE3放入“Hash”列。如圖1-77所示,單擊右鍵,在彈出的快捷菜單中選擇“Add to list”選項。

圖1-77 使用Cain破解MySQL密碼
如圖1-78所示,將字符串復制到“Hash”輸入框中(在“Username”輸入框中,可以輸入任意內容)。

圖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”設置區有八種方式可以選擇,列舉如下。
· 字符串首字母大寫。
· 字符串反轉。
· 雙倍字符串。
· 字符串全部小寫。
· 字符串全部大寫。
· 在字符串中添加數字。
· 在每個字符串中進行大寫輪換。
· 在字符串中添加兩個數字。

圖1-79 選擇破解方式

圖1-80 MySQL字典破解設置
破解完成后,Cain會給出一些提示信息,示例如下。

以上信息表明,加密的密碼是“databasepassword”。回到Cain主窗口,破解的密碼值會自動出現在“Password”列中,如圖1-81所示。

圖1-81 密碼破解成功
3.破解探討
(1)字典破解與字典強度有關
打開“MySQL Command Line Client”窗口,輸入密碼,然后輸入以下命令,重置密碼。

在本例中,將原來的密碼修改為“1977-05-05”,如圖1-82所示。

圖1-82 修改MySQL用戶的密碼
再次使用UltraEdit-32打開C:\Program Files\MySQL\MySQL Server 5.0\data\MySQL\user.MYD文件,獲取其新的密碼字符串B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12,然后重新選擇一個字典。在本例中,選擇生成的生日字典。如圖1-83和圖1-84所示,僅選擇小寫字符串進行破解,很快就能得到結果。

圖1-83 再次破解MySQL密碼

圖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 只承認它自己提供的彩虹表)。

圖1-85 使用彩虹表破解方式

圖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所示。該工具為彩虹表生成器,可以方便地生成各種類型的彩虹表。

圖1-87 計算散列值

圖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”的值。

圖1-89 設置彩虹表
“N° of tables”主要用來測試生成的散列值的完整度。輸入不同的值,在“Table properties”區域會顯示相應的百分比,以便用戶通過嘗試來確定一共需要生成多少個表。單擊“Benchmark”按鈕可以進行時間估算。單擊“OK”按鈕,保存對彩虹表生成的設置。
在彩虹表生成器中,單擊“Start”按鈕,開始生成彩虹表。如圖1-90所示,在“Status”列中會顯示所生成彩虹表的大小和進度。

圖1-90 開始生成彩虹表
(6)MYSQL323密碼的快速破解方式
對于 16 位的 MySQL 密碼(MYSQL323),有一種快速破解方式。編譯以下程序,可以直接進行破解。

破解結果如圖1-91所示,代碼如下。

圖1-91 快速破解MySQL密碼


