开始使用NetExec:简化网络发现与访问
| Dale Hobbs
Dale在加入Black Hills Information Security担任渗透测试员之前,有超过20年的企业防御经验。
在Active Directory环境中执行渗透测试时,我离不开的一个工具是NetExec。能够高效地对网络中的多个系统进行身份验证至关重要,而NetExec是一个非常强大的工具,可以帮助自动化许多此类活动。
什么是NetExec?
NetExec是一个开源工具,旨在进行网络侦察、横向移动和安全评估,并帮助在Active Directory环境中对远程系统进行自动化身份验证测试。
它基于另一个名为CrackMapExec的工具,该工具最初由bytebleeder创建,但由于某些原因不再积极开发。因此,NetExec因其积极的开发、速度和模块化设计而成为网络身份验证测试的首选工具。
它允许您执行多种功能,例如验证凭据、枚举用户、远程执行命令以及利用基于Windows的系统中一些常见的错误配置。
虽然以下列表是您可以使用NetExec完成的任务的一小部分示例,但这绝不是详尽无遗的列表。
- 允许用户进行Active Directory枚举,包括获取有关计算机、用户、组、域、信任等的数据。
- 横向移动:通过支持网络内的各种横向移动策略,使您能够在被入侵的系统之间切换并提升权限。
- 支持凭据收集,这是从受感染系统获取登录凭据并使用它们进入其他系统的过程,从而实现进一步的利用。
- 支持Pass-the-Ticket(PtT)攻击,这是一种通过重用Kerberos票证来获得对资源的未授权访问的方法。
- 尝试通过对不同网络服务使用暴力破解和凭据喷洒攻击来获得未授权访问。
- 会话枚举通过列出远程系统上的所有活动会话来提供有关当前用户活动的信息。
- 枚举远程系统上的共享有助于发现可能的漏洞和感兴趣的位置。
NetExec的关键特性
NetExec通过多种协议提供身份验证和命令执行功能,使其成为一个极其多功能的工具。这些各种功能对于网络枚举和后利用至关重要,使您能够评估多种身份验证机制、识别错误配置并在各种环境中执行命令。
NetExec支持以下协议:
- SMB(服务器消息块)用于文件共享和远程执行
- WinRM(Windows远程管理)用于执行PowerShell命令
- LDAP(轻量级目录访问协议)用于查询Active Directory
- SSH(安全外壳)用于访问Linux和Unix系统
- MSSQL(Microsoft SQL Server)用于执行数据库命令
- RDP(远程桌面协议)用于交互式远程访问
- FTP(文件传输协议)用于上传和下载文件
- WMI(Windows管理规范)用于执行远程命令
- NFS(网络文件系统)用于检测NFS服务器并递归枚举共享
NetExec使您能够使用明文凭据、NTLM哈希或Kerberos票证测试多个域加入系统的身份验证机制。它还支持各种攻击技术,包括Pass-the-Hash(PTH)和Pass-the-Ticket(PTT)。这些技术使您能够评估凭据安全性并识别潜在的横向移动路径。
NetExec还可以收集有关网络连接系统的信息,包括活动主机、共享资源和开放端口。这使您能够了解网络的布局并识别任何易受攻击的机器。您可以检索有关用户和组、可用共享、远程系统上的本地管理员甚至具有潜在提升权限的服务帐户的信息。
与其前身(CrackMapExec)不同,NetExec在大规模身份验证测试的速度、效率和优化方面提供了显著改进。虽然CrackMapExec多年来一直是主力工具,但由于其依赖较旧的执行模型,在测试多个主机的身份验证时可能会变得缓慢和低效。NetExec采用优化的线程和改进的并行执行构建。这意味着它可以更快地处理针对各种系统的身份验证尝试,从而减少不必要的开销,使其在执行大规模安全评估时更加响应迅速。
安装NetExec
既然我们已经了解了NetExec是什么以及它的一些关键特性,让我们看看如何安装NetExec。NetExec是用Python编写的,因此它可以安装在任何支持Python的系统上,包括Linux、MacOS,甚至Microsoft Windows。
如果您使用Kali,使用apt包管理器安装很简单。
|
|
对于任何其他Linux系统,运行以下命令:
|
|
如果您是MacOS用户,可以使用Brew安装它。但是,您需要先安装Rust。
|
|
最后,如果您在Windows上安装它,您将需要一些先决条件。或者,您可以考虑使用WSL(Windows Subsystem for Linux)。WSL是Windows的一个功能,允许您在Windows系统上运行Linux环境,使您能够同时使用Windows和Linux。
- Visual Studio: https://visualstudio.microsoft.com/de/visual-cpp-build-tools/
- Git: https://git-scm.com/downloads/win
- Python: 您可以从Microsoft Store或https://www.python.org/downloads/windows/安装最新版本的Python
- Rust: https://www.rust-lang.org/tools/install
安装这些先决条件后,只需打开命令提示符并运行以下命令:
|
|
或者,如果您不想或无法安装先决条件,可以从https://github.com/Pennyw0rth/NetExec/releases安装预编译的Windows二进制文件。只需准备好,您的防病毒工具很可能会将其吞噬并吐出!
基本用法和实际示例
好了,您已经安装了NetExec,现在该怎么办?在探索一些常见用例之前,让我们先看看一般的NetExec命令语法。
所有NetExec命令都遵循以下语法:
|
|
运行nxc --help
将列出可用的常规选项和协议。
如果您需要特定协议(如SMB)的帮助,只需运行nxc smb --help
。下图显示了此命令的部分输出。
对于这些协议选项(SMB、LDAP等)中的每一个,都有几个特定于每个协议的模块。对于每个协议,您可以使用-L
选项列出模块。例如,我们可以列出SMB协议可用的所有模块。
|
|
现在我们已经了解了基本语法,让我们看一些示例。NetExec的一些最强大的功能在其SMB选项中,使您能够发现新机器、收集网络信息并在远程系统上执行命令。SMB选项允许您识别活动主机并检索域用户、组、网络共享、计算机和活动会话的数据。
如果您拥有域用户帐户的有效凭据(即使是低权限用户),您可以查询Active Directory以获取域中所有用户帐户的列表。要检查有效的域用户,请针对域控制器运行以下命令:
|
|
这将使用SMB对Active Directory进行身份验证,并返回所有有效的域用户帐户。请注意,这将返回启用和禁用的帐户。在下面的输出中,我们找到了12个用户帐户。
我们还可以找到域中使用的密码策略,这在我们开始执行密码攻击时很有帮助。要获取密码策略,我们使用--pass-pol
选项。
|
|
我们还可以从Active Directory获取计算机帐户列表。这对于映射网络结构、识别关键系统(如域控制器、数据库服务器或文件服务器)非常有益——所有这些都可以用于规划横向移动路径。
|
|
现在假设您找到了本地用户帐户的凭据,并想验证该帐户是否在特定系统上具有本地管理员权限。为此,我们使用--local-auth
标志:
|
|
这将检查该帐户在系统上是否有效,如果该帐户恰好对目标具有本地管理员权限,您将看到它标记为“(Pwn3d!)”。
如果您发现了本地用户帐户的凭据,并想检查该本地帐户在环境中的多个系统上是否有效,这将特别有用。
|
|
在这里,我们可以看到名为“helpdesk”的用户帐户确实在名为“CLIENT”和“PKI”的系统上作为本地用户帐户存在,但仅在“CLIENT”系统上是本地管理员。
要在远程系统上使用NetExec执行命令,您确实需要使用具有本地管理员权限的帐户。使用这样的帐户,您可以通过SMB在远程系统上运行命令。运行以下命令以查找本地管理员组的成员。(注意小写-x):
|
|
同样,要使用PowerShell运行命令,您使用大写-X。在下面的命令中,我们执行远程系统的PowerShell版本检查。
|
|
如果您设法获取用户帐户的NT哈希,您可以在不知道明文密码的情况下将其用于身份验证。
|
|
这将尝试使用提供的NTLM哈希而不是密码进行身份验证。
NetExec在执行密码攻击时也非常有用。如果您有来自域的用户帐户列表,您可以对所有用户帐户执行密码喷洒以尝试猜测密码。密码喷洒是一种攻击类型,攻击者通过尝试一些常用密码来尝试获得对多个帐户的访问权限。默认情况下,当使用NetExec执行密码喷洒时,它将在第一次成功身份验证时停止。因此,我们通常希望使用--continue-on-success
选项,该选项告诉NetExec即使在成功身份验证后也继续身份验证尝试。
|
|
在这里,我们可以看到我们成功猜到了2个用户帐户的密码(Summer2025!)。
LDAP选项也有一些非常有用的功能。
我们之前看到使用SMB选项可以获取所有用户帐户的列表。但如果您只想要活动用户帐户的列表怎么办?为此,您可以使用LDAP --active-users
标志来过滤掉所有禁用的帐户。在这里,您可以看到我们只找到了7个启用的用户帐户。
|
|
默认情况下,Active Directory中的所有非特权域用户最多可以将10台计算机连接到域。虽然这样设计的目的是减少管理负担,但它确实给组织带来了一些风险,因为拥有低权限帐户的攻击者可以将自己的设备添加到域中,并保留对其的完全控制。这为攻击者提供了在域加入系统上获得本地管理员权限的捷径,可用于发起进一步攻击。控制此属性的属性称为“MachineAccountQuota”。使用NetExec的LDAP选项,我们可以查询域以检查当前设置的MachineAccountQuota是多少。
|
|
Active Directory为用户帐户提供了许多属性。其中之一是Description属性。通常,此属性用于提供帐户的描述:其用途是什么。例如,描述可能写道:“用于Azure集成的帐户”。此描述属性对攻击者特别有用,因为所有标准用户帐户都能够读取此描述属性。通常,它包含有用的信息——信不信由你——有时甚至包括诸如密码之类的东西!使用NetExec,我们可以使用get-desc-users LDAP模块读取域中所有用户帐户的描述属性。
|
|
在这里,我们可以看到用户帐户“dalia.latia”的描述属性中的密码“Password123!”。这可能是一个有效的密码,也可能不是,但我们肯定想进一步研究它。它可能是一个有效的密码,或者它可能是一个可能触发警报的诱饵帐户。
结论
这甚至不是一个详尽的列表。NetExec具有广泛的功能,但要自己发现更多这些功能,请确保花一些时间安装并熟悉它,特别是如果您以前从未使用过它。一旦您熟悉了它,您就会看到它有多么强大和多功能。NetExec简化了网络枚举、基于凭据的攻击和横向移动;对于所有渗透测试员来说,它确实是一个必备工具。
非渗透测试员也可以很好地利用它。防御者:您可以使用NetExec来加强访问控制并改进监控和检测能力,这意味着您可以在基于凭据的攻击升级之前对其做出响应。不客气!