构建用于渗透测试的易受攻击的Active Directory实验环境:实战指南

3 阅读16分钟

封面图片

点击查看全尺寸图片

为什么要学习Active Directory

Active Directory是大多数企业环境中身份与访问控制的基石。对于渗透测试人员、防御者和系统管理员来说,理解AD,包括其身份验证流程、委派权限和常见错误配置,至关重要。而学习AD的最佳方式就是自己动手搭建。当我在2022年刚开始学习AD时,这对我来说简直是噩梦,但现在AD是我最喜欢的领域。

开始之前

撰写这篇文章花了我四天时间,我尽力使其既易于理解又信息丰富。我的下一篇博客将专注于攻击这个实验环境,我也会提供一个可下载的环境版本。请务必关注我,以免错过新内容。如果你遇到任何问题或有疑问,请随时联系我。

如果你是Active Directory的新手,我建议先阅读我之前的博客。

精通Active Directory:从初学者到中级完全指南 —— 一篇关于Active Directory核心组件、身份验证系统和管理功能的实战指南。

概述

在本指南中,我将带你逐步构建一个隔离的、易受攻击的Active Directory实验环境,该环境展示了攻击是如何构造的、如何缓解这些攻击,以及当你在实际环境中发现这些问题时应该怎么做。通过本指南,你将对AD有深入的理解,并像我一样开始喜欢它。

易受攻击的Active Directory实验环境流程图

下面的流程图展示了用户、攻击、机器以及从初始访问到获得域控制器管理员权限的整个流程。

易受攻击的AD实验环境流程图

注意: 用户Harry可以滥用ESC1漏洞获得域控制器(DC)上的管理员权限。但是,为了学习的目的,我们将重点利用GenericAll权限,然后转储哈希值以执行Pass-the-Hash攻击来获得对DC的访问权限。

先决条件

我将使用VirtualBox进行实验。环境将包括两台Windows机器和一个Kali实例。

  • 域控制器 (Windows Server 2019)
  • 一台Windows 10企业版 (用户机器)
  • Kali Linux (我们的攻击机器)
  • 存储空间: 60GB — 80GB & 内存: 16GB — 34GB

设置Windows Server 2019

你可以下载VirtualBox,并通过将ISO文件附加到新的虚拟机并按照安装程序提示来开始安装Windows Server 2019。我将跳过Windows安装过程的逐步说明。我们将为域控制器分配4GB内存和2个CPU核心。

点击查看全尺寸图片:附加ISO镜像

点击查看全尺寸图片:指定基本内存和CPU

点击查看全尺寸图片:创建25GB预分配存储

当提示选择操作系统时,选择 Windows Server 2019 Standard Evaluation (Desktop Experience)

选择操作系统

当提示输入管理员密码时,使用 Admin#90

配置NAT网络

安装完成后,我们将为实验环境创建一个NAT网络。我将我的NAT网络命名为“Nebula Network”,IPv4前缀为10.10.10.0/24。勾选 Enable DHCP 选项。

点击查看全尺寸图片:NAT网络配置

配置完成后,点击 Apply,我们的NAT网络就可以使用了。打开我们域控制器虚拟机的设置,切换到 Network 选项卡,并选择 NAT Network。点击 Ok,更改将被保存。

点击查看全尺寸图片:更改网络类型

分配静态IPv4地址

服务器启动后,登录并从控制面板打开IPv4设置,为DC01分配以下IPv4设置。点击 OK,我们的设置将被保存。

点击查看全尺寸图片:静态IPv4设置

重命名我们的DC

我将我的域控制器PC名称重命名为 Nebula-DC。这将帮助我们更容易地识别它。重命名后需要重启PC。

重命名我们的PC

配置域控制器

我们将使用服务器管理器来配置和管理Active Directory。服务器管理器是Windows Server内置的控制台,它为我们提供了一个快速查看服务器角色、功能和基本健康状况的仪表板。我们可以使用它来添加角色(例如,安装Active Directory域服务)、将服务器提升为域控制器、查看已安装的功能,并在一个窗格中管理多台服务器。它在学习过程中非常理想,因为“添加角色和功能向导”会引导我们完成步骤,仪表板会显示已安装的内容。

点击查看全尺寸图片:服务器管理器 Active Directory

启用Active Directory域服务

AD域服务是Microsoft的一项服务,它提供了一个集中式、分层目录来管理网络资源,如用户、计算机和组。它使用安全协议对用户进行身份验证并控制对资源的访问,使其成为Windows网络身份和访问管理的核心组件。其主要功能包括结构化数据存储、用于冗余的复制系统以及像组策略对象这样的中央管理工具。

