从零搭建内网渗透单域环境:Active Directory攻防实战指南
1. 项目概述为什么需要从零搭建一个内网渗透单域环境如果你对网络安全、渗透测试或者红蓝对抗感兴趣那么“内网渗透”这个词对你来说一定不陌生。它模拟的是攻击者在突破边界防御后进入组织内部网络进行横向移动、权限提升和数据窃取的过程。而“域环境”尤其是微软的Active DirectoryAD域则是绝大多数企业内网的核心架构。可以说不懂域渗透就等于不懂内网渗透。那么为什么我们要“从零搭建”这样一个环境呢直接拿现成的靶机不好吗这里面的门道可不少。首先现成的靶机环境往往是固化的攻击路径和防御措施都已经被设计好了你只是在走别人设定好的流程。而自己从零搭建意味着你需要理解域环境中的每一个组件——域控制器、成员服务器、工作站、用户、组策略——是如何协同工作的。这就像学开车你不能只会在模拟器上开固定路线必须得自己从启动引擎、挂挡、打方向盘开始才能真正理解车辆的运行机制。其次一个完全由你掌控的环境是进行深度研究、复现新型攻击手法、测试防御策略的绝佳沙盒。你可以随意创建漏洞、配置错误策略、部署恶意软件而不用担心影响任何真实系统。这对于安全研究员、渗透测试工程师和想深入理解AD安全的学生来说是至关重要的第一步。这个项目就是带你亲手打造这样一个专属的、可控的、用于学习和研究的内网渗透单域实验室环境。2. 环境整体设计与核心组件选型搭建一个用于渗透测试的单域环境绝不是简单装几台虚拟机就完事了。它需要模拟一个真实企业内网的简化缩影同时又要兼顾实验的便捷性和可复现性。我的设计思路是最小化但功能完整。一个典型的单域环境至少需要三台机器一台域控制器、一台成员服务器和一台工作站。但为了覆盖更全面的攻击面我通常会搭建一个包含四台主机的环境。2.1 核心架构与角色分配我设计的标准单域环境架构如下域控制器这是整个域的大脑和心脏。我选择使用Windows Server 2016或2019。为什么不选最新的2022因为2016/2019是目前企业环境中保有量极高的版本更具代表性。它的核心服务是Active Directory 域服务负责管理所有域用户、计算机、组策略等。我会将其命名为DC01并分配一个固定的IP地址例如192.168.1.10。成员服务器在真实环境中除了DC还会有各种应用服务器如文件服务器、Web服务器、数据库服务器等。为了模拟横向移动我会搭建一台Windows Server 2016作为成员服务器命名为SRV01IP为192.168.1.20。我会在上面安装一些常见服务比如IIS和一个存在漏洞的旧版应用为后续的漏洞利用提供场景。工作站代表普通员工的办公电脑。我选择Windows 10专业版因为它是最广泛使用的客户端系统。将其命名为WIN10-CLIENTIP为192.168.1.30。这台机器将加入域供域用户登录使用。攻击机这是我们的“黑客”主机。我强烈推荐使用Kali Linux因为它集成了几乎所有你需要的渗透测试工具。将其命名为KALIIP为192.168.1.100。它位于同一个虚拟网络内模拟已经通过某种方式如钓鱼邮件进入了内网的攻击者。注意所有虚拟机应使用仅主机模式或自定义的私有NAT网络。绝对不要使用桥接模式否则你的实验环境可能会干扰到真实的家庭或公司网络甚至产生安全风险。2.2 软件与工具选型理由虚拟化平台VMware Workstation Pro或VirtualBox。VMware在性能和网络模拟上更胜一筹适合追求稳定和效率的用户。VirtualBox免费且跨平台是入门首选。我个人更倾向于VMware。操作系统镜像务必从微软官方渠道下载评估版镜像。切勿使用来路不明的“精简版”或“破解版”这些版本可能缺失关键组件或引入未知问题导致实验失败。渗透测试工具Kali Linux已经内置了绝大部分。但有几个工具需要特别关注我们会在攻击阶段详细讲解nmap扫描、impacket套件协议利用、BloodHound域内关系分析、Mimikatz凭据提取等。这个架构看似简单但已经包含了域渗透的核心要素身份认证Kerberos/NTLM、权限管理用户/组、资源访问共享、服务和信任关系域成员信任DC。攻击者从一台入域的工作站或服务器出发到最终完全控制域控制器这条攻击链上的大多数环节都能在这个环境中得到演练。3. 分步搭建实战构建你的单域实验室接下来我们进入实操环节。请跟随我的步骤一步步构建环境。我会详细解释每个操作背后的意图而不仅仅是告诉你点击哪里。3.1 第一步准备虚拟网络与基础系统首先在VMware中创建一个新的自定义虚拟网络例如VMnet2将其配置为“仅主机模式”并关闭DHCP服务。我们将手动分配IP地址以便于精准控制。安装域控制器新建虚拟机安装Windows Server 2016/2019。将网络适配器连接到VMnet2。启动系统将计算机名改为DC01重启。手动设置IPv4地址192.168.1.10子网掩码255.255.255.0网关可留空DNS服务器指向自己127.0.0.1安装AD服务后DC自身就是DNS服务器。安装完成后暂时不要做其他配置。安装成员服务器与工作站同理安装SRV01和WIN10-CLIENT。SRV01IP:192.168.1.20DNS指向192.168.1.10。WIN10-CLIENTIP:192.168.1.30DNS指向192.168.1.10。注意在加入域之前它们的DNS必须指向域控制器否则无法解析域域名。安装攻击机安装Kali Linux网络同样连接到VMnet2。手动设置IP:192.168.1.100DNS可以设置为192.168.1.10或公共DNS如8.8.8.8。3.2 第二步部署Active Directory域服务这是最关键的一步。在DC01上操作打开“服务器管理器”点击“添加角色和功能”。一路“下一步”直到“服务器角色”页面。勾选“Active Directory 域服务”。在弹出的窗口中点击“添加功能”。继续“下一步”直到安装完成。然后点击黄色警告标志上的“将此服务器提升为域控制器”。在“部署配置”中选择“添加新林”并输入根域名。这里我使用一个在公网不存在的测试域名lab.local。这很重要避免与真实域名冲突。设置目录服务还原模式密码用于灾难恢复请牢记。后续步骤保持默认直到“先决条件检查”通过然后点击“安装”。系统会自动重启。重启后DC01就正式成为lab.local域的域控制器了。你可以使用LAB\Administrator账户登录。3.3 第三步配置基础域环境登录DC01后我们需要创建一些基础对象模拟真实环境。创建组织单元和用户打开“Active Directory 用户和计算机”。在lab.local下新建组织单元例如Employees和Servers。这是一种良好的管理实践。在Employees下新建几个用户alice普通员工、bobIT支持人员、svc_sql一个用于运行数据库服务的服务账户。务必为用户设置初始密码并勾选“用户下次登录时须更改密码”对于服务账户svc_sql则取消勾选并设置为“密码永不过期”。在Servers下我们可以预先为SRV01创建一个计算机账户也可在加域时自动创建。创建安全组在EmployeesOU下新建安全组如IT_Admins、Finance_Users。将bob用户加入到IT_Admins组。配置组策略打开“组策略管理”。在lab.local域上右键“在这个域中创建GPO并在此处链接”。命名为“Default Domain Policy - Test”。右键编辑。这里我们可以故意引入一些“不安全”的配置用于后续攻击演练。例如计算机配置 - 策略 - Windows设置 - 安全设置 - 本地策略 - 安全选项将“网络访问可匿名访问的共享”设置为包含C$等模拟配置失误。计算机配置 - 策略 - 管理模板 - 系统 - 凭据分配启用“允许分配保存的凭据用于仅 NTLM 服务器身份验证”为Wdigest攻击或哈希传递铺路。注意在真实生产环境中这些策略是极其危险的但在我们的实验环境中它们是有价值的“漏洞”。3.4 第四步将服务器和工作站加入域将SRV01加入域登录SRV01的本地管理员账户。打开系统属性在“计算机名”选项卡点击“更改”。选择“域”输入lab.local点击确定。输入域管理员凭据LAB\Administrator。重启后使用域账户如LAB\bob登录验证加域成功。在SRV01上安装IIS并创建一个简单的网页。在防火墙中放行80端口。将WIN10-CLIENT加入域过程与SRV01类似。加域重启后尝试使用LAB\alice账户登录。登录成功后打开文件资源管理器访问\\SRV01\应该能看到共享可能需要输入LAB\alice的凭据。这验证了基本的域内资源访问功能。至此一个基础的单域环境就搭建完成了。此时你的网络应该看起来是这样的DC01、SRV01、WIN10-CLIENT三台机器都在lab.local域内可以互相通信和进行身份认证。KALI攻击机在同一个网段但不在域内模拟一个内部威胁。4. 核心渗透测试环节实战演练环境搭建好不是目的利用它进行实战演练才是关键。下面我将模拟一个经典的攻击链展示如何利用这个环境进行内网渗透。4.1 环节一信息收集与侦察攻击者首先需要摸清内网环境。从KALI机器开始。网络发现# 使用nmap进行存活主机扫描 nmap -sn 192.168.1.0/24这会发现192.168.1.10.20.30等主机。端口与服务扫描# 对DC进行详细端口扫描 nmap -sV -sC -O -p- 192.168.1.10你会看到DC开放了53(DNS)88(Kerberos)135139445(SMB)389(LDAP)636(LDAPS)3268(Global Catalog) 等关键端口。这些端口揭示了它是一台域控制器。SMB枚举# 使用enum4linux枚举SMB信息 enum4linux -a 192.168.1.10或者使用smbclient# 尝试空会话连接如果前面组策略允许了匿名访问 smbclient -L //192.168.1.10/ -N如果成功可能列出共享列表甚至获取用户列表。4.2 环节二初始访问与权限提升假设我们通过钓鱼邮件在WIN10-CLIENT上获得了alice用户的权限一个普通域用户。现在我们在KALI上已经拿到了alice的密码哈希或明文密码。使用Impacket进行横向移动# 使用alice的凭据尝试访问SRV01的C$共享 python3 /usr/share/doc/python3-impacket/examples/smbclient.py lab.local/alice:Password123192.168.1.20 # 如果成功可以列出目录上传文件等。利用配置错误提取凭据 如果我们在SRV01上获得了本地管理员权限可以尝试转储内存中的凭据。这里模拟使用Mimikatz需在Windows目标机上执行。在渗透测试中我们可能通过漏洞上传并执行它。# 在Kali上我们可以使用Impacket的secretsdump.py远程转储DC的哈希如果拥有域管理员权限或特定的漏洞 # 注意这需要高权限。这里演示的是攻击的终极目标之一。 python3 /usr/share/doc/python3-impacket/examples/secretsdump.py lab.local/administrator192.168.1.10 -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0重要警告secretsdump.py需要有效的域管理员NTLM哈希。这通常是通过其他手段如Kerberoasting、AS-REP Roasting、NTLM Relay等先获取到一个高权限账户的哈希后才能进行的。这正体现了攻击链的递进性。4.3 环节三域内权限维持与横向移动黄金票据攻击 如果我们通过secretsdump获取了域控制器的krbtgt账户的哈希我们就可以伪造任意用户的TGT票据授予票据即生成“黄金票据”。# 在Kali上使用Impacket的ticketer.py python3 /usr/share/doc/python3-impacket/examples/ticketer.py -nthash krbtgt_nt_hash -domain-sid domain_sid -domain lab.local administrator生成票据后使用export KRB5CCNAME环境变量指定票据文件即可用administrator身份访问任何域资源。BloodHound 图谱分析 这是现代域渗透的“神器”。我们需要在KALI上运行BloodHound的采集器SharpHound.exe需上传到已控的域内主机执行它会收集整个AD的拓扑、权限关系数据然后导入到Kali上的BloodHound UI中进行分析。在Kali启动BloodHoundbloodhound 在Neo4j中设置密码默认bloodhound。在UI中上传SharpHound收集的zip文件。 BloodHound会清晰地展示出从alice到域管理员的攻击路径例如alice是某服务器的本地管理员 - 该服务器上有某服务账户的凭据 - 该服务账户是某特权组的成员 - 该组对域控制器有写权限。这为我们提供了清晰的横向移动路线图。5. 常见问题、排查技巧与防御思考在搭建和演练过程中你肯定会遇到各种问题。这里我分享一些踩过的坑和解决思路。5.1 环境搭建常见问题问题现象可能原因排查与解决计算机无法加入域1. DNS解析失败。2. 网络不通。3. 域控制器防火墙阻止。4. 时间不同步。1. 确保客户机DNS设置为DC的IP。2. 在客户机上ping DC的IP和域名lab.local。3. 在DC上关闭防火墙或放行相关端口实验环境可暂时关闭。4. 确保所有机器时间相差不超过5分钟。域用户登录失败1. 密码错误。2. 账户被禁用。3. 用户无权在此计算机登录。1. 仔细检查密码。2. 在AD用户和计算机中检查账户状态。3. 在DC的“本地安全策略”或域组策略中检查“允许本地登录”权限。Kali无法解析域名DNS设置错误。在Kali的/etc/resolv.conf中增加nameserver 192.168.1.10。注意网络重启可能会重置建议修改/etc/resolvconf/resolv.conf.d/head文件。Impacket工具连接失败1. 认证失败。2. 目标服务未开启。3. 协议版本问题。1. 使用-hashes参数时确保哈希格式正确LM:NT。2. 使用nmap确认目标端口开放。3. 尝试使用-target-ip参数指定IP。5.2 渗透演练中的技巧与心得善用crackmapexec这是内网渗透的瑞士军刀。它可以批量测试SMB、WinRM、MSSQL等的凭据执行命令上传下载文件等。命令如crackmapexec smb 192.168.1.0/24 -u user.txt -p pass.txt可以快速进行密码喷洒攻击。关注服务账户在BloodHound中重点关注像svc_sql这类服务账户。它们通常密码不会频繁更改且可能被配置了过高的权限。通过Kerberoasting攻击使用GetUserSPNs.py可以离线破解其密码哈希。NTLM Relay攻击的利用在我们的实验环境中可以故意让SRV01的LLMNR、NetBIOS协议开启并关闭SMB签名默认关闭从而在内部网络发起NTLM Relay攻击将其他主机的认证流量中继到DC直接获取高权限。这需要配合Responder和ntlmrelayx.py工具。日志与监控别忘了从防御者视角看问题。在DC和成员服务器上打开“审核策略”记录成功和失败的登录事件、账户管理事件等。然后在你发起攻击时去“事件查看器”里观察这些日志是如何记录的。这能帮你更好地理解攻击检测原理。5.3 从攻击到防御的思维转变搭建并攻破自己的域环境后最大的收获不是学会了几条攻击命令而是深刻理解了“攻击路径”和“安全假设”。你会明白最小权限原则为何如此重要如果alice只是一个普通用户没有对任何服务器的本地管理员权限很多横向移动手段就会失效。强密码与定期改密的价值如果krbtgt账户的密码强度极高且定期更改黄金票据攻击的窗口期就很短危害降低。启用SMB签名的必要性如果所有服务器都强制启用SMB签名NTLM Relay攻击将无法成功。禁用过时协议的意义关闭LLMNR和NetBIOS可以很大程度上消除基于名称解析的欺骗攻击。这个自己搭建的单域环境就像一个安全的“道场”。你既可以在这里练习最锋利的“矛”攻击技术也可以在这里锻造最坚固的“盾”防御策略。每一次成功的攻击都应该对应一个或多个防御方案的思考。只有这样你的技能才是完整和立体的。