域用户更改密码提示拒绝访问_AD域中的ACL攻防探索

f494b1fcbc5e9a4b1e3ac04e982d4e4b.png前言关于域内ACL的攻防近两年经常被人所提起,同时也产生了很多关于域内ACL相关的工具和攻击方式,本文将会从ACL的概念谈起,然后介绍几种不同的域内攻击方式以及如何监测和防御对于ACL的攻击。ACL的概念和作用ACM:

首先想要了解ACL首先需要了解Access Control Model(访问控制模型),根据官网

(https://docs.microsoft.com/zh-cn/windows/win32/secauthz/access-control-model)给出的定义:
访问控制模型能够控制进程访问一些安全对象,或者是控制进程执行各种系统管理任务。原文:The access control model enables you to control the ability of a process to access securable objects or to perform various system administration tasks。
用通俗一点的话来说ACM就是一个判断你在一个档案馆(在这里可以理解为整个域)里是否有权限打开某个档案抽屉(用户对象、用户组对象、Computer对象),并且是否能在这个档案抽屉中取走、存放、修改档案(读、写、修改)的一个模型。
访问模型包含哪些部分:
1、Access Tokens(访问tokens)2、Security Descriptors(安全描述符)   a、Discretionary Access Control List (DACL)   b、System Access Control List (SACL)Access Control Lists(ACL)Access Control Entries(ACE)Access Rights and Access Masks(访问权限和访问掩码)
Access Token:当线程与安全对象交互或尝试执行需要特权的系统任务时,系统使用访问令牌来标识用户,访问令牌包括用户的SID、所在组的SID等等信息:
The security identifier (SID) for the user's accountSIDs for the groups of which the user is a memberA logon SID that identifies the current logon sessionA list of the privileges held by either the user or the user's groupsAn owner SIDThe SID for the primary groupThe default DACL that the system uses when the user creates a securable object without specifying a security descriptorThe source of the access tokenWhether the token is a primary or impersonation tokenAn optional list of restricting SIDsCurrent impersonation levelsOther statistics

Security Descriptors安全描述符

SID(Security Identifiers)即安全描述符。
安全描述符标识对象的所有者,并包含以下访问控制列表:
1、Discretionary Access Control List (DACL) 自由访问控制列表
2、System Access Control List (SACL) 系统访问控制列表
每一种控制列表中都存在若干条ACE(Access Control Entries)15e415306feae7a0f7a59c48b65995d9.pnghttps://wenku.baidu.com/view/dba5b16e1eb91a37f1115cec.html这个链接下的一个图可以很清晰的说明什么是安全描述符:6cbfc23b28a226a816956a3cc64cd375.png可以看到安全描述符由Header、SID和DACL、SACL组成DACL高级安全设置中的权限就是DACL的列表ee8a5f7492a7aa8a1b006c85f4f6ce77.pngSACL

高级安全设置中的审核就是SACL的列表

3e1c13c0e6a77ed65dfa8e9b9ec1f44a.png其中红色圈出来的每一条都是一条ACEACEACE是针对特定用户或特定组的单个权限授予(或拒绝权利)的配置结构。ACE有许多不同类型,但是在Active Directory的权限中,只有四种不同的含义,两种分别用于授予和拒绝权限。1、Access Allowed ACE:0852681f9df11d39310cdb0abbd8d110.png这种类型的ACE类型始终为0,设计目的是为了将权限轻松的分配给整个对象。ACE Flags确定这是继承权限还是显式给定的权限。所有此对象的子对象都会继承为ACE Type为0。2、Access Allowed Object ACE:06724f514fdad64c4e3fdec6e01ed8d2.png此类ACE的类型始终为5,用于指定对象的某些属性的权限3、Access Denied ACE4edbbb1dc5ee3e3e8d20c07117836750.png此类ACE的值始终为1,用于简单的撤销整个对象的权限。ACE标志确定这是继承还是显示分配的撤销权限,并且所有的子对象都会继承这个权限。4、Access Denied Object ACE7386c24ac70b7f14438f44eb471152ba.png此类ACE的类型始终为6,此对象可以撤销ACE特殊权限或有限的权限,例如针对某些属性撤销,这里提供的有和类型为5的ACE相同的例子(Object Type GUID),Flags字段指示是否存在对象类型字段或者继承类型字段,或者两者都有。Access Mask在ACE中有Access Mask这个字段,它代表着此条ACE所对应的权限,比如完全控制(GenericAll)、修改密码(ResetPassword)、写入属性(WriteMembers)等等。dff8d1726171dc3b92dc662e4e8eb4c1.pngTrusteesTrustees的意思为受委托人,受托者是一个ACE所应用到的用户账户,组账户或者是登录会话。也就是说,谁是某一个ACE的受托者,那么这条ACE中的Access Mask所对应的权限(可能是拒绝可能是通过)就会赋予受托者。比如下面这一条的受委托人实际上就是zhangs账号。3df6738c613120767488fc35c28846af.png

安全描述符枚举

上面说了什么是安全描述符,那么安全描述符枚举就是在域中如何去枚举某个用户或者是某个域内对象的安全描述符的过程。
通过.NET中的System.DirectoryServices.DirectorySearcher和System.DirectoryServices.SecurityMasks类可以对域内的安全描述符进行枚举,比如下面的这段powershell代码就可以枚举域内用户xiaom的ACE
$Searcher = New-ObjectSystem.DirectoryServices.DirectorySearcher('(samaccountname=xxm)')$Searcher.SecurityMasks =[System.DirectoryServices.SecurityMasks]::Dacl -bor [System.DirectoryServices.SecurityMasks]::Owner$Result = $Searcher.FindOne()$Result.Properties.ntsecuritydescriptor[0].gettype()$ADSecurityDescriptor = New-ObjectSystem.DirectoryServices.ActiveDirectorySecurity$ADSecurityDescriptor.SetSecurityDescriptorBinaryForm($Reslt.Properties.ntsecuritydescriptor[0])$ADSecurityDescriptor$ADSecurityDescriptor.Access
这里枚举的是安全描述符中的DACL中的每一个ACE(一共13条,和DACL中对应):e8174220d5b17cad1478db6f4288b98c.pngPowerviewer遍历:
在Powerview的结果中不是根据每一条ACE来显示的,而是把每一个ACE中的每一个权限单独显示一条,所以结果的个数不等于DACL列表中的数量。
. .\powerview.ps1 Get-DomainObjectAcl -Identity xxm -ResolveGUIDs
4e2998942ef13e59dc875e2a2c12d72f.png

任何经过域验证的用户都可以枚举默认域中大多数对象的安全描述符。

线程与安全对象之间的交互:

在Access check中,系统将线程访问令牌中的安全信息与安全对象安全描述符中的安全信息进行比较。每一个进程都有一个primary token,用于描述与该进程关联的用户账户的安全上下文。默认情况下,当进程的线程与安全对象进行交互时,系统将使用primary token。
系统检查对象的DACL,查找应用于用户的ACE,并从线程的访问令牌中分组SID,系统会检查每个SID,知道授予或拒绝访问,或者知道没有其他ACE要检查为止。

144dc28c0740dc86b809c333e69affa1.png

The Security Reference Monitor(SRM 安全参考监视器)

The Security Reference Monitor直译为SRM 安全参考监视器,在ACL中排列顺序继承等等都可能影响最后的结果,而SRM就是起到对ACE顺序的评估作用。可参考:
https://networkencyclopedia.com/security-reference-monitor/
https://ldapwiki.com/wiki/Security%20Reference%20Monitor当登录的用户访问对象时,安全性参考监视器将检查对象的安全性描述符,以查看MSFT访问令牌中列出的SID是否与ACE条目匹配。如果存在匹配项,则匹配ACE中列出的安全权限将应用于该用户。当“域管理员”组的成员请求更改用户密码的能力时,SRM必须决定是否允许该请求。SRM会评估目标用户的DACL,确定“域管理员”组(进而是该组的成员)对用户具有完全控制权。评估对象的DACL时,SRM将按规范顺序读取ACE,ACE的排序如下:
( 1 ) 明确定义的DENY ACE。
( 2 ) 明确定义的ALLOW ACE。
( 3 ) 继承的DENY ACE。
( 4 ) 继承的ALLOW ACE。SRM这个东西知道它的作用就可以了,不需要太深究。可参考:https://docs.microsoft.com/zh-cn/windows/win32/secauthz/dacls-and-aces特殊权限的实例ACL是一个访问控制列表,是整个访问控制模型(ACM)的实现的总称。所以这里说的特殊权限是指一些非常有利用价值的权限:
GenericAllGenericWriteWriteOwner(修改所有者)WriteDACL:写DACL(有一个解释是WriteDACL是在攻击链中启用其他权利的权利)AllExtendedRightsAddMembers:将任意用户、组或计算机添加到目标组。ForceChangePassword:强制更改密码,在不知道当前密码的情况下更改目标用户的密码。

GenericAll

GenericAll在安全描述符中的Access Mask中进行标识,是包含了所有其他权限的权限。授予对目标对象的完全控制权,包括WriteDacl 和 WriteOwner 特权。可以使用PowerView中的Add-DomainObjectAcl进行利用。下面举例看一下如何给一个User对象添加一条GenericAll的ACE

GenericAll on User

使用zhangs账户和xxm账户做演示:
两个账户的SID分别为:
zhangs:S-1-5-21-3305457972-2547556381-742707129-1604xxm:S-1-5-21-3305457972-2547556381-742707129-1105
这里使用zhangs账户,所在的主机是win2012,然后使用PowerView的函数Get-ObjectACL查看对zhangs具有GenericAll权限的项
Get-ObjectAcl -SamAccountName zhangs -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}
993bf692a6b29d0183dabd1cf02707da.png在看一下xxm的
Get-ObjectAcl -SamAccountName xxm -ResolveGUIDs | ?{$_.ActiveDirectoryRights -eq "GenericAll"}
64a1b269032bd170ea83a9d30b52d561.png然后在域控dc2012上设置xxm账户的DACL,添加对xxm的完全控制(GenericAll)权限,也可以使用powerviewer命令:
Add-DomainObjectAcl -TargetIdentity xxm  -PrincipalIdentityzhangs -Rights All -Verbose
ab7bf9734304afdc6ac2e9e32074473b.png再在win2012上使用之前的命令查看ActiveDirectoryRights属性等于GenericAll的acl发现多了一条06e78aaa9a41788d4a82d3bffbcc5714.png这条ACL的含义是:
zhangs账户对xxm账户具有完全管理(GenericAll)权限
在设置ACL之前和设置之后使用zhangs账户权限设置xxm账户的密码可以看到区别(设置完成之后会立即生效)
net user xxm admin123! /domain
0d0f50566889b159cea2292bc83df6a2.png此时再使用已经修改的密码结合runas命令就可以直接创建一个xxm权限的cmd窗口:
runas /noprofile /user:test\xxm cmd
运行之后会弹出一个xxm权限的cmd窗口,即可使用xxm权限执行任意命令360baa497740a151ad98a24cf98ed24c.pngGenericAll on Group环境和上文相同,GenericAll on Group说的是对一个组有GenericAll权限,查看用户组domain admins:
Get-NetGroup "domain admins"
44192f3f9c89f7a23895c732eb65f59e.png此时zhangs和xxm均为域内普通权限用户,然后在域管理员组domain admins的DACL中加入zhangs的GenericAll权限:
Add-DomainObjectAcl  -TargetIdentity "domain admins" PrincipalIdentity xiaom -Rights  all -Verbose
c8291b72aefa2f92685a78a9c0ecdc87.png然后再win2012上使用命令查看domain admins的权限
Get-ObjectAcl  -ResolveGUIDs| ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=test,DC=local"}
可以看到在结果中有一条SID为zhangs的SID,权限为GenericAll555db1de79e05429288a3f71256cca6c.png然后尝试将xxm加入domain admins组:
net group "domain admins" xxm /add /domain
可以看到已经成功将xxm加入管理员组,然后再将xxm移除出domain admins了,并将DACL中的内容删除之后再尝试加入,发现已经被拒绝。e9f852575e32b50fbc3e2f1797f4c78a.png在zhangs具有这个权限的时候使用Powerviewer能够达到相同的添加用户到某个组的目的,不过使用net命令更方便一点
Add-DomainGroupMember -Identity 'Domain Admins' -Members'test'