点击右上角菜单的 Manage,然后选择 Add Roles and Features

添加角色和功能

在“Before you begin”页面点击 Next。 在“Installation Type”页面使用默认选项,点击 Next。 在“Server Selection”页面使用默认选项,点击 Next。 然后,选择 Active Directory Domain Services

点击查看全尺寸图片:选择服务器角色

点击 Add Features,然后点击 Next

添加功能

在“Features”页面使用默认选项,点击 Next。 在“Active Directory Domain Services”页面点击 Next。 现在点击 Install,安装将在几分钟内完成。

点击查看全尺寸图片:确认安装选择

将我们的服务器提升为域控制器

安装完成后,点击 Close,我们会注意到右上角 Manage 选项前出现一个旗帜标志。点击 Promote this server to a domain controller

将服务器提升为DC

将弹出以下“部署配置”页面。选择 Add a new forest 并输入域名。本实验我们将使用 NEBULA.local 域。点击 Next

点击查看全尺寸图片:部署配置

在“域控制器选项”页面输入密码。本实验我使用了 Admin#90。点击 Next

点击查看全尺寸图片:域控制器选项

在“DNS Options”页面使用默认选项,点击 Next。 在“Additional Options”页面使用默认设置,点击 Next。 在“Paths”页面点击 Next。 在“Review Options”页面点击 Next。 在“Prerequisites Check”页面点击 Install。它将安装先决条件,然后重启。

重启后,我们会注意到Active Directory的 Nebula\Administrator 账户已创建。我们现在可以使用密码 Admin#90 登录。

点击查看全尺寸图片:已加入域控制器

启用Active Directory证书服务

AD证书服务是一个Windows Server角色,它提供公钥基础设施(PKI)来颁发和管理用于组织内安全通信、身份验证和加密的数字证书。

现在,为了进行一些LDAP攻击,我们将启用Active Directory证书服务。像之前一样,点击右上角菜单的 Manage,选择 Add Roles and Features,然后一直点击 Next,直到进入“选择服务器角色”页面。

现在,勾选 Active Directory Certificate Services 选项,然后点击 Add Features

点击查看全尺寸图片:选择服务器角色

现在,一直点击 Next,直到我们进入“确认安装选择”页面,勾选 Restart the destination server automatically if required,并在弹出的“添加角色和功能”窗口中点击 Yes

点击 Install,它将安装所选的服务。

点击查看全尺寸图片:确认安装选择

完成后,点击 Close,我们会再次注意到右上角 Manage 选项前出现旗帜标志。点击 Configure Active Directory Certificate Services…

配置AD CS

在“Credentials”页面点击 Next,勾选 Certification Authority 选项,然后点击 Next

点击查看全尺寸图片:角色服务

在后续所有页面上点击 Next,继续使用默认选项。我在“有效期”页面将有效期更改为 100 年,这样证书就永不过期。继续点击 Next,然后在确认页面点击 Configure。重启DC以使更改生效。

创建用户

点击右上角的 Tools,然后点击 Active Directory Users and Computers

点击查看全尺寸图片:Active Directory用户和计算机

点击下拉菜单,然后点击 Users,所有用户将显示在右侧。只有Administrator用户是真正的用户,其他都是安全组。Guest账户上的箭头显示它已被禁用。

Active Directory用户和计算机

让我们创建一个组织单位(OU)并将安全组移动到该OU。右键点击 NEBULA.local,悬停在 New 上,点击 Organizational Unit,将其命名为 Groups,然后点击 Ok

创建新OU

现在,选择所有安全组(除了用户Administrator和Guest),并将它们移动到我们刚刚创建的 Groups OU中。

点击查看全尺寸图片:用户管理

在弹出的窗口中点击 Yes,它们将被移动到新创建的OU中。现在,要创建一个新用户,我们可以使用GUI或PowerShell。对于GUI,你可以在用户列表下方右键点击,悬停在 New 上,然后点击 User

点击查看全尺寸图片:创建新用户

输入姓名 Mike Ross 和登录名 mike.ross,然后点击 Next

命名详情

输入密码 Roses#870,勾选 Password never expires,点击 Next,然后 Finish

设置密码

我们将再创建一个用户 svc-filesmgr,密码为 Secure#4045,并设置“密码永不过期”。

创建新用户

现在使用相同属性创建以下用户:

  • Helpdesk Harper h.harper: Harp3r!2
  • Harry John h.john: Jhonny!40s
  • Nebula Admin n.admin: N3bul4!

