
1. 域渗透的底层逻辑为什么它是内网攻防绕不开的关口先聊点实在的。域渗透这三个字在网络安全攻防演练里几乎是出场率最高的技术方向之一。无论是大型企业的红队评估还是国家级的网络安全攻防演练攻击方一旦拿到了一台内网主机接下来绝大多数动作都会围绕活动目录Active Directory简称AD展开。原因很简单AD就是现代企业内网的“身份认证总闸”从账号登录、权限分配到组策略下发几乎全部依赖它。只要搞定了AD就基本等于掌握了整个内网。很多人把域渗透理解成“打域控、拿哈希、弹个shell”这个说法不能说错但太片面。真实的域渗透是一条完整的链路从单点突破到内网横移从凭据窃取到权限维持再到防御方的检测与反制是一套体系化对抗。我个人做了多年红队和蓝队相关工作最大的感受是域渗透技术本身并不算高深难的是在真实攻防演练中把每一步做扎实同时理解每一步为什么这么做、防御方会怎么盯你。这篇教程我打算按实战链路来写从环境搭建讲起覆盖信息收集、权限提升、横向移动、权限维持再到防御方的检测和加固思路。整个过程中我会穿插大量实际踩过的坑和调试记录尽量让你读完就能直接上手。内容偏实操但每个关键步骤我都会解释原理因为只有理解了协议层和机制层的逻辑遇到复杂环境你才不会懵。无论你是刚接触内网渗透的新手还是已经做过一些项目但没系统性梳理过AD攻防的从业者这篇内容都值得你花时间过一遍。2. 环境搭建与工具链准备用最贴近实战的方式把靶场立起来2.1 一台DC加两台成员机复现90%的攻防场景学域渗透不能光看文档必须动手。但直接拿生产环境练手肯定不行安全合规上是红线。我的建议是本地用虚拟机搭一个小型AD环境整个拓扑控制在三台机器左右就能覆盖大多数攻防演练场景一台Windows Server 2019角色是域控DC域名建议用corp.local这种标准内部域名。一台Windows 10加入域作为普通工作站模拟办公终端。一台Windows Server 2016或2019加入域装好IIS和SQL Server模拟业务服务器。这套拓扑的好处是域控负责AD DS、DNS、Kerberos等服务工作站当作日常跳板机使用业务服务器用来模拟典型的应用层攻击面。内存分配方面DC给2GB、成员机和业务服务器各给2GB就够跑起来了。搭建过程有几个细节容易卡住。第一安装AD DS角色之后执行域提升时需要设置目录服务还原模式密码这个密码务必记牢后面做应急恢复会用到。第二所有机器的DNS一定要指向DC的IP否则加域时大概率会报“找不到域”或DNS解析错误。第三成员机加域后重启前记得确认当前账号有域用户权限不然第一次登录容易绕弯路。网络连接方式建议使用虚拟机的“仅主机模式”或自定义的隔离网段模拟独立内网环境。这样既能避免把实验流量暴露到真实局域网中也能方便你自己控制路由和访问关系。从攻防实战的角度讲隔离环境还能让你更专注在协议层面的行为捕捉从而对后续的检测分析有更直观的理解。2.2 工具链选型不贪多但每个工具都要知道它的定位域渗透的工具圈很大但真正高频使用的其实就那么十几个。我按阶段分类整理一下并把每个工具在链路中的位置说清楚信息收集阶段BloodHound用于分析AD对象关系和攻击路径ADFind、PowerView用于查询域内用户、组、策略等数据。BloodHound核心价值是把LDAP查询结果可视化直接指出哪条路径能从当前权限走向域管。凭据获取和攻击阶段Mimikatz负责从内存中提取明文密码或哈希Rubeus处理Kerberos相关攻击如AS-REP Roasting、KerberoastingImpacket套件里的secretsdump.py、wmiexec.py、smbexec.py用来做远程执行和哈希传递。横向移动PsExec风格的工具最常用WMI远程调用也值得掌握WinRM在某些环境中是更稳的选择。权限维持SharPersist、Impacket套件里的ticketer.py等分别用来做计划任务持久化和伪造票据。工具选型的原则是不要贪多每类掌握一两个趁手的就够。BloodHound建议必装而且要学会把它的查询结果对应到真实环境中。很多时候图上的路径和现实不是完全一致的例如某条最短路线的边可能因为防火墙或主机不可达而失效这时候你必须结合实际情况重新规划。另外建议你养成用命令行工具的习惯。GUI工具演示效果好看但真实攻防环境下很多目标机器没有图形界面或者你只能通过反弹shell操作这时命令行熟练度直接决定效率。PowerView、ADFind这类命令行的实战价值远超GUI工具。2.3 搭建常见报错排查加域失败和DNS解析是头号拦路虎环境搭建阶段最常见的两个问题几乎每个新手都会遇到。第一个是成员机加域时报“找不到网络路径”或“域控制器不存在”排查顺序应该是先ping DC的IP确认网络通不通再用nslookup确认DNS是否指向DC如果都正常检查DC防火墙是否放行了AD相关端口尤其是135、139、445、3389和动态RPC端口。第二个是加域时提示“拒绝访问”多数是当前登录账号不是本地管理员或者输入的域账号权限不够。确保账号隶属于Domain Admins组或至少在目标机器的本地管理员组里。有一个被我忽略过多次的坑是时间同步。Kerberos认证对时间非常敏感客户端和DC之间的时间偏差如果超过5分钟会直接报“时钟偏移过大”导致认证失败。加域后第一件事就是把成员机的W32Time服务与DC同步否则后面做Kerberos相关攻击时会莫名其妙失败。3. 信息收集与攻击面分析决定攻防成败的“前哨战”3.1 本机信息收集先把根据地搞明白拿到一台内网主机后第一个动作不是急着扫网段而是先做本机信息收集。你需要搞清楚这台机器是什么角色、当前登录用户属于哪些本地组、本机开放了哪些服务、最近运行过什么进程、是否有敏感文件。我常用的命令组合是whoami /all ipconfig /all net user %username% /domain net localgroup administrators tasklist /v netstat -anowhoami /all能直接看到当前用户的所有域组信息包括是否有特权。net localgroup administrators用来判断当前用户是否具备本地管理员权限这决定了后续横向移动时能否使用哈希传递。netstat -ano则梳理出当前主机和哪些IP有活跃连接这些连接往往就是下一步横向移动的潜在目标。除了命令行我还会抓取浏览器保存的密码、远程桌面保存的凭据、C:\Users\Public和桌面上的敏感文档。这些操作看似基础但实战中往往能让你在最短时间内拿到更多凭据。3.2 LDAP查询与BloodHound从静态信息到攻击路径的可视化本机信息收集完成后接下来就是AD对象收集。直接用net user /domain和net group Domain Admins /domain可以快速看用户和组但这些命令的输出维度太单一。真正高效的方式是使用LDAP查询PowerView是首选Get-DomainUser -TrustedToAuth | Select samaccountname, useraccountcontrol Get-DomainGroup -Identity Domain Admins -Member Get-DomainComputer -OperatingSystem *Server* | Select name这里有几个关键查询值得关注。一是搜索启用了TrustedToAuth属性的用户这类账号可以直接做约束性委派攻击。二是枚举所有域管理员组成员明确最终攻击目标。三是列出所有服务器操作系统主机判断哪些可能是额外的基础设施节点。这些信息组合起来会给你画出一张清晰的域内资产地图。BloodHound的价值在于把LDAP收集到的数据图形化。它分成采集端和展示端采集端用SharpHound.exe在目标机器上收集数据生成一个zip文件导入到BloodHound的Neo4j数据库后就能看到整个域内的用户、组、计算机、会话关系和ACL。我最常用的查询是“从当前用户到域管理员的路径”BloodHound会直接给出所有可能的攻击链并且标注出每条边需要利用的技术。理解这些边的含义你就明白为什么AD里某些配置会带来巨大风险。3.3 网段探测与敏感服务识别AD对象信息只告诉你“谁是谁”要找到机器还活着、开放了什么服务还需要主动探测。ping或arp -a做第一轮存活扫描然后用nmap或fscan对发现的存活主机做端口和服务识别。重点看以下几类端口445SMB服务可能存在永恒之蓝类漏洞也是哈希传递的核心端口。3389远程桌面服务如果能拿到凭据可以直接登录。5985/5986WinRM服务Impacket的wmiexec.py和evil-winrm依赖它。1433/3306数据库服务检查是否存在弱口令。80/443Web服务关注是否存在常见的Web漏洞。实战中我最常用fscan做全网段扫描输出格式直观速度快还能顺便做高危漏洞检测和弱口令爆破。不过要注意大范围扫描很容易触发防御设备告警尽量模拟真实攻击队在授权范围内的扫描节奏控制发包速率必要时使用代理和中转节点。4. 权限提升与凭据攻击从普通用户到域内高权限4.1 本地提权先把这台机器吃透域渗透的起点往往只是普通域用户甚至只是本地普通用户。要开始横向移动通常需要先拿到本地管理员权限。本地提权的方式很多包括利用系统漏洞如PrintNightmare、常见服务错误配置、注册表AlwaysInstallElevated、弱路径DLL劫持等。这里我分享一个真实发生过的例子。某次演练中我们通过Web漏洞拿下一个IIS应用池账号这台机器上装了老版本Everything它以SYSTEM权限运行并且允许普通用户读取其配置目录。通过替换配置目录下的DLL成功提权到SYSTEM。这个案例的启发是提权不一定非要打内核漏洞重点在于识别目标机器上“以高权限运行但配置不当的第三方软件”。在信息收集阶段一定要多留意进程列表、服务列表、计划任务。本地提权成功后第一时间用Mimikatz或其他工具抓取当前机器的本地账号哈希和明文密码。注意Win10和Server 2016以上的系统默认启用了Credential Guard的某些保护机制再加上微软默认在LSASS中启用了受保护的内存区域传统的sekurlsa::logonpasswords在某些环境可能抓不到。这种情况下可以尝试禁用或绕过Credential Guard或者用lsassy这种直接读取LSASS dump文件的工具。4.2 Kerberoasting与AS-REP Roasting两种经典的Kerberos攻击在AD环境里Kerberos协议就是通行证体系围绕它的攻击几乎贯穿了整个域渗透链路。两种最常见的攻击是Kerberoasting和AS-REP Roasting。Kerberoasting的核心思路是域内任意用户都可以向KDC申请注册了服务主体名称SPN的服务的服务票据TGS。这个TGS是用服务账号的哈希加密的攻击者在本地拿到TGS后可以离线对加密部分做暴力破解。如果服务账号恰好是弱密码就能被离线破解出明文密码。更值得注意的是很多管理员会把服务账号加入域管理员组导致破解出密码后直接获得域管权限。攻击的命令非常简洁# 枚举所有SPN账号 Get-DomainUser -SPN -Status AdminCount | Select samaccountname, serviceprincipalname # 使用Rubeus申请TGS并导出 Rubeus.exe kerberoast /outfile:hashes.txtAS-REP Roasting则是针对“不要求预认证”的用户。AD默认情况下用户在认证时需要发送带有时间戳的预认证密文但如果某个用户账号被配置为“Do not require Kerberos preauthentication”攻击者就可以不提供密码直接申请该用户的TGT然后对密文做离线破解Rubeus.exe asreproast /outfile:asrep_hashes.txt拿到哈希后用Hashcat配上合适的规则跑字典密码复杂度不高的情况下很快就能出结果。这两种攻击的防御重点是服务账号密码要足够复杂并且尽量用组托管服务账号gMSA来自动轮换密码。4.3 其他值得掌握的攻击面ACL滥用与委派攻击除了Kerberos攻击AD的ACL滥用和委派攻击也属于实战中的高频路径。ACL滥用的场景是当前账号对某个高权限对象有GenericAll、GenericWrite、WriteDacl等权限可以通过修改对象属性或重置密码来获得更高权限。例如当前用户对某个域管理员的账号有GenericAll权限就能直接重置该管理员密码然后用它登录域控。委派攻击主要分非约束性委派、约束性委派和基于资源的约束性委派三类。攻击者如果控制了一台设置为非约束性委派的主机并且某个高权限用户恰好在该主机上进行过认证那么这台主机的内存里就能捕获到该用户的TGT从而直接模拟该用户身份。这些攻击的检测和利用都需要深入理解AD对象安全模型建议在学习时把每种攻击对应到BloodHound的边上加深理解。5. 横向移动与域控接管从单机沦陷到内网漫游5.1 哈希传递、票据传递与远程执行拿到管理员哈希后不需要破解出明文就能进行横向移动。哈希传递Pass-the-Hash, PtH的原理是NTLM认证针对的是密码的哈希而不是明文密码所以直接使用内存中的哈希值就能完成身份认证。Impacket套件让这种攻击变得非常简单# 使用哈希直接执行远程命令 impacket-wmiexec -hashes :NTLMHash domain/usertarget-ip impacket-smbexec -hashes :NTLMHash domain/usertarget-ip如果拿到了Kerberos票据则可以使用票据传递Pass-the-Ticket, PtT的方式直接向特定服务请求访问。mimikatz sekurlsa::tickets /export导出票据后再用kerberos::ptt导入当前会话就能以该票据的身份访问指定服务不需要重新输入密码。远程执行工具的选择也很讲究。wmiexec.py和smbexec.py比较隐蔽虽然会产生日志但不会像PsExec那样在本机留下可执行痕迹。实际攻防演练中很多检测规则都会盯PsExec的服务创建事件所以Impacket风格的工具运用更广泛。5.2 利用GPO和计划任务做规模化控制当你有权限修改组策略对象GPO时意味着你可以向所有受该GPO影响的计算机和用户下发指令。这在横向移动和权限维持阶段都是“大杀器”。实际操作是先创建一个新GPO链接到目标OU组织单位然后在GPO中添加计划任务或启动脚本等到客户端刷新策略后自动执行命令。计划任务方式更为直接通过schtasks注册一个指定时间执行的远程任务就能完成命令下发schtasks /Create /S target-ip /U domain\user /P password /SC ONCE /ST 09:00 /TN updater /TR cmd.exe /c whoami C:\Windows\Temp\result.txtGPO方式的隐蔽性和覆盖范围都优于单个计划任务但也容易触发组策略相关的安全告警。实际操作时必须控制好修改范围和时效演练结束后及时清理。5.3 拿下域控利用NTDS.dit提取域内全部凭据最终目标通常是对域控的完全控制。拿到域管权限后最常做的操作是读取NTDS.dit数据库。这个文件保存了域内所有用户的哈希和完整的安全信息一旦拿到全域账号沦陷。使用Impacket的secretsdump.py不仅可以直接读取目标机器的NTDS.dit还可以解析注册表中的系统密钥来解密其中的哈希impacket-secretsdump -ntds ntds.dit -system SYSTEM -outputfile ntds_hashes拿到所有哈希后通常会随便抓一个域管账号的哈希做哈希传递登录域控。如果域管账号开启了智能卡登录或其他限制也可以用NTLM继电器的方式尝试。这个阶段必须格外谨慎。域控是防御方的核心监控对象任何异常登录行为都可能触发严格告警。尽量把操作集中在短时间内完成并且不要养成习惯性导出全部哈希的习惯避免攻击痕迹过重。6. 权限维持与痕迹清理别让一次完整的攻击链路被轻易溯源6.1 黄金票据与白银票据权限维持的本质是在AD中植入后门确保即使你丢失了当前的访问权限也能重新回到高权限状态。最常见的两种Kerberos票据后门是黄金票据Golden Ticket和白银票据Silver Ticket。黄金票据伪造的是TGT前提是拿到了域内krbtgt账号的哈希。有了这个哈希攻击者可以创建任意用户的TGT指定任意访问权限和有效期。Mimikatz的简化命令kerberos::golden /user:fakeadmin /domain:corp.local /sid:S-1-5-21-xxx /krbtgt:fakehash /ticket:admin.kirbi伪造成功后把票据导入当前会话就能以任意用户身份访问域内服务包括域控的CIFS服务、LDAP服务、HTTP服务等。白银票据伪造的是针对特定服务的TGS不需要krbtgt哈希只需要目标服务账号的哈希。它的优点是流量只在客户端和目标服务之间不会和KDC产生交互隐蔽性更强。但缺点是只能访问特定服务如果目标服务账号被改了密码票据就失效了。这两种票据后门都很难被清除因为krbtgt的密码哈希不会自动更换。防御方在应急响应时通常需要连续两次重置krbtgt密码并重启域控才能有效清除黄金票据带来的长期风险。6.2 账户后门与隐藏管理员票据后门之外我更常用的是创建隐蔽的域账号或者修改现有账号的ACL。直接创建账号虽然简单但太容易被发现。我更倾向于找一个平时不活跃的域用户给它添加DCSync权限或者把它的sIDHistory属性设置为域管理员的SID这样它实际上拥有了域管权限但在常规审计中不一定被立刻注意到。这种权限维持方式的优点是隐蔽性强只要有足够的ACL权限普通安全运营很难发现。缺点是需要对AD安全模型有较深理解操作时必须小心不能把环境搞坏了。6.3 痕迹清理日志、文件和时间线攻防演练结束后清理痕迹经常被忽略但非常重要。需要清理的重点包括安全日志Security.evtx清除与登录、特权使用、对象访问相关的日志。PowerShell操作日志和脚本块日志清除执行过的命令痕迹。计划任务和服务注册表项删除创建的持久化任务和服务。上传的工具和执行文件删除相关文件并尽量覆盖磁盘空间。文件的修改时间对改动过的系统文件修改时间戳回到原始值。有个容易被忽略的细节Windows的事件日志有Microsoft-Windows-PowerShell/Operational这个独立日志里面记录了所有PowerShell命令的执行历史和模块加载信息。实战中经常有人清了安全日志却忘了这个导致操作命令被完整还原。需要说明的是清理日志本身也是安全告警的来源尤其是大规模删除事件日志的行为会被很多EDR当成异常事件。更稳妥的做法是精细化删除特定事件ID的日志条目而不是整份清空。7. 防御视角蓝队如何针对AD攻击链做好检测7.1 攻击行为对应的日志与检测点做攻防不能只会攻击防御视角的检测思路同样重要。下面这张表整理了我认为价值最高的检测点和对应的攻击行为红蓝双方都可以作为参考。攻击阶段典型攻击手法关键检测点本机信息收集PowerView查询AD对象PowerShell脚本块日志、LDAP查询频率异常凭据窃取Mimikatz读取LSASS检测LSASS进程访问、进程注入行为横向移动哈希传递、WMI远程执行登录类型3的异常来源IP、双跳登录事件权限提升Kerberoasting、AS-REP Roasting大量TGS请求、用户预认证关闭事件权限维持黄金票据krbtgt账号异常登录事件、长时间有效的TGT域控接管DCSync同步复制DS-Replication-Get-Changes权限滥用日志其中LSASS进程投递和异常LDAP查询是最容易发现攻击行为的点。任何进程试图打开LSASS的句柄都可能被EDR标记尤其是通过OpenProcess方式访问时要重点排查。7.2 企业AD环境加固的几项核心措施从防御角度出发以下几个措施对提升AD环境安全性最有效果启用并强制实施Protected Users组禁止该组成员交互式登录降低票据窃取风险。使用Microsoft LAPS管理本地管理员密码避免所有机器共用相同本地管理员密码。这一点非常关键因为哈希传递最怕的就是本地管理员密码统一。对域内服务账号启用gMSA实现密码自动轮换从根本上压缩Kerberoasting的时间窗口。开启Credential Guard和Windows Defender Credential Guard阻止Mimikatik直接从LSASS读取凭据。把域管账号设置为不可交互登录并且不要在日常运维中使用高权限账号。定期审计ACL和委派配置发现并修复异常权限分配。真实演练中我发现很多企业的AD基础设施并不复杂但安全意识不到位账号权限混乱、密码策略薄弱、补丁滞后导致攻击链路非常顺畅。保护AD环境除了技术手段后续的权限治理其实更有价值。8. 常见问题速查域渗透过程中最容易卡住的几个环节8.1 哈希传递失败系统版本和本地策略是主因哈希传递失败的原因千奇百怪给我留下最深印象的是目标机器系统版本过旧或本地策略限制。Windows 10 1709以上的系统默认开启了Restricted Admin Mode会影响SMB远程登录的哈希传递效果。另外如果目标机器的管理员账号被重命名或者使用了虚拟账号都会导致哈希传递失败。排查时先确认目标机器的系统版本然后用本地安全策略检查Network access: Do not allow anonymous enumeration of SAM accounts and shares是否启用。必要时使用wmiexec.py替代psexec.py因为WMI对某些本地策略的敏感度较低。8.2 BloodHound数据导不进去版本匹配问题BloodHound的数据采集端和展示端版本必须保持匹配。SharpHound新版采集出来的数据文件如果导入到老版BloodHound经常出现无法解析或关系丢失的问题。这里稳妥的解决办法是升级到同一版本更推荐直接用bloodhound-python在Linux上远程采集然后在最新版界面里分析。导入数据前需要确认Neo4j数据库是否正常启动并检查浏览器访问的BloodHound界面和数据库认证信息是否一致。这个坑看似简单但确实浪费过我不少时间。8.3 Mimikatz抓不到明文密码新版本Windows默认启用了Lsass保护机制Mimikatz的经典命令会直接失败。如果你在目标机器上已经拥有管理员权限或SYSTEM权限可以尝试以下顺序先确认Lsass是否开启了保护如果开启则需要用驱动或其他方式关闭如果无法关闭可以导出LSASS的dump文件再用本地的mimikatz对dump文件进行离线分析。在Windows Server 2016和Windows 10以上环境中最可靠的、最不过时的做法是直接抓取内存中缓存的Net-NTLMv2哈希和Kerberos票据能抓到这个方向比单纯依赖明文密码更稳妥。9. 从实战到进阶域渗透的学习方法论写到这里核心技术点基本覆盖完了。最后聊聊我个人的学习路径建议。我见过很多人上来就背工具命令效率很低。我的建议是先理清AD的三大核心机制再反复练习攻击链路在此基础上审视防御视角的检测与加固最后回到原理层面消化理解。第一先把AD的认证机制彻底吃透。Kerberos的整体交互流程NTLM的挑战响应机制TGT和TGS的票据格式这些都是基础中的基础。“黄金票据”为什么有效本质上是因为你有了krbtgt的哈希可以伪造任意TGT“哈希传递”为什么有效本质上是因为NTLM认证不要求明文密码只看密码哈希。原理通了工具只是实现手段。第二在实验环境里反复打通完整攻击链路。至少完成五轮完整的“单点突破到域控接管”流程再尝试一次纯命令行、全程不用GUI工具的挑战确保自己不会在关键节点卡住。第三一定要站在蓝队视角审视自己的攻击行为。从日志分析的角度逆向思考自己刚才的动作会不会触发告警如果我是防御方会从哪些日志发现这次攻击这种思维训练能让你在真实演练中更从容也能帮助你写出更有效的检测规则。第四持续追踪社区的技术文章和工具更新。AD领域变化很快尤其是攻击工具和检测规则几乎每月都有更新。保持学习的习惯比一次性的“精通”更关键。域渗透这条路很长没有所谓“精通”的终点。但只要理解了下层协议、熟练了上层工具、懂了防御方的检测思路你就可以在各种复杂环境中快速找到突破路径也能在防守时提前封堵潜在的缺口。希望这篇教程能成为你入门的第一步更希望你在实战中不断积累、持续精进。