GenericAll/GenericWrite/Write on Computer

这个权限能够对Computer的属性进行改写,利用方式是结合Kerberos RDBC来进行攻击这个具有可写权限的计算机。比如此时对Win2012这台主机具有写权限,那么可以使用Powermad工具创建一个假的域内主机testrbcd,然后将Win2012主机的msDS-AllowedToActOnBehalfOfOtherIdentity字段设置为testrbcd$
Set-ADComputer win2012 PrincipalsAllowedToDelegateToAccount testrbcd$
然后使用Rubeus工具获取能够访问win2012特定SPN的票据。详情可参考:http://blog.leanote.com/post/ambition/95dac75ccad8。

GenericWrite

GenericWrite也是在Access Mask中进行标识,此权限能够更新目标对象的属性值,可以使用PowerView中的Set-DomainObject方法设置目标属性的值。92f10ec5caf430ae0e26baf3fabd5d9f.pngWriteDaclWriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。380ca4df001fa0d356b0916f7ffe7c5a.pngSelf (Self-Membership) on Group这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象)969dd2cca83d04d8ca33fc786914302a.png添加完之后可以使用zhangs的权限将zhangs自身添加到Domain Admins组:
net group "domain admins" zhangs /add /domain
e64251f833dd0779aad9068ec18e446a.pngSelf (Self-Membership) WritePropertyWriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限,在Domain Admins组里设置zhangs账户的WriteProperty权限:11a59ea4ef222c10b87f50a2caae8791.png然后使用zhangs账户权限可以将xxm账户加入Domain Admins组:
net group "domain admins" xxm /add /domain
337f64bfa583875b114cb657bcac843d.pngSelf (Self-Membership) on GroupWriteProperty on Group说的是对一个组具有WriteProperty权限的情况下,“写入全部属性”除了WriteProperty还包括了其他的权限:
CreateChild, DeleteChild, Self, WriteProperty, ExtendedRight, GenericRead, WriteDacl, WriteOwnercba975b3657bd3f06d07c28677f2206d.png在Domain Admins组的列表中添加写入全部属性,会生成一条新的ACE920f1474cc179e88f541729298d3fed9.png访问被标记为特殊,没有实际显示具体权限,测试添加此条ACE前后:f9aedfdb32b8a1aa41b8d8ad8a6d655b.pngWriteOwnerWriteOwner权限允许委托人修改对象的安全描述符的所有者部分。也就是说,假如用户A对administrator用户有这个权限,那么A能利用这个权限给自己附加其他的权限。9b2dde9c909155b4c4c430315765768c.png与ACL相关的攻击方式Exchange相关