在Mike Ross上启用AS-REP Roasting

在AS-REP攻击中,攻击者为目标用户发送AS-REQ。由于禁用了预身份验证,DC会返回一个AS-REP响应(包含使用用户密码哈希加密的数据),而验证用户身份。

右键点击新创建的用户,点击 Properties。在 Account options 下滚动到底部,勾选 Do not require Kerberos preauthentication。点击 Apply 并关闭。

启用Kerberos预身份验证

添加AD LDAP服务并启用匿名登录

点击右上角菜单的 Manage,然后点击 Add Roles and Features。一直点击 Next,并在进入“选择服务器角色”页面时勾选 Active Directory Lightweight Services。按照安装步骤操作,然后像之前一样点击旗帜图标,再次按照安装步骤操作。

点击右上角菜单的 Tools 选项,然后点击 ADSI Edit,并点击 Connect to…

连接到AD CS

从“选择一个已知命名上下文”下拉列表中选择 Configuration,然后点击 OK

点击查看全尺寸图片:AD CS连接设置

右键点击 Configuration,并按下图所示展开,右键点击 CN=Directory Service,然后点击 Properties

配置CN=Windows NT

在属性中,点击 dSHeuristics,然后点击 Edit。输入值 0000002,点击 Ok,应用并关闭。

设置dSHeuristics

在服务器管理器中点击右上角菜单的 Tool,然后点击 AD Users and Computers。点击菜单中的 View,并勾选 Advanced Features 选项。

启用高级功能

右键点击 Users OU,点击 Properties。点击 Add,输入 ANONYMOUS LOGON。点击 Check Name,然后让其自动填充,点击 OK

添加匿名登录

选择 ANONYMOUS LOGON 用户,勾选 Read 为允许,应用然后关闭。

点击查看全尺寸图片:授予读取权限

在Files Manager上启用Kerberoating

在Nebula-DC上以管理员身份打开PowerShell,输入以下命令。这将把 svc-filesmgr 转换为服务账户。

setspn -a Nebula-DC/svc-filesmgr.nebula.local NEBULA\svc-filesmgr

设置用户机器MS01

使用ISO文件在VirtualBox上安装Windows 10企业版。安装完成后,在提示登录时选择 Domain join instead。使用用户 h.harper 密码 Harp3r!2 登录,并填写安全问题。

设置静态IP为 10.10.10.20,DNS设置为域控制器的IP,即 10.10.10.10

点击查看全尺寸图片:MS01静态IP

将此PC重命名为 MS01 并重启。

将MS01加入Active Directory

登录到MS01后,搜索“Access work or school”并打开设置。点击 Connect

将MS01加入AD

点击 Join this device to a local Active Directory domain

点击查看全尺寸图片:加入本地Active Directory域

输入域名 NEBULA.local,点击 Next

重命名MS01

输入Helpdesk Harper的凭据 h.harper:Harp3r!2,点击 OK,然后点击 Next,从 Account Type 下拉列表中选择 Administrator,然后 Restart Now

传递凭据

我们的MS01现在已加入域,并成为Active Directory的一部分。

启用SMB共享

在Active Directory的上下文中,SMB(服务器消息块)是一种网络文件共享协议,对于核心AD功能至关重要,但也存在安全漏洞。

在MS01上创建一个名为 Nebula 的新文件夹。

点击查看全尺寸图片:创建文件夹

右键点击 Nebula 文件夹,悬停在 Give access to 上,点击 Specific people…

授予访问权限

点击下拉按钮,然后点击 Find People…

查找用户

输入对象名称 svc-filesmgr,点击 Check Names,它将像下方截图所示填充该字段。

添加用户名

点击Files Manager权限旁边的下拉按钮,选择 Read/Write 选项。点击 Share,然后点击 Done

授予读/写权限

添加计划任务以触发SMB共享上的LNK文件

我们现在将创建一个计划任务,以 h.harper 用户身份运行,该任务将在系统启动时运行。该脚本将每分钟触发SMB共享上的 latest.lnk 文件,并清理文件夹。

将以下脚本保存在 C:\Users\h.harper\lnk-trigger.ps1

while ($true) {
    $folder = "C:\Nebula"
    $latest = Get-ChildItem -Path $folder -Filter "*.lnk" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
    if ($latest) {
        Start-Process $latest.FullName
    }
    Start-Sleep -Seconds 60
    Remove-Item -Path "C:\Nebula\*" -Recurse -Force
}

Win + R,输入 taskschd.msc 并按回车。 点击 Create Task,将任务命名为 LNK TRIGGER。 勾选 Run whether the user is logged on or not 选项和 Run with highest privileges。从 Configure for 下拉列表中选择 Windows 10。

点击查看全尺寸图片:创建新计划任务

切换到 Triggers 选项卡,添加一个 New trigger。 从 Begin the task 下拉列表中选择 At startup。 确保高级设置与下方截图匹配。

点击查看全尺寸图片:配置触发器设置

切换到 Actions 选项卡,添加一个新的 Action。 选择 ActionStart a program,点击 Browse,选择 powershell.exe。 粘贴以下 Arguments-ExecutionPolicy Bypass -WindowStyle Hidden -File “C:\Users\h.harper\lnk-trigger.ps1”,然后点击 Ok

点击查看全尺寸图片:添加PowerShell.exe和参数

切换到 Conditions 选项卡,取消勾选 Start the task only if the Computer is on AC power。 切换到 Settings 选项卡,取消勾选 Stop the task if it runs longer

在AD证书服务中添加ESC1漏洞

ESC1代表企业安全配置1,是一种利用配置错误的Active Directory证书模板来获取更高权限的网络安全攻击。它允许攻击者请求一个可用于冒充其他用户或账户的证书,从而导致网络完全失陷。

Win + R,输入 certtmpl.msc 并按回车。 点击 Certificate Templates…,右键点击 User,点击 Duplicate Template

复制用户模板

切换到 General 选项卡,将模板重命名为 Nebula ESC,并将有效期分别设置为100年和75年,如屏幕截图所示。

配置常规设置

切换到 Security 选项卡,添加 h.harper 并启用 Enroll

点击查看全尺寸图片:添加用户和注册权限

切换到 Subject Name 选项卡,选择 Supply in the request。 点击 Apply 并关闭。

选择在请求中提供选项

Win + R,输入 certsrv.msc 并按回车。

添加易受攻击的模板

选择 Nebula ESC,点击 Ok

保存更改

授予Harry对用户Nebula的GenericAll权限

点击右上角的 Tools,然后点击 Active Directory Users and Computers。 点击 View,勾选 Advanced Features 选项。 点击 Groups OU,右键点击 DNSAdmins,切换到 Members 选项卡,添加 n.admin 用户。 点击 Users OU,右键点击 Nebula Admin,如果用户被禁用则启用它。再次右键点击,点击 Properties,切换到 Security 选项卡,添加 h.john 用户,并勾选 Full Control 选项。

为GenericAll权限添加用户

完成后,点击 Apply 并关闭。

将Nebula Admin添加到远程管理用户组

我们将把 n.admin 用户添加到 Remote Management Users 组,这样我们就可以执行Pass-the-Hash攻击并通过WinRM登录。

在DC上打开服务器管理器,点击 Tools,然后点击 AD Users and Computers。打开 Builtin,右键点击 Remote Management Users,点击 Properties

点击查看全尺寸图片:远程管理用户

切换到 Members,点击 Add,输入 n.admin。像之前一样点击 Check Name 按钮,然后点击 Apply。至此,我们完全易受攻击的实验环境设置完成。

我们学到了什么

我们学会了设置域控制器,包括创建用户、OU、组和配置基本策略。我们还学会了添加和管理域加入的机器,模拟了一个包含MS01和DC01的真实企业网络。我们创建和管理了SMB共享,设置了权限。我们安装并配置了Active Directory证书服务,并创建了一个易受攻击的ESC1证书模板。

我学到的一个重要教训是,在构建易受攻击的实验环境之前,你必须清楚自己的设计。试图在设置过程中规划实验室会导致混乱、配置不一致和额外的返工。事先制定一个明确定义的计划可以节省时间,并使整个学习过程更顺畅、更有效。

结语

通过完成此设置,你现在拥有了一个坚实且真实的平台,可以学习Active Directory环境中的攻击是如何展开的。在下一篇博客中,我们将深入探讨如何逐步利用此实验环境,并了解攻击者如何利用每个错误配置。在此之前,请随意进行实验、破坏和重建。这是真正理解AD的最佳方式。感谢阅读,请关注下一部分。 CSD0tFqvECLokhw9aBeRqsz8WKi4c0Yu2dKDeXAOt1Bt0az5ADOiQDQH1vT7cFTW66DRBUb52YrvyqPDrnObCs5aJv7h4C6tuaGtc3i1J9BxKXfUnlcfZabw5qWEJqpaRXFrJygipSMa9UDtLoJO7BfIXiFHVVsfvNt4Zhu6o7X3LRJv0uVUGPQETb20wrGL