對入侵者來說,獲取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 不用擔心,你再開...