Organization Management组

ce5ef93a9776f2aa5855cc1545493fca.pngOrganization Management组的的组描述为:
此管理角色组成员具有对 Exchange 对象及其在 Exchange 组织中的属性进行管理的权限。另外,成员还可以代表组织中的角色组和管理角色。
在安装Exchange时会创建这个组,赋予其访问Exchange相关活动的权限。除了能访问这些Exchange设置选项之外,该组的成员还可以修改其他Exchange安全组的组成员关系。比如Exchange Trusted Subsystem安全组。这个组是Exchange Windows Permissions安全组的成员之一。
Exchange Windows Permissions安全组具备当前域对象的writeDACL权限。也就是说只要成为Organization Management组的成员,我们就可以提升成为域管理员权限。复现流程可以参考:https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-%E4%BD%BF%E7%94%A8Exchange%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%89%B9%E5%AE%9A%E7%9A%84ACL%E5%AE%9E%E7%8E%B0%E5%9F%9F%E6%8F%90%E6%9D%83/

NTLMRelay与DCSync

NTLMRelay是一个已经存在了很久的攻击方式,在2018年和2019年分别爆出了关于Exchange的SSRF漏洞(CVE-2018-8581)+NTLMRelay攻击、CVE-2019-1040 NTLM协议漏洞的两种利用方式,传播最广泛的利用方式就是通过这两个漏洞对域对象的ACL进行改写,实现DCSync,从而获取krbtgt账户的HASH值。关于CVE-2018-8581和CVE-2019-1040在这里就不再说明,可以参考:
https://paper.seebug.org/833/
https://dirkjanm.io/abusing-exchange-one-api-call-away-from-domain-admin/?from=timeline&isappinstalled=0https://mp.weixin.qq.com/s/NEBi8NflfaEDL2qw1WIqZw下面主要说一下DCSync与ACL的关系。
DCSync需要什么权限
一个域内用户想要通过DCSync获取krbtgt的HASH值需要在域对象或者是域内的高权限组中有以下三种权限的其中一个:
复制目录更改Replicating Directory Changes (DS-Replication-Get-Changes) 复制目录更改所有Replicating Directory Changes All (DS-Replication-Get-Changes-All)(Exchange用的就是这个) 正在复制筛选集中的目录更改Replicating Directory Changes In Filtered Set (rare, only required in some environments)
这几个权限在DACL的设置页是可以看到的:41644341ce5a637deae503bfa667c635.png
如何给一个用户添加DCSync权限
除了上面的利用方式之外,如果想单纯的尝试给一个账号添加DCSync权限,或者是在有了高权限账号的情况下希望存留DCSync的后门,可以使用powerviewer.ps1的Add-DomainObjectAcl函数实现:
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=local" -PrincipalIdentity zhangs -Rights DCSync
执行之后会在域对象(”DC=test,DC=local”)的DACL中添加一条主体为zhangs的权限为”复制目录更改”的ACE:

55049badfc3c543c5dfe938a74253c88.png

1019db2f18cf1d8bd47277b15375651d.png然后使用zhangs进行DCSync,这里可以看到添加前后的变化:
.\mimikatz.exe "lsadump::dcsync /user:test\krbtgt" "exit"

注意,这里复制目录更改权限的ACE是添加在域对象DC=test,DC=local上的。Invoke-ACLPwn

运行时需要.NET 3.5环境,Windows Server 2012安装遇到报错,最后的解决方法(需要在网上下载SxS的安装包https://pan.baidu.com/share/init?surl=kDgdYerM0lVB32Q_IEqLUw提取码:gwzk):
dism.exe /online /enable-feature /all /featurename:NetFX3/Source:F:\Sources\SxS\
GitHub地址:https://github.com/fox-it/Invoke-ACLPwn
背景信息在发布者博客上:https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/
环境需要:
.NET 3.5 + sharphound.exe + mimikatz.exe
用法示例:
.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -NoDCSync.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -userAccountToPwn 'Administrator'.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -LogToFile.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -NoSecCleanup.\Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'testuser' -Domain 'xenoflux.local' -Password 'Welcome01!'
使用第一条标识了-NoDCSync(不会做DCSync的动作,只判断是否能够存在能够DCSync的权限)的命令:2637df2d82a4c7a7e4a977e6e410120e.png提示Got WriteDACL permissions.如果加上mimikatz.exe一起使用,可以看到直接获取了krbtgt的HASH值,也就是说已经可以直接生成黄金票据了:9144056e2e8bb3637ed308afdff6a2d3.png但是这个工具经过实际测试只适用于小型的域控,在有上百万条ACL的域内会出现跑了几天也跑不出结果的情况针对DACL的隐身方式通过隐藏账户可以掩盖主体本身,阻止防御者轻易的发现谁实际上拥有ACE中指定的权限。这种方式主要应对的是对于高危的ACL进行扫描行为。隐藏用户1、将要隐藏的用户所有者改为攻击者或者攻击者控制的账户
2、设置一条拒绝完全控制的ACE8478e084fc785d65768ff3d860a4f690.png点击应用之后所有用户都无法在外部访问查看此账户的ACL,包括administrator:
Get-DomainObjectAcl -Identity hideuser -domain test.local -Resolve
b2c77c92c41f12f6bf61d0e37e77cc76.png但是如上图所示,在ADSI编辑器中还是可以看到的,如果想要在ADSI编辑器中也看不到,那么就要将主体设置为用户本身,或者其他攻击者控制的账户:7f51b8d616991798621c71dcdc74a70c.png点击应用可以看到,即使在ADSI编辑器中也无法查询到:06279f4a8572fc553cd488621be24d71.png同时在AD用户和计算机中用户类型会变为未知:7274495ff9da224190cdc409176dbfbf.png此时这个账号无法删除和访问属性,但是仍然能够正常使用ccad3540cf9f262082c40057d013a632.pngf9aedfdb32b8a1aa41b8d8ad8a6d655b.png隐藏OU中所有的子对象直接添加一条拒绝Everyone的列出内容权限d61da6bde78eb022615cf75907f707b2.png然后再查看这个OU的时候会发现所有的用户都不显示。c2de32dc97267102a7cc157af803ad17.png同样,通过powerviewer也无法查看ACL:形形色色的ACL后门AdminSDHolderAdminSDHolder会将自身的ACL列表每隔一个小时向受保护的组中同步,所以如果在AdminSDHolder中添加一个ACE作为后门,则受保护的组中将会一直被同步策略。受保护的组有https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee361593(v=msdn.10)?redirectedfrom=MSDN:708e82c2ed609db4a2c22813b12990b8.png在AdminSDHolder的DACL中设置一条主体为zhangs,权限为完全控制的ACE
Add-DomainObjectAcl -TargetIdentity "CN=AdminSDHolder,CN=System,DC=test,DC=local" -PrincipalIdentity zhangs -Rights All
63cc26fe98fbc743c9935e845b48fed4.png不过这样也有一个坏处就是所有的受保护组的ACL中都会被添加上这一条作为后门的ACE,隐藏其中一个账户并不能起到作用,所以还是比较容易被发现的。并且添加时会产生一条ID为5136的事件日志。b01a0e51074970c120f50e9bc21f6ce8.png也可以通过修改注册表设置推送时间,这里设置为60s:
reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 60
60秒之后就可以使用xiaom权限添加任意用户到domain admins组
http://www.selfadsi.org/extended-ad/ad-permissions-adminsdholder.htm
https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-AdminSDHolder/关于LAPS的隐藏后门LAPS的全称是Local Administrator Password Solution,主要作用是将域内主机的本地管理员密码存储在LDAP中,作为计算机账户的一个机密属性,配合GPO实现自动定期修改密码,设置密码长度、强度等。LAPS通过首先将Active Directory架构扩展为包括两个新字段ms-MCS-AdmPwd(密码本身)和 ms-MCS-AdmPwdExpirationTime(密码过期时)来完成其方法。具体的配置和如何查询明文密码可以参考http://drops.xmd5.com/static/drops/tips-10496.html此时的环境:一个配置了LAPS的testwin7主机(属于testou)、一个域中的普通的测试账号zhangsdfff98682121f0c7d37801f8f6cb825f.png此时通过命令查看testwin7主机的本地administrator密码:
Get-AdmPwdPassword –ComputerName testwin7
在zhangs登录的主机上使用LAPS UI尝试获取testwin7的本地密码没有成功:a5846631f0a38a7510008baf5b28d514.png然后在testou中添加zhangs的读取密码的权限:
Set-AdmPwdReadPasswordPermission -Identity testou AllowedPrincipals zhangs
此时再在zhangs主机上尝试获取testwin7密码:540f82a894698f6090f68447e855f301.png能够成功获取,但是此时的zhangs的权限是能够通过Find-AdmPwdExtendedRights排查到的:
Find-AdmPwdExtendedRights -Identity testou IncludeComputers | fl
23555b4eeff16a127f8fa8891ec38e99.png解决方法是在testou中新建一个msImaging-PSPs类型的对象testmspsps,此类容器的权限不能被Find-AdmPwdExtendedRights所遍历,同时将testwin7移动到testmspsps中,然后在testmspsps的ACL中设置主体为zhangs的完全控制权限:a8b0c5aae141b01f4597e5cdf00ab840.png此时在zhangs中就可以获取testwin7的密码,并且不会被Find-AdmPwdExtendedRights这个命令遍历到:246ea4bfe59190aed1867c6846b429f9.png11850bc57ceebfe2eb668e750ddd7561.png这种方式的缺点在于需要移动域内主机所属的组。

针对域对象的后门

上面所说的后门都是针对User Objects或者Group Objects的,这里要说的是针对Domain Objects。通过在Domain对象的DACL中添加ACE能够赋予用户特定的权限。因为实现这个操作需要较高权限,所以可以使用,这里使用powerviewer.ps1的Add-DomainObjectAcl函数实现:
Add-DomainObjectAcl -TargetIdentity "DC=test,DC=local" -PrincipalIdentity zhangs -Rights DCSync
ad7da237fc8cc7f2345e41bc382a3e3e.png然后使用zhangs进行DCSync,这里可以看到添加前后的变化:
.\mimikatz.exe "lsadump::dcsync /user:test\krbtgt" "exit"
6133366bc5c157143250e6e6b30756d2.png

针对组策略对象的ACL

GPO中的ACL同样能够进行权限维持等操作,修改SYSVOL的属性,意味着主体可以修改GPO的设置。68a3635eb9e05569278ac38fb79cf466.png以域控组的组策略为例,可以在组策略管理中的委派选项中进行设置:be12e2027c098e67bf3c05825fd77a65.pngc0cd2a269785fc4f9e469e4b0c6bfd5d.png创建之后在对应的GPO文件夹下可以看到对应的权限:

15c9304ef08710aeda3d9417794a0fec.png

监测防御在域内修改ACL时会产生ID为5136的事件日志,可以通过日志分析平台进行检测和发现,可以通过匹配ObjectDN字段判断是否存在域内关键对象的ACL被修改0f0ef535f69ce25bbf5c5831822d2f7c.png上图是AdminSDHolder组被修改时的windows事件日志。这里需要兼顾的就是对于ACL对象的选择,确定哪些是关键组,以及是否存在漏掉的关键组。如果一个域里没有配置对域控中ACL日志的检查,那么几乎是没有办法防御的。小结本文主要说明了域内的ACL相关攻击手法,有一些已经广为人知,还有一些可能很少在实际的攻击中出现,如果有更好的思路和建议欢迎探讨。在windows的安全体系中ACL是至关重要的一环,并且在本地ACL方面也有很多的利用方式,比如硬链接结合权限问题进行提权的手法,这里不再赘述。

参考链接

http://www.selfadsi.org/extended-ad/ad-permissions-adminsdholder.htm
https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-AdminSDHolder/

http://www.harmj0y.net/blog/redteaming/abusing-active-directory-permissions-with-powerview/

https://www.specterops.io/assets/resources/an_ace_up_the_sleeve.pdf

原文来源:安全客3d79c7a73463a513f725975228174be8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go MySQL 多语句_八、MySQL经典查询语句-Go语言中文社区

student表course表score表teacher表1、 查询Student表中的所有记录的Sname、Ssex和Class列。select Sname,Ssex,Class from Student;2、 查询教师所有的单位即不重复的Depart列。select distinct Depart from Teacher3、 查询Student表的所有记录。select * from Student4、 查…

如何干净的删除vm_如何在macOS 10.15 Catalina绕过XProtect?

在macOS 10.15 Catalina中,Apple进行了许多安全性能地改进,包括通过使所有可执行文件都受XProtect扫描来加固系统,而不管文件是否带有com.apple.quarantine位标记。对于安全研究人员而言,这意味着不再像以前的macOS一样&#xff0…

activexobject对象不能创建_Oracle数据库用户管理之系统权限和对象权限

【关键术语】Privileges 权限System privileges 系统权限Object privileges 对象权限Grant 授予Revoke 撤消2.1 Oracle 权限概述2.1.1 权限的作用权限(privilege)是指执行特定类型 SQL 命令或访问其他模式对象的权利。Oracle 使用 权限来控制用户对数据的访问以及用户所能执行的…

【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)

以下内容纯是为了熟悉《算法导论》中的内容,高手可略过,其中涉及的书本内容的版权归原作者、译者、出版社所有 求最长公共子序列,一个典型的 动态规划题 和 字符串处理算法,写在这里是希望自己以后能多来看看和改改,温…

python发送邮箱_你知道怎么用Python发送邮件吗?

作者 | 陈熹来源 | 早起Python(ID:zaoqi-python)头图 | CSDN 下载自东方IC前言本文主要对邮件操作基础知识及代码进行介绍,用Python发邮件有哪些优势?批量发送邮件,并且各邮件可以不同高度自定义的定时发送更有效地管理收件箱基本…

centos中安装mysql5.6_CentOS中安装MySQL5.6报错的解决方法

由于项目需要,必须使用最新出来的MySQL5.6社区版本,使用的操作系统是CentOS6.3。然后安装到中途报错如下:file /usr/share/mys由于项目需要,必须使用最新出来的MySQL5.6社区版本,使用的操作系统是CentOS6.3。首先&…

使用Wireshark进行SIP包解析

1. 安装Wireshark 下载Wireshark后,安装很简单,基本上只需要点击“Next”和“I agree”等按钮,不再赘述。 2. Wireshark介绍 参见:http://man.lupaworld.com/content/network/wireshark/Introduction.html copy一下简要介绍&a…

Android-Animations的使用大全之二:Frame Animation和其他

Android-Animations的使用大全之一&#xff1a;Tweened Animations详解 5 Frame-By-Frame Animations的使用方 1 在res/drawable中创建一个xml文件&#xff0c;定义Animation的动画播放序列 anim_nv.xml Xml代码 <animation-list xmlns:android"http://schemas.androi…

wireshark分析SIP协议——注册

SIP 是VOIP目前非常流行的一种协议。有关协议的详细原理参照相关文档。本文通过wireshark抓包分析SIP user agent&#xff08;用户代理客户机&#xff0c;uac&#xff09;与SIPserve之间的交互过程&#xff0c;在拨打SIP电话之前&#xff0c;先需要搭建相应的环境&#xff1a;根…

micropython仿真器_Micropython教程之TPYBoard DIY超声波测距仪实例演示

1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法。 2. 进一步学习编制数据输出程序的设计方法。 3. 学习超声波模块的测距原理。 4. 学习LCD5110接线方法 5. 学习TPYboard控制超声波模块测距。(萝卜学科编程教育tpyboard。com) 2.所需元器件 超声波模块一个 TPYBoard板…

monotouch在ipad中的实例应用--显示图像和文字

本节主要讲述在苹果环境中使用monodevelop开发ipad的一个实例&#xff0c;具体操作如下 1、新建项目 选择monotouch--ipad--Empty project 命名为iPad01 2、添加新文件&#xff0c;选择monotouch--ipad view&#xff0c;命名为showView&#xff0c;这样会在项目中多出来三个文件…

