buuctf 刷題開始~撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。
1.摩絲
被坑了一小下,解出來是

但是它不對(duì),然后查了一下正確的摩爾斯電碼發(fā)現(xiàn)全是大寫……我??行叭你說得對(duì)。無語

2.lmhash
buuctf Windows系統(tǒng)密碼和權(quán)限獲得第一步都是系統(tǒng)中的密碼使用hash加密。
先看看linux中的:
/etc/shadow 文件,用于存儲(chǔ) Linux 系統(tǒng)中用戶的密碼信息,又稱為“影子文件”。
/etc/shadow 文件只有 root 用戶擁有讀權(quán)限,其他用戶沒有任何權(quán)限,這樣就保證了用戶密碼的安全性。
同 /etc/passwd 文件一樣,文件中每行代表一個(gè)用戶,同樣使用 ":" 作為分隔符,不同之處在于,每行用戶信息被劃分為 9 個(gè)字段。每個(gè)字段的含義如下:
用戶名:加密密碼:最后一次修改時(shí)間:最小修改時(shí)間間隔:密碼有效期:密碼需要變更前的警告天數(shù):密碼過期后的寬限時(shí)間:賬號(hào)失效時(shí)間:保留字段
重點(diǎn):加密密碼字段
這里保存的是真正加密的密碼。目前 Linux 的密碼采用的是 SHA512 散列加密算法,原來采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等級(jí)更高,也更加安全。
注意,這串密碼產(chǎn)生的亂碼不能手工修改,如果手工修改,系統(tǒng)將無法識(shí)別密碼,導(dǎo)致密碼失效。很多軟件透過這個(gè)功能,在密碼串前加上 "!"、"*" 或 "x" 使密碼暫時(shí)失效。
所有偽用戶的密碼都是 "!!" 或 "*",代表沒有密碼是不能登錄的。當(dāng)然,新創(chuàng)建的用戶如果不設(shè)定密碼,那么它的密碼項(xiàng)也是 "!!",代表這個(gè)用戶沒有密碼,不能登錄。
Windows hash由二部分組成,分別是LM HASH&NT HASH。Windows系統(tǒng)關(guān)于hash的組成如下:
用戶名稱:RID: LM-HASH值:NT-HASH值
LM HASH生成規(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二組,分別作為DES key為“KGS!@#$%”進(jìn)行加密。
7.將二組DES加密后的編碼拼接,得到最終LM HASH值。
NT hash生成原理
IBM設(shè)計(jì)的LM Hash算法存在幾個(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
從ASClI串轉(zhuǎn)換成Unicode串時(shí),使用little-endian序,微軟在設(shè)計(jì)整個(gè)SMB協(xié)議時(shí)就沒考慮過big-endian序,ntoh0、hton0函數(shù)不宜用在SMB報(bào)文解碼中。0×80之前的標(biāo)準(zhǔn)ASCII碼轉(zhuǎn)換成Unicode碼,就是簡單地從0x變成0×00。此類標(biāo)準(zhǔn)ASCIl串按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單向哈希-
32ED87BDB5FDC5E9 CBA88547376818D4,就得到了最后的NTLM Hash
NTLM Hash:32ED87BDB5FDC5E9CBA88547376818D4