Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入(又叫做預(yù)映射,pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。
常用hash算法的介紹:
(1)MD4
MD4(RFC1320)是MIT的RonaldL.Rivest在1990年設(shè)計(jì)的,MD是MessageDigest(消息摘要)的縮寫。它適用在32位字長的處理器上用高速軟件實(shí)現(xiàn)——它是基于32位操作數(shù)的位操作來實(shí)現(xiàn)的。
(2)MD5
MD5(RFC1321)是Rivest于1991年對(duì)MD4的改進(jìn)版本。它對(duì)輸入仍以512位分組,其輸出是4個(gè)32位字的級(jí)聯(lián),與MD4相同。MD5比MD4來得復(fù)雜,并且速度較之要慢一點(diǎn),但更安全,在抗分析和抗差分方面表現(xiàn)更好。
(3)SHA-1及其他
SHA1是由NISTNSA設(shè)計(jì)為同DSA一起使用的,它對(duì)長度小于264的輸入,產(chǎn)生長度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1設(shè)計(jì)時(shí)基于和MD4相同原理,并且模仿了該算法。
Hash算法在信息安全方面的應(yīng)用主要體現(xiàn)在以下的3個(gè)方面:
(1)文件校驗(yàn)
我們比較熟悉的校驗(yàn)算法有奇偶校驗(yàn)和CRC校驗(yàn),這2種校驗(yàn)并沒有抗數(shù)據(jù)篡改的能力,它們一定程度上能檢測(cè)并糾正數(shù)據(jù)傳輸中的信道誤碼,但卻不能防止對(duì)數(shù)據(jù)的惡意破壞。
MD5Hash算法的”數(shù)字指紋”特性,使它成為目前應(yīng)用最廣泛的一種文件完整性校驗(yàn)和(Checksum)算法,不少Unix系統(tǒng)有提供計(jì)算md5checksum的命令。
(2)數(shù)字簽名
Hash算法也是現(xiàn)代密碼體系中的一個(gè)重要組成部分。由于非對(duì)稱算法的運(yùn)算速度較慢,所以在數(shù)字簽名協(xié)議中,單向散列函數(shù)扮演了一個(gè)重要的角色。對(duì)Hash值,又稱”數(shù)字摘要”進(jìn)行數(shù)字簽名,在統(tǒng)計(jì)上可以認(rèn)為與對(duì)文件本身進(jìn)行數(shù)字簽名是等效的。而且這樣的協(xié)議還有其他的優(yōu)點(diǎn)。
(3)鑒權(quán)協(xié)議
如下的鑒權(quán)協(xié)議又被稱作挑戰(zhàn)–認(rèn)證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。以上就是一些關(guān)于hash以及其相關(guān)的一些基本預(yù)備知識(shí)。
windowshash
Windowshash由二部分組成,分別是LMHASH&NTHASH。Windows系統(tǒng)關(guān)于hash的組成如下:
用戶名稱:RID:LM-HASH值:NT-HASH值
2.1Windows下LMHASH生成原理
LMHASH生成規(guī)則如下:
1.用戶的密碼被限制為最多14個(gè)字符。
2.用戶的密碼轉(zhuǎn)換為大寫。
3.系統(tǒng)中用戶的密碼編碼使用了OEM內(nèi)碼頁
4.密碼不足14字節(jié)將會(huì)用0來補(bǔ)全。
5.固定長度的密碼被分成兩個(gè)7byte部分。每部分轉(zhuǎn)換成比特流,在分7bit為一組末尾加0,組成新的編碼
6.上步驟得到的8byte二組,分別作為DESkey為“KGS!@#$%”進(jìn)行加密。
7.將二組DES加密后的編碼拼接,得到最終LMHASH值。
實(shí)例演示:
·假設(shè)明文口令是“admin”,首先全部轉(zhuǎn)換成大寫“ADMIN”,
·密碼字符串大寫后變換成十六進(jìn)制串:41444D494E
·轉(zhuǎn)換后的十六進(jìn)制字符串按照二進(jìn)制計(jì)算只有40bit,為了滿足14字節(jié)的要求,所以需要補(bǔ)全72bit的二進(jìn)制0,得最終補(bǔ)全后十六進(jìn)制為:41444D494E000000000000000000
·將上述編碼(41444D494E000000000000000000)分成2組7byte的數(shù)據(jù),分別為:
41444D494E0000
00000000000000
·將每一組7byte的十六進(jìn)制轉(zhuǎn)換為二進(jìn)制,每7bit一組末尾加0,在轉(zhuǎn)換成十六進(jìn)制組成得到2組8byte的編碼:
41444D494E0000—>40A212A894700000
00000000000000—>0000000000000000
·利用上面計(jì)算出來的2組編碼,作為DES加密key分別對(duì)“KGS!@#$%”(換算成十六進(jìn)制:4B47532140232425)字符,進(jìn)行DES加密,如下:
40A212A894700000—-DES加密—-F0D412BD764FFE81
0000000000000000—-DES加密—-AAD3B435B51404EE
·將二組值拼接,最終得到LMHASH值為:
F0D412BD764FFE81AAD3B435B51404EE
驗(yàn)證如下圖:
2.2Windows下NTLMHash生成原理
IBM設(shè)計(jì)的LMHash算法存在幾個(gè)弱點(diǎn),微軟在保持向后兼容性的同時(shí)提出了自己的挑戰(zhàn)響應(yīng)機(jī)制,NTLMHash便應(yīng)運(yùn)而生。假設(shè)明文口令是”123456″,首先轉(zhuǎn)換成Unicode字符串,與LMHash算法不同,這次不需要添加0補(bǔ)足14字節(jié)
“123456”->310032003300340035003600。
從ASCII串轉(zhuǎn)換成Unicode串時(shí),使用little-endian序,微軟在設(shè)計(jì)整個(gè)SMB協(xié)議時(shí)就沒考慮過big-endian序,ntoh*()、hton*()函數(shù)不宜用在SMB報(bào)文解碼中。0×80之前的標(biāo)準(zhǔn)ASCII碼轉(zhuǎn)換成Unicode碼,就是簡單地從0x??變成0×00??。此類標(biāo)準(zhǔn)ASCII串按little-endian序轉(zhuǎn)換成Unicode串,就是簡單地在原有每個(gè)字節(jié)之后添加0×00。對(duì)所獲取的Unicode串進(jìn)行標(biāo)準(zhǔn)MD4單向哈希,無論數(shù)據(jù)源有多少字節(jié),MD4固定產(chǎn)生128-bit的哈希值,16字節(jié)310032003300340035003600-進(jìn)行標(biāo)準(zhǔn)MD4單向哈希->32ED87BDB5FDC5E9CBA88547376818D4,就得到了最后的NTLMHash
NTLMHash:32ED87BDB5FDC5E9CBA88547376818D4。
與LMHash算法相比,明文口令大小寫敏感,無法根據(jù)NTLMHash判斷原始明文口令是否小于8字節(jié),擺脫了魔術(shù)字符串”KGS!@#$%”。MD4是真正的單向哈希函數(shù),窮舉作為數(shù)據(jù)源出現(xiàn)的明文,難度較大。
驗(yàn)證如下:
開始破解
3.1抓取windowshash
在windows中分別用了LMHASH和NTLMHASH對(duì)密碼進(jìn)行了加密,所以抓取任意一個(gè)HASH都可以破解密碼,只不過如果二個(gè)HASH都可以抓到,密碼的破譯成功率會(huì)大大提升。經(jīng)常使用抓windowshash的工具很多,像SAMInside,gethash等等。個(gè)人比較傾向于使用SAMinside工具,該工具不僅可以在線抓取windowshash還可以導(dǎo)入存儲(chǔ)windowshash的sam等文件獲取hash值。
文件位置:
C:\windows\system32\config\SAM
在windowsxp,server2003之前包括xp&2003的系統(tǒng)都可以通過工具抓取到完整的LMHASH&NTHASH的。這樣就可以直接通過在線的破譯網(wǎng)站進(jìn)行密碼破解。
但是之后的系統(tǒng)可以改變一些設(shè)置讓操作系統(tǒng)存儲(chǔ)LMHASH值到SAM文件中。方便我們的抓取。
3.1.1xp下hash抓取及破解(略)
3.1.2win7下hash抓取及破解
步驟一:導(dǎo)入本地的用戶hash值
看不清圖片,用戶名為nic的NTHASH為:209C6174DA490CAEB422F3FA5A7AE634
可以看到只能抓取到NTHASH值,我們也可以通過NTHASH去破解windows密碼的,因?yàn)長MHASH和NTHASH只是二種不同的加密方式,針對(duì)同一個(gè)密碼。
看到了吧,沒有LMHASH照樣可以破密碼的喲。只是有了LMHASH破解成功率會(huì)多點(diǎn)。
但是當(dāng)通過NTHASH無法破譯密碼的時(shí)候,我們就要想辦法把LMHASH給搞出來,通過更改本地安全策略設(shè)置,具體步驟如下:
但是這個(gè)法子有點(diǎn)局限就是,必須下一次更改密碼后才生效。唉~
改完密碼后再抓:
LMHASH:A0A9F8A5B5510FFDE72C57EF50F76A05
NTHASH:6097374CDF87C142A7F98798EBF4B402
我們先針對(duì)每一個(gè)生成的HASH進(jìn)行破解:
LMHASH破解:
只有LM,破解出來的是大寫,我的是小寫的。不知道是那里的問題。
NTHASH破解:(ps:換個(gè)長一點(diǎn)的密碼就付費(fèi)了)
雙劍合璧,LMHASH&NTHASH破解:
輸入格式,LMHASH:NTHASH,正確密碼就出來了