MTU MSS 详解记录

先学习理解一下帧的封装格式&#xff1a; 需要注意的是&#xff0c;区别两种帧封装格式&#xff1a;802标准帧和以太网帧1&#xff0c;在802标准定义的帧格式中&#xff0c;长度字段是指它后续数据的字节长度&#xff0c;但不包括C R C检验码。RFC 1042&#xff08;IEEE 802&a…

通达oa 不允许从该ip登陆_通达OA-命令执行漏洞复现

通达OA-命令执行一、环境安装文件&#xff1a;链接:https://pan.baidu.com/s/1Y78Zs-7Igi4MRE0J_Dp-dQ 提取码:2b3i二、漏洞验证任意文件上传漏洞 /ispirit/im/upload.php本地文件包含漏洞 /ispirit/interface/gateway.php这两个路径不需要登录认证。burp抓包修改数据包上传文件…

mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...

DolphinDB提供了两种导入MySQL数据的方法&#xff1a;ODBC插件和MySQL插件。我们推荐使用MySQL插件导入MySQL数据&#xff0c;因为它的速度比ODBC导入更快&#xff0c;导入6.5G数据&#xff0c;MySQL插件的速度是ODBC插件的4倍&#xff0c;并且使用MySQL插件无需任何配置&#…

优秀程序员的45个习惯

摘要&#xff1a;值得打印出来贴在办公室墙上学习实践的箴言。 优秀来自好的习惯。怎样成为优秀的开发人员&#xff1f;图灵公司最近热销的《高效程序员的45个习惯》一书给出了很好的解答&#xff0c;非常值得一读。 这本书的英文原版荣获了有软件奥斯卡之称的Jolt生产效率大奖…

java 类型转换_java中的基本数据类型的转换

本文参考了如下两篇文章:Java中&#xff0c;经常可以遇到类型转换的场景&#xff0c;从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等&#xff0c;随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先&#xff0c;来了解下…

Activity的四种加载模式(转载)

在多Activity开发中&#xff0c;有可能是自己应用之间的Activity跳转&#xff0c;或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例&#xff0c;而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式&#xff0c;而不是使用默认的加载模…

centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式

概述一般我们打算把一些服务&#xff0c;例如 mysql&#xff0c;tomcat&#xff0c;Nginx设置开机自启动的话一般是有三四种方式来实现&#xff0c;下面以mysql&#xff0c;tomcat&#xff0c;Nginx做例子来演示。一、使用定时任务 cron 命令创建定时任务来运行 .sh 脚本。在sh…

java 永久代_Java新生代、老生代和永久代详解

前言: 还是面试经常被q&#xff0c;小结一下image.pngJVM中的堆一般分为三部分&#xff0c;新生代、老年代和永久代。1 新生代主要是用来存放新生的对象。一般占据堆空间的1/3&#xff0c;由于频繁创建对象&#xff0c;所以新生代会频繁触发MinorGC进行垃圾回收。新生代分为Ede…

java算法:冒泡排序

java算法&#xff1a;冒泡排序 冒泡排序&#xff1a;不断遍历文件&#xff0c;交换倒序的相邻元素&#xff0c;直到文件排好顺序。冒泡排序的主要优点是容易实现&#xff0c;冒泡排序通常会比选择排序、插入排序慢。 如&#xff0c;对EXAMPLE 字母进行排序&#xff1a; E X…