PowerShell定时获取用户Hash

admin 2026-01-26 14:56:20 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍目标定时烘焙攻击技术,需域管理员权限。攻击者通过PowerShell脚本修改用户账户的userAccountControl属性及sAMAccountName,将其伪装成计算机账户,从而向域控制器请求并获取MS-SNTP哈希值。利用hashcat可离线破解这些哈希以获取密码。操作后必须立即还原属性以避免影响用户登录,该技术适用于内网渗透中的凭证窃取。 综合评分: 90 文章分类: 内网渗透,渗透测试,红队


cover_image

PowerShell 定时获取用户Hash

TtTeam

2026年1月26日 08:15 海南

这种攻击依赖于修改 Active Directory 中用户帐户的属性。这意味着您必须已经拥有域管理员权限。通常情况下,一旦攻击者攻破域管理员帐户,组织的安全就岌岌可危了。该帐户拥有对域的完全控制权。但即便拥有如此高的权限,有时您可能仍然需要特定域用户的凭据,并且不希望触发明显的、高风险的操作。

Timeroasting 是一种最初设计用于从域计算机而非用户获取哈希值的技术。它利用了某些计算机和信任帐户在 Active Directory 中存储密码方式的漏洞。这些计算机密码随后被用于计算 MS-SNTP 身份验证材料,攻击者可以收集这些材料并尝试离线破解。通常,域中的计算机帐户都使用非常长且随机生成的密码。由于这种复杂性,破解它们通常是不切实际的。然而,情况并非总是如此。一些较旧的系统,包括所谓的“Windows 2000 之前的计算机”,有时会存储弱密码或可预测的密码。正是这些遗留系统使得 Timeroasting 显得格外引人注目。

该攻击最初由Secura公司的Tom Tervoort发现并记录。他展示了如何利用Active Directory中计算机或信任帐户的弱密码。例如,如果一个计算机帐户拥有执行DCSync的足够权限,并且其密码足够弱,那么在DCSync等攻击中,甚至可以直接使用计算机名作为密码。问题在于,现代系统的计算机密码通常很长且很复杂。即使使用强大的字典文件来运行这些哈希值,也可能需要很长时间,而且最终可能仍然失败。这就是为什么最初的Timeroasting攻击的应用范围非常有限的原因。

精准定时获取

Giulio Pierantoni 将这种技术称为“目标定时烘焙”(Targeted Timeroasting),其原理与目标 Kerberoasting 和 AS-REP 烘焙类似。由于域管理员可以修改用户帐户的属性,因此您可以暂时将用户帐户转换为类似于域计算机帐户的帐户,从而说服域控制器将其视为域计算机帐户并返回其哈希值。换句话说,域控制器会认为该帐户是一台计算机,因此会公开通常与计算机帐户关联的身份验证材料,只不过现在它属于人类用户。

每个 Active Directory 用户对象都有一个名为sAMAccountType的字段。该字段定义了帐户类型。通常情况下,普通用户帐户和计算机帐户具有不同的值。例如,普通用户帐户属于SAM_NORMAL_USER_ACCOUNT类别,而计算机帐户属于SAM_MACHINE_ACCOUNT 类别。

虽然您无法直接修改此字段,但还有一个名为userAccountControl 的属性。这是一组标志,用于确定帐户的特征。其中一些标志对应于工作站、服务器或域控制器。当userAccountControl值更改为表示工作站信任帐户的标志时,sAMAccountType属性会自动更新。此时,域控制器会认为它正在处理计算机帐户。

根据正常的安全规则,您不应该能够将一种类型的帐户转换为另一种。但是,域管理员不受此限制。这正是目标定时攻击(Targeted Timeroasting)成为可能的原因。这种技术无法由非特权用户执行,因此不同于目标 Kerberoasting、AS-REP 攻击、影子凭证或 ESC14 等技术。

在计算哈希值之前,域控制器还会检查sAMAccountName是否以美元符号结尾。对于域管理员来说,除非已存在同名帐户,否则更改此设置非常简单。修改userAccountControl和sAMAccountName值后,域控制器即可向任何提出正确请求的用户提供该帐户的 MS-SNTP 哈希值。

Giulio Pierantoni 分享了一个重要的操作注意事项。当用户帐户转换为工作站信任帐户时,该用户将失去登录工作站的权限。但是,这不会影响现有的活动会话。如果在提取哈希值后立即还原这些属性,用户可能根本不会注意到任何变化。

您需要是域管理员,并且运行在已加入域的系统上,该系统必须已安装 Active Directory PowerShell 模块。

该脚本按几个逻辑步骤运行。首先,它检索目标帐户的重要属性,例如objectSid和userAccountControl值。然后,它更改userAccountControl属性,使该帐户被视为工作站信任帐户。之后,它在 sAMAccountName 后附加一个美元符号,使用户看起来像一个计算机帐户。属性更新后,脚本提取 RID,向域控制器发送客户端 MS-SNTP 请求,并从响应中检索生成的哈希值。最后,它恢复所有原始值,使一切看起来都正常。

从数据包捕获中观察,整个过程看起来像是一个简单的 NTP 事务。请求中包含 RID,响应中包含根据账户的 NTP 哈希值生成的签名。盐值也取自 NTP 响应数据包。

修改后的脚本作者提供了两种使用模式。一种模式允许你单独针对特定用户进行攻击。另一种模式允许你攻击指定列表中的所有用户。

要针对特定用户,通常需要运行:

PS > .\TargetedTimeroast.ps1 -domainController IP -v -victim USERNAME

如果要同时定位多个用户,可以准备一个列表并运行:

PS > .\TargetedTimeroast.ps1 -v -file .\users.txt -domainController IP

收集到所需的哈希值后,就可以在 Kali 系统上使用 hashcat 开始破解它们。建议您移除每个哈希值的 RID,以避免破解过程中出现问题。您的命令如下所示:

bash$ > sudo hashcat -a 0 -m 31300 hashes.txt dictionary.txt

如果密码强度较弱或重复使用,您可能可以相对快速地找回密码。

https://github.com/OffsecDeer/TargetedTimeroast


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:TtTeam 《PowerShell 定时获取用户Hash》

评论:0   参与:  0