SQL SERVER數(shù)據(jù)庫口令的脆弱性
添加時間:2012-12-8 16:53:14
添加:
思海網(wǎng)絡
跟蹤了一下SQL SERVER數(shù)據(jù)庫服務器的登錄過程,發(fā)現(xiàn)口令計算是非常脆弱的,SQL SERVER數(shù)據(jù)庫的口令脆弱體現(xiàn)兩方面:
1、網(wǎng)絡登陸時候的口令加密算法
2、數(shù)據(jù)庫存儲的口令加密算法。
下面就分別講述:
1、網(wǎng)絡登陸時候的口令加密算法
SQL SERVER網(wǎng)絡加密的口令一直都非常脆弱,網(wǎng)上有很多寫出來的對照表,但是都沒有具體的算法處理,實際上跟蹤一下SQL
SERVER的登陸過程,就很容易獲取其解密的算法:好吧,我們還是演示一下匯編流程:
登錄類型的TDS包跳轉(zhuǎn)到4126a4處執(zhí)行:
004DE72E:根據(jù)接收到的大小字段生成對應大小的緩沖區(qū)進行下一步的拷貝
004DE748從接收到的TDS BUF偏移8處拷貝出LOGIN的信息
004DE762:call sub_54E4D0:將新拷貝的緩沖壓入進行參數(shù)檢查的處理
依次處理TDS包中的信息,各個字段氣候都應該有各個域的長度,偏移0X24處與長度進行比較。
下面這段匯編代碼就是實現(xiàn)對網(wǎng)絡加密密碼解密的算法:
很容易就將其換成為C代碼,可以看出其加密及其簡單,和明文沒什么區(qū)別,呵呵,大家可以在SNIFFER中嵌入這段代碼對嗅嘆到的TDS登陸包進行解密,其實0XA5不是特定的SQL SERVER密碼字段的分界符號,只是由于加密算法會自動把ASC的雙字節(jié)表示的0x0加密成0xa5而已,但是如果允許雙字節(jié)口令,這個就不是判斷其分界的主要原因了。
2、數(shù)據(jù)庫存儲的口令加密算法
SQL SERVER的口令到數(shù)據(jù)庫存儲的加密方法,也是讓人怪異的。其過程如下:
在獲得網(wǎng)絡解密密碼的口令以后在005F9D5A處call SQLSORT_14,實現(xiàn)一個轉(zhuǎn)換為大寫口令緩沖進行保存。
然后在004def6d處調(diào)用一個函數(shù)取出數(shù)據(jù)庫中的加密的PASSWORD,其形式如下:
如我取出的一個例子:
SQL首先用4個字節(jié)的HASH加秘KEY補上其兩處口令的緩沖,一個為大寫,一個為小寫。然后其加密過程如下C函數(shù):
1、網(wǎng)絡登陸時候的口令加密算法
2、數(shù)據(jù)庫存儲的口令加密算法。
下面就分別講述:
1、網(wǎng)絡登陸時候的口令加密算法
SQL SERVER網(wǎng)絡加密的口令一直都非常脆弱,網(wǎng)上有很多寫出來的對照表,但是都沒有具體的算法處理,實際上跟蹤一下SQL
SERVER的登陸過程,就很容易獲取其解密的算法:好吧,我們還是演示一下匯編流程:
登錄類型的TDS包跳轉(zhuǎn)到4126a4處執(zhí)行:
004DE72E:根據(jù)接收到的大小字段生成對應大小的緩沖區(qū)進行下一步的拷貝
004DE748從接收到的TDS BUF偏移8處拷貝出LOGIN的信息
004DE762:call sub_54E4D0:將新拷貝的緩沖壓入進行參數(shù)檢查的處理
依次處理TDS包中的信息,各個字段氣候都應該有各個域的長度,偏移0X24處與長度進行比較。
下面這段匯編代碼就是實現(xiàn)對網(wǎng)絡加密密碼解密的算法:
|
很容易就將其換成為C代碼,可以看出其加密及其簡單,和明文沒什么區(qū)別,呵呵,大家可以在SNIFFER中嵌入這段代碼對嗅嘆到的TDS登陸包進行解密,其實0XA5不是特定的SQL SERVER密碼字段的分界符號,只是由于加密算法會自動把ASC的雙字節(jié)表示的0x0加密成0xa5而已,但是如果允許雙字節(jié)口令,這個就不是判斷其分界的主要原因了。
|
2、數(shù)據(jù)庫存儲的口令加密算法
SQL SERVER的口令到數(shù)據(jù)庫存儲的加密方法,也是讓人怪異的。其過程如下:
在獲得網(wǎng)絡解密密碼的口令以后在005F9D5A處call SQLSORT_14,實現(xiàn)一個轉(zhuǎn)換為大寫口令緩沖進行保存。
然后在004def6d處調(diào)用一個函數(shù)取出數(shù)據(jù)庫中的加密的PASSWORD,其形式如下:
|
如我取出的一個例子:
|
SQL首先用4個字節(jié)的HASH加秘KEY補上其兩處口令的緩沖,一個為大寫,一個為小寫。然后其加密過程如下C函數(shù):
|
取出passwdbuf是大寫的passwd的加密值這兩個相加就是真正的數(shù)據(jù)庫中的PASSWORD加密字段.
為什么說以上方法是脆弱的呢?其實其真正的加密長度生成只有20個字節(jié)。
小寫口令的HASH1+大寫口令的HASH1拼接的40位HASH值的安全度還不如一個直接20位的HASH值來得安全。因為大家都知道這兩個值的因果關(guān)系,
提供給了解密者更多的信息。
如因為其算法一樣,如果HASH1=HASH2,就可以判斷口令肯定是未使用字母,只使用了數(shù)字和符號的口令,如上取出的123456口令的HASH,兩個HASH完全相等。
就是使用了字母,其知道補充的KEY,算法,兩個加密字串的關(guān)系,其解應該也是大大的簡化了。
關(guān)鍵字:SQL SERVER、數(shù)據(jù)庫、服務器
新文章:
- CentOS7下圖形配置網(wǎng)絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認iptable規(guī)則詳解