首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 密碼機制脆弱性深度分析:網路登入加密演算法與儲存雜湊弱點

     編輯:關於SqlServer

兩大脆弱面向

  1. 網路登入時的密碼加密演算法
  2. 資料庫儲存的密碼雜湊演算法

1. 網路登入加密演算法逆向 (TDS 封包)

登入型別 TDS 封包處理流程:

  1. 依長度欄位分配緩衝區。
  2. 從 Offset 8 複製登入資訊。
  3. 呼叫子程式逐欄位驗證 (Offset 0x24 比對長度)。
  4. 核心解密迴圈 (組合語言):
.text:0065C880 mov cl, [edi]       ; 取得密文字元
.text:0065C882 mov dl, cl          ; 備份
.text:0065C884 xor cl, 5           ; cl ^= 0x05
.text:0065C887 xor dl, 0AFh        ; dl ^= 0xAF
.text:0065C88A shr dl, 4           ; dl >>= 4
.text:0065C88D shl cl, 4           ; cl <<= 4
.text:0065C890 or dl, cl           ; dl |= cl
.text:0065C892 mov [edi], dl       ; 寫回明文
.text:0065C894 inc edi             ; 下一字元
.text:0065C895 dec eax             ; 計數器--
.text:0065C896 jnz short loc_65C880

C 語言還原

void decrypt_pwd(unsigned char *buf, int len) {
    for (int i = 0; i < len; i++) {
        unsigned char c = buf[i];
        unsigned char d = c;
        c ^= 0x05;
        d ^= 0xAF;
        d >>= 4;
        c <<= 4;
        buf[i] = d | c;
    }
}

結論:極簡的位元運算 (XOR + 移位),無金鑰、無隨機性、等同簡易編碼。嗅探 TDS 登入封包可即時解密。0xA5 非分隔符,乃 0x00 加密後產生;若允許雙位元組密碼,無法作為邊界判斷。

2. 儲存密碼雜湊弱點

早期版本 (SQL 7.0/2000) 使用專屬雜湊演算法 (非標準 SHA/MD5),長度固定、無鹽值、可預計算彩虹表。sysxlogins.password 欄位儲存雜湊,PWDENCRYPT/PWDCOMPARE 為內部函數。現代版本 (2005+) 改用 SHA-512 + 鹽值,大幅增強。

防禦建議

  • 強制加密連線:啟用 Force Protocol Encryption (SSL/TLS),防止 TDS 明文/弱加密密碼被嗅探。
  • Windows 整合認證:完全避開 SQL 密碼機制,改用 Kerberos/NTLM 驗證。
  • 升級至支援版本:SQL 2000/2005 已停止支援,升級至 2019/2022 獲得現代密碼雜湊與持續安全更新。
  • 稽核登入失敗:偵測暴力破解嘗試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved