轉自 http://blog.csdn.net/paul123456789io/article/details/53081921
MySQL數據庫用戶密碼跟其它數據庫用戶密碼一樣,在應用系統代碼中都是以明文出現的,在獲取文件讀取權限后即可直接從數據庫連接文件中讀取,例如asp代碼中的conn.asp數據庫連接文件,在該文件中一般都包含有數據庫類型,物理位置,用戶名和密碼等信息;而在MySQL中即使獲取了某一個用戶的數據庫用戶(root用戶除外)的密碼,也僅僅只能操作某一個用戶的數據庫中的數據。
在實際攻防過程中,在獲取Webshell的情況下,是可以直下載MYSQL數據庫中保留用戶的user.MYD文件,該文件中保存的是MYSQL數據庫中所有用戶對應的數據庫密碼,只要能夠破解這些密碼那么就可以正大光明的操作這些數據,雖然網上有很多修改MYSQL數據庫用戶密碼的方法,卻不可取,因為修改用戶密碼的事情很容易被人發現!
研究MYSQL數據庫的加解密方式,在網絡攻防過程中具有重要的意義;試想一旦獲取了網站一定的權限后,如果能夠獲取MYSQL中保存用戶數據,通過解密后,即可通過正常途徑來訪問數據庫;一方面可以直接操作數據庫中的數據,另一方面可以用來提升權限。通過在網絡上查找資料,目前關於破解MYSQL方面的研究不多,本文算是拋磚引玉,雖然效果不是特別好,但也算是對破解MYSQL數據庫用戶密碼的一種探討和嘗試。
(一)MYSQL加密方式
MYSQL數據庫的認證密碼有兩種方式,MYSQL 4.1版本之前是MYSQL323加密,MYSQL 4.1和之后的版本都是MYSQLSHA1加密,MYSQL數據庫中自帶Old_Password(str)和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所示,MYSQL323加密中生成的是16位字符串,而在MYSQLSHA1中生存的是41位字符串,其中*是不加入實際的密碼運算中,通過觀察在很多用戶中都攜帶了“*”,在實際破解過程中去掉“*”,也就是說MYSQLSHA1加密的密碼的實際位數是40位。
(二)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目錄下,如圖2所示,有關用戶一共有三個文件即user.frm、user.MYD和user.MYI,MYSQL數據庫用戶密碼都保存在user.MYD文件中,包括root用戶和其他用戶的密碼。
(三)破解MYSQL密碼
1.獲取MYSQL數據庫用戶密碼加密字符串
使用UltraEdit-32編輯器直接打開user.MYD文件,打開后使用二進制模式進行查看,如圖3所示,可以看到在root用戶后面是一串字符串,選中這些字符串將其復制到記事本中,這些字符串即為用戶加密值,即506D1427F6F61696B4501445C90624897266DAE3。
注意:
(1)root后面的“*”不要復制到字符串中。
(2)在有些情況下需要往后面看看,否則得到的不是完整的MYSQLSHA1密碼,總之其正確的密碼位數是40位。