域渗透——DNS 记录与 MachineAccount

发布于 2024-10-23 07:58:48 字数 9252 浏览 39 评论 0

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 创建的计算机帐户),可通过查看计算机帐户的创建者找到攻击者控制的用户。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

胡渣熟男

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文