Windows系統Hash密碼值知識

2021-07-15 02:32:39 字數 4879 閱讀 7297

對入侵者來說,獲取windows的口令是整個攻擊過程至關重要的一環,擁有系統原來使用者的口令,將使得內網滲

透和守控更加容易。windows系統中的hash密碼值主要有lm-hash以及ntlm-hash值兩部分構成,一旦入侵者

獲 ...

對入侵者來說,獲取windows的口令是整個攻擊過程至關重要的一環,擁有系統原來使用者的口令,將使得

內網滲透和守控更加容易。windows系統中的hash密碼值主要有lm-hash以及ntlm-hash值兩部分構成,

一旦入侵者獲取了系統的hash值,通過lc5以及彩虹表等破解工具可以很快的獲取系統的密碼。為此安天365

團隊(www.antian365.com)特別針對系統口令攻擊與防範展開專題進行研究,本文主要作為其中的乙個子課題,

**如何使用gethashes工具來獲取系統的hash值,並對hash值的生成原理等知識進行了介紹,最後還介紹

了一些有關hash破解方面的技巧。

一、hash基本知識

1.hash定義

hash,一般翻譯為「雜湊」,也有直接音譯為「雜湊」的,就是把任意長度的輸入(又叫做預對映,pre-image),

通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是雜湊值的空間通

常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一的確定輸入值。簡單的說

就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。

2.hash的應用

hash主要用於資訊保安領域中加密演算法,它把一些不同長度的資訊轉化成雜亂的128位的編碼裡,叫做

hash值。也可以說,hash就是找到一種資料內容和資料存放位址之間的對映關係。

3.hash演算法在密碼上的應用

md5 和 sha1 可以說是目前應用最廣泛的hash演算法,而它們都是以 md4 為基礎設計的。那麼他們都是

什麼意思呢?這裡簡單說一下:

(1)md4

md4(rfc 1320)是 mit 的 ronald l. rivest 在 1990 年設計的,md是 message digest 的縮寫。它適

用在32位字長的處理器上用高速軟體實現,它是基於 32 位運算元的位操作來實現的。

(2) md5

md5(rfc 1321)是 rivest於2023年對md4的改進版本。它仍以512位分組來輸入,其輸出是4個32位

字的級聯,與 md4 相同。md5比md4來得複雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面

表現更好

(3)sha1 及其他

sha1是由nist nsa設計為同dsa一起使用的,它對長度小於264的輸入,產生長度為160bit的雜湊值,

因此抗窮舉(brute-force)性更好。sha-1 設計時基於和md4相同原理,並且模仿了該演算法。

hash演算法在資訊保安方面的應用主要體現在以下的3個方面:

(1) 檔案校驗

我們比較熟悉的校驗演算法有奇偶校驗和crc校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上

能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。 md5 hash演算法的「數字指紋」特性,使

它成為目前應用最廣泛的一種檔案完整性校驗和(checksum)演算法,不少unix系統有提供計算md5 checksum的

命令。(2)數字簽名

hash 演算法也是現代密碼體系中的乙個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協

議中,單向雜湊函式扮演了乙個重要的角色。對hash值,又稱「數字摘要」進行數字簽名,在統計上可以認為與

對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。

(3)鑑權協議

鑑權協議又被稱作挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全

的方法。

二、windows下hash密碼值

1. windows系統下的hash密碼格式

windows系統下的hash密碼格式為:使用者名稱:rid:lm-hash值:nt-hash值,例如:

administrator:500:c8825db10f2590eaaad3b435b51404ee:683020925c5d8569c23aa724774ce6cc:::表

示使用者名稱稱為:administrator

rid為:500

lm-hash值為:c8825db10f2590eaaad3b435b51404ee

nt-hash值為:683020925c5d8569c23aa724774ce6cc

2.windows下lm hash值生成原理

假設明文口令是「welcome」,首先全部轉換成大寫「welcome」,再做將口令字串大寫轉後後的字串變

換成二進位制串:

「welcome」 -> 57454c434f4d4500000000000000

技巧:可以將明文口令複製到ultraedit編輯器中使用二進位制方式檢視即可獲取口令的二進位制串。

說明:如果明文口令經過大寫變換後的二進位制字串不足14位元組,則需要在其後新增0x00補足14位元組。

然後切割成兩組7位元組的資料,分別經str_to_key()函式處理得到兩組8位元組資料:

57454c434f4d45 -str_to_key()-> 56a25288347a348a

00000000000000 -str_to_key()-> 0000000000000000

這兩組8位元組資料將做為deskey對魔術字串「kgs!@#$%」進行標準des加密

"kgs!@#$%" -> 4b47532140232425

56a25288347a348a -對4b47532140232425進行標準des加密-> c23413a8a1e7665f

0000000000000000 -對4b47532140232425進行標準des加密-> aad3b435b51404ee

將加密後的這兩組資料簡單拼接,就得到了最後的lm hash

lm hash: c23413a8a1e7665faad3b435b51404ee

關於str_to_key()函式見最後附錄1

3. windows下ntlm hash生成原理

從ibm設計的lm hash演算法存在幾個弱點,微軟在保持向後相容性的同時提出了自己的挑戰響應機制,

ntlm hash應運而生。假設明文口令是「123456」,首先轉換成unicode字串,與lm hash演算法不同,這次不

需要新增0x00補足14位元組

"123456" -> 310032003300340035003600

從ascii串轉換成unicode串時,使用little-endian序,微軟在設計整個smb協議時就沒考慮過big-endian

序,ntoh*()、hton*()函式不宜用在smb報文解碼中。0x80之前的標準ascii碼轉換成unicode碼,就是簡單

地從0x??變成0x00??。此類標準ascii串按little-endian序轉換成unicode串,就是簡單地在原有每個位元組之

後新增0x00。對所獲取的unicode串進行標準md4單向雜湊,無論資料來源有多少位元組,md4固定產生128-bit

的雜湊值,

16位元組310032003300340035003600 -進行標準md4單向雜湊-> 

32ed87bdb5fdc5e9cba88547376818d4

就得到了最後的ntlm hash

ntlm hash: 32ed87bdb5fdc5e9cba88547376818d4

與lm hash演算法相比,明文口令大小寫敏感,無法根據ntlm hash判斷原始明文口令是否小於8位元組,

擺脫了魔術字串"kgs!@#$%"。md4是真正的單向雜湊函式,窮舉作為資料來源出現的明文,難度較大

str_to_key()函式,的c語言描述程式:

#include

#include

#include /*

* 讀取形如"aabbccddeeff"這樣的16進製制數字串,主調者自己進行形參的邊界檢查*/

static void readhexstring ( const unsigned char *src, unsigned char *dst, unsigned int len )

return;

}  /* end of readhexstring */

/* * from the samba team's source/libsmb/smbdes.c */

static void str_to_key ( const unsigned char *str, unsigned char *key )

return;

}  /* end of str_to_key */

int main ( int argc, char * argv )

memset( buf_0, 0, sizeof( buf_0 ) );

memset( buf_1, 0, sizeof( buf_1 ) );

i = strlen( argv[1] ) / 2;

readhexstring( argv[1], buf_0, i );

for ( i = 0; i < sizeof( buf_0 ); i++ )

fprintf( stderr, "\n" );

str_to_key( buf_0, buf_1 );

str_to_key( buf_0 + 7, buf_1 + 8 );

str_to_key( buf_0 + 14, buf_1 + 16 );

for ( i = 0; i < sizeof( buf_1 ); i++ )

fprintf( stderr, "\n" );

return( exit_success );

}  /* end of main */

PE修復Windows系統密碼

from 本文以winpe為例,介紹修改密碼的方法。2.用光碟或u盤啟動電腦,通過選單欄選擇啟動winpe系統。3.進入winpe系統後,選擇 開始 程式 windows系統維護 windows使用者密碼修復 選單。4.在後續的選擇windows目錄一步,選擇系統目錄,比如 c windows 然後...

PE修復Windows系統密碼

from 本文以winpe為例,介紹修改密碼的方法。2.用光碟或u盤啟動電腦,通過選單欄選擇啟動winpe系統。3.進入winpe系統後,選擇 開始 程式 windows系統維護 windows使用者密碼修復 選單。4.在後續的選擇windows目錄一步,選擇系統目錄,比如 c windows 然後...

windows系統 忘記mysql密碼解決方案

1 終止mysqld服務 用管理員身份進入cmd,否則不能正常進行下去 taskkill f im mysqld.exe 2 跳過許可權檢查啟動mysql mysqld skip grant tables 若顯示如下結果 則用如下命令 3 這時你會看到控制台列印,且一直是此狀態 4 不用擔心,你再開...