域渗透——DNS记录与MachineAccount
2020-04-08 09:30:00 Author: www.4hou.com(查看原文) 阅读量:368 收藏

0x00 前言

在之前的文章《域渗透——DNS记录的获取》《域渗透——普通用户权限获得DNS记录》介绍了在域环境下获得DNS记录的方法,有助于我们快速了解域内的网络架构。

但是,DNS记录只能作为辅助判断,DNS记录、DNS记录中对应的MachineAccount(机器帐户)和实际的计算机三者之间不存在对应关系。

域内的非特权用户能够自由创建DNS记录和MachineAccount。

本文将要介绍域内非特权用户创建DNS记录与MachineAccount的方法,记录需要掌握的知识点。

0x01 简介

本文将要介绍以下内容:

· MachineAccount简介

· 非特权用户创建MachineAccount的方法

· 非特权用户创建DNS记录的方法

0x02 MachineAccount简介

1.MachineAccount

每当一个计算机加入域中,都会创建一个机器帐户(MachineAccount),作为"Domain Computers"组的成员。

在域环境中可以通过以下命令获得所有机器帐户的列表:

net group "Domain Computers" /domain

每一个机器帐户名以字符$结尾。

注:使用Mimikatz的DCSync功能导出所有用户hash时,也会导出所有机器帐户的hash。

如果获得了机器帐户的hash,可以用来制作白银票据(Silver Ticket),接着获得对应服务的访问权限,利用方法可参考之前的文章《域渗透——Pass The Ticket》。

2.MachineAccountQuota

用来表示允许用户在域中创建的计算机帐户数,默认为10。

说明文档:

https://docs.microsoft.com/en-us/windows/win32/adschema/a-ms-ds-machineaccountquota

关于MachineAccountQuota(MAQ)的介绍可参考资料:

https://blog.netspi.com/machineaccountquota-is-useful-sometimes/

这里仅对参考资料中提到的10个规则做简要总结并添加个人理解,特点如下:

(1)允许非特权用户通过MAQ创建计算机帐户,默认为10个,但无法删除创建的计算机账户。

禁用MAQ的方法可参考:https://social.technet.microsoft.com/wiki/contents/articles/5446.active-directory-how-to-prevent-authenticated-users-from-joining-workstations-to-a-domain.aspx

(2)创建者帐户的SID存储在计算机帐户的ms-DS-CreatorSID属性中。

也就是说,对于通过MAQ创建的计算机帐户,查看ms-DS-CreatorSID属性能够找到创建者帐户的SID。

(3)通过MAQ创建的计算机帐户将放入"Domain Computers"组中。

(4)通过MAQ创建的计算机帐户,可修改以下属性:

· AccountDisabled

· description

· displayName

· DnsHostName

· ServicePrincipalName

· userParameters

· userAccountControl

· msDS-AdditionalDnsHostName

· msDS-AllowedToActOnBehalfOfOtherIdentity

· samAccountName

其中AccountDisabled属性可以用来禁用该用户。

userAccountControl属性记录了用户的属性信息,具体可参考https://support.microsoft.com/en-us/help/305144/how-to-use-useraccountcontrol-to-manipulate-user-account-properties

(5)添加计算机帐户将创建以下4个SPN:

· HOST/MachineAccountName

· HOST/MachineAccountName.domain.name

· RestrictedKrbHost/MachineAccountName

· RestrictedKrbhost/MachineAccountName.domain.name

(6)机器帐户没有本地登录权限

但可以通过"runas /netonly"执行命令。

0x03 非特权用户创建MachineAccount的方法

1.Powershell实现

需要使用Powermad

通过MAQ创建计算机帐户testNew的命令如下:

New-MachineAccount -MachineAccount testNew -Password $(ConvertTo-SecureString "123456789" -AsPlainText -Force)

查看计算机帐户testNew的完整属性:

Get-ADComputer testNew -Properties *

具体包括以下属性:

· AccountExpirationDate

· accountExpires

· AccountLockoutTime

· AccountNotDelegated

· AllowReversiblePasswordEncryption

· AuthenticationPolicy

· AuthenticationPolicySilo

· BadLogonCount

· badPasswordTime

· badPwdCount

· CannotChangePassword

· CanonicalName

· Certificates

· CN

· codePage

· CompoundIdentitySupported

· countryCode

· Created

· createTimeStamp

· Deleted

· Description

· DisplayName

· DistinguishedName

· DNSHostName

· DoesNotRequirePreAuth

· dSCorePropagationData

· Enabled

· HomedirRequired

· HomePage

· instanceType

· IPv4Address

· IPv6Address

· isCriticalSystemObject

· isDeleted

· KerberosEncryptionType

· LastBadPasswordAttempt

· LastKnownParent

· lastLogoff

· lastLogon

· LastLogonDate

· localPolicyFlags

· Location

· LockedOut

· logonCount

· ManagedBy

· MemberOf

· MNSLogonAccount

· Modified

· modifyTimeStamp

· mS-DS-CreatorSID

· msDS-User-Account-Control-Computed

· Name

· nTSecurityDescriptor

· ObjectCategory

· ObjectClass

· ObjectGUID

· objectSid

· OperatingSystem

· OperatingSystemHotfix

· OperatingSystemServicePack

· OperatingSystemVersion

· PasswordExpired

· PasswordLastSet

· PasswordNeverExpires

· PasswordNotRequired

· PrimaryGroup

· primaryGroupID

· PrincipalsAllowedToDelegateToAccount

· ProtectedFromAccidentalDeletion

· pwdLastSet

· SamAccountName

· sAMAccountType

· sDRightsEffective

· ServiceAccount

· servicePrincipalName

· ServicePrincipalNames

· SID

· SIDHistory

· TrustedForDelegation

· TrustedToAuthForDelegation

· UseDESKeyOnly

· userAccountControl

· userCertificate

· UserPrincipalName

· uSNChanged

· uSNCreated

· whenChanged

· whenCreated

注:Get-ADComputer命令需要用到ActiveDirectory模块,域控制器一般会安装。

对于未安装Active Directory模块的系统,可以通过如下命令导入Active Directory模块:

import-module .\Microsoft.ActiveDirectory.Management.dll

Microsoft.ActiveDirectory.Management.dll在安装powershell模块Active Directory后生成,我已经提取出来并上传至github:

https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll

Powermad也支持查看计算机帐户的属性,但需要指定具体要查看的属性。

例如查看servicePrincipalName属性的命令如下:

Get-MachineAccountAttribute -MachineAccount testNew -Attribute servicePrincipalName

注:Powermad的Get-MachineAccountCreator命令能够枚举所有计算机帐户(MachineAccount)的创建者。

修改计算机帐户的属性可使用Powermad的Set-MachineAccountAttribute命令,支持修改的属性如下:

· AccountDisabled

· description

· displayName

· DnsHostName

· ServicePrincipalName

· userParameters

· userAccountControl

· msDS-AdditionalDnsHostName

· msDS-AllowedToActOnBehalfOfOtherIdentity

· SamAccountName

实例如下:

Set-MachineAccountAttribute -MachineName testNew -Attribute SamAccountName -Value test

2.C#实现

SharpAllowedToAct包含了这个功能。

我将其中创建MachineAccount的功能提取出来,简单修改后使其支持csc.exe或Visual Studio编译。

完整代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/AddMachineAccountofDomain.cs

可以使用Visual Studio创建C#工程编译AddMachineAccountofDomain.cs生成exe文件,也可以将AddMachineAccountofDomain.cs上传至测试环境,使用csc.exe进行编译。

使用csc.exe进行编译的环境支持.Net3.5或更高版本。

编译命令如下:

C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe AddMachineAccountofDomain.cs /r:System.DirectoryServices.dll,System.DirectoryServices.Protocols.dll
or
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe AddMachineAccountofDomain.cs /r:System.DirectoryServices.dll,System.DirectoryServices.Protocols.dll

0x04 非特权用户创建DNS记录的方法

这里可以使用Powermad中的Invoke-DNSUpdate.ps1

Invoke-DNSUpdate命令支持添加以下记录:

· A

· AAAA

· CNAME

· MX

· PTR

· SRV

· TXT

添加机器帐户testNew的A记录,命令如下:

Invoke-DNSUpdate -DNSType A -DNSName testNew -DNSData 192.168.1.111

删除此记录的命令如下:

Invoke-DNSUpdate -DNSType A -DNSName testNew

非特权用户无法修改或删除已有的记录。

更多细节可参考资料:

https://blog.netspi.com/exploiting-adidns/

0x05 小结

本文介绍了域内非特权用户创建DNS记录与MachineAccount的方法,证明了DNS记录只能作为辅助判断域内网络架构的方法。

站在防御的角度,如果攻击者只有域内非特权用户的权限,在尝试通过MAQ创建计算机帐户时,如果没有获得更高权限,就无法清除攻击痕迹(无法删除通过MAQ创建的计算机帐户),可通过查看计算机帐户的创建者找到攻击者控制的用户。

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/K5MR
如有侵权请联系:admin#unsafe.sh