官术网_书友最值得收藏!

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密碼

主站蜘蛛池模板: 宁晋县| 海林市| 湟中县| 江陵县| 宁晋县| 通州市| 马关县| 石景山区| 枣庄市| 桂东县| 隆回县| 嘉禾县| 花垣县| 黔江区| 延津县| 山东省| 建阳市| 靖安县| 内乡县| 漳浦县| 出国| 洛隆县| 宁化县| 夏河县| 纳雍县| 柞水县| 洛川县| 五指山市| 遵义县| 分宜县| 循化| 新营市| 海阳市| 崇信县| 海伦市| 加查县| 中卫市| 嫩江县| 湘乡市| 贞丰县| 彭阳县|