亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

SQL SERVER數據庫口令的脆弱性

添加時間:2012-12-8 16:53:14  添加: 思海網絡 
跟蹤了一下SQL SERVER數據庫服務器的登錄過程,發現口令計算是非常脆弱的,SQL SERVER數據庫的口令脆弱體現兩方面:

1、網絡登陸時候的口令加密算法

2、數據庫存儲的口令加密算法。

下面就分別講述:

1、網絡登陸時候的口令加密算法

SQL SERVER網絡加密的口令一直都非常脆弱,網上有很多寫出來的對照表,但是都沒有具體的算法處理,實際上跟蹤一下SQL

SERVER的登陸過程,就很容易獲取其解密的算法:好吧,我們還是演示一下匯編流程:

登錄類型的TDS包跳轉到4126a4處執行:

004DE72E:根據接收到的大小字段生成對應大小的緩沖區進行下一步的拷貝

004DE748從接收到的TDS BUF偏移8處拷貝出LOGIN的信息

004DE762:call sub_54E4D0:將新拷貝的緩沖壓入進行參數檢查的處理

依次處理TDS包中的信息,各個字段氣候都應該有各個域的長度,偏移0X24處與長度進行比較。

下面這段匯編代碼就是實現對網絡加密密碼解密的算法:

.text:0065C880                 mov     cl, [edi]    .text:0065C882                 mov     dl, cl    .text:0065C884                 xor     cl, 5    .text:0065C887                 xor     dl, 0AFh    .text:0065C88A                 shr     dl, 4    .text:0065C88D                 shl     cl, 4    .text:0065C890                 or      dl, cl    .text:0065C892                 mov     [edi], dl    .text:0065C894                 inc     edi    .text:0065C895                 dec     eax    .text:0065C896                 jnz     short loc_65C880    .text:0065C898                 jmp     loc_4DE7E6


很容易就將其換成為C代碼,可以看出其加密及其簡單,和明文沒什么區別,呵呵,大家可以在SNIFFER中嵌入這段代碼對嗅嘆到的TDS登陸包進行解密,其實0XA5不是特定的SQL SERVER密碼字段的分界符號,只是由于加密算法會自動把ASC的雙字節表示的0x0加密成0xa5而已,但是如果允許雙字節口令,這個就不是判斷其分界的主要原因了。

void sqlpasswd(char * enp,char* dnp){    int i;    unsigned char a1;    unsigned char a2;    for(i=0;i<128;i++)    {        if(enp[i]==0)            break;        a1 = enp[i]^5;        a1 = a1 << 4;        a2 = enp[i]^0xaf;        a2 = a2 >> 4;        dnp[i]=a1|a2;    }    dnp[i]=0;    dnp[i+1]=0;    wprintf(L"passwd:%s\n",(const wchar_t *)dnp);}


2、數據庫存儲的口令加密算法

SQL SERVER的口令到數據庫存儲的加密方法,也是讓人怪異的。其過程如下:

在獲得網絡解密密碼的口令以后在005F9D5A處call SQLSORT_14,實現一個轉換為大寫口令緩沖進行保存。

然后在004def6d處調用一個函數取出數據庫中的加密的PASSWORD,其形式如下:

2個字節的頭0x0100(固定)  4個字節的HASH加秘KEY20個字節的HASH120個字節的HASH2


如我取出的一個例子:

fx:0x0100 1751857F DFDEC4FB618D8D18EBA5A27F615639F607CD46BE DFDEC4FB618D8D18EBA5A27F615639F607CD46BE    固定    補充KEY   HASH1                          HASH2口令是:123456


SQL首先用4個字節的HASH加秘KEY補上其兩處口令的緩沖,一個為大寫,一個為小寫。然后其加密過程如下C函數:

CryptAcquireContextW(&hProv,NULL,L("Microsoft Base Cryptographic Provider v1.0"),1,0xf0000000);    CryptCreateHash(hProv,0x8004,NULL,NULL,&hhash);    CryptCreateHash(hProv,0x8004,NULL,NULL,&hHash);005F9DFE:    CryptHashData(hhash,passwdbuf,0x12,NULL);passwdbuf是小寫的passwd緩沖區,然后附加一個KEY,如上例子就是對    {'1','2''3''4''5''6',0x17,0x51,0x85,0x7F}這樣的一個字串進行HASH加密    CryptHashData(hHash,PASSWDBUF,0x12,NULL);PASSWDBUF是大寫的passwd緩沖區,然后附加一個KEY 005F9E3E:    CryptGetHashParam(hhash,2,&passwdout,&outlen,0);取出passwdbuf是小寫的passwd的加密值    CryptGetHashParam(hHash,2,&PASSWDOUT,&OUTLEN,0);



取出passwdbuf是大寫的passwd的加密值這兩個相加就是真正的數據庫中的PASSWORD加密字段.

為什么說以上方法是脆弱的呢?其實其真正的加密長度生成只有20個字節。

小寫口令的HASH1+大寫口令的HASH1拼接的40位HASH值的安全度還不如一個直接20位的HASH值來得安全。因為大家都知道這兩個值的因果關系,

提供給了解密者更多的信息。

如因為其算法一樣,如果HASH1=HASH2,就可以判斷口令肯定是未使用字母,只使用了數字和符號的口令,如上取出的123456口令的HASH,兩個HASH完全相等。

就是使用了字母,其知道補充的KEY,算法,兩個加密字串的關系,其解應該也是大大的簡化了。

關鍵字:SQL SERVER、數據庫、服務器

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站