尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Cobalt Strike横向渗透域控路径:从普通域主机到全域哈希接管

Cobalt Strike横向渗透域控路径:从普通域主机到全域哈希接管 上个月做一场授权红队测试目标是一家部署了完整Windows域的政企内网。第一台机器是存放内部OA系统的Windows Server 2008弱口令直接打穿低权限一个Beacon回连到Cobalt Strike。从那一刻起我的目标就只剩下一个域控。那十几个小时里我几乎把所有横向渗透的招数都过了一遍最终以域控失陷、全域哈希导出收场。整个过程走完我觉得很有必要把“Cobalt Strike从普通域主机横向到域控”这条路径完整拆开讲清楚。这篇文章的定位不是入门科普也不是纯攻击教学而是把一条真实可复现的横向渗透链路从信息收集到凭据利用再到域控权限收取按实际执行顺序逐层展开。你需要在授权测试、加固评估或防守方检测脚本开发里用到这些视角都能在这篇里找到对应的操作手法和判断依据。1. 为什么每一次横向渗透的最终目标都是域控1.1 域控在Windows域环境里的价值权重域控Domain Controller是整个Active Directory域环境的心脏。它保存全量用户账户、计算机账户、组策略、DNS区域副本以及所有身份验证凭据。域内每一台主机的登录认证请求最终都会提交到域控去校验。这意味着只要域控失陷整张网就等于被提起了后颈皮。从红队的视角看域控的价值集中在三点ntds.dit文件这是Active Directory的数据库文件里面存着整个域的哈希表。能读到这个文件就等于拿到全域所有账户的NTLM Hash后续登录任意主机都有凭据可用。域管会话域控上通常是域管理员日常登录、维护的机器。拿到域控的Shell很可能直接操作域管进程或抓到域管明文密码、哈希。GPO下发能力域控可以修改组策略并强制下发给全网主机。配合计划任务、启动脚本攻击者在域控上可以做到“一条命令全网执行”。用一个不太准确的类比域内普通主机好比员工工位你有工位权限只能翻自己抽屉而域控相当于公司的门禁总控室你不仅能改所有人的门禁卡还能让门禁系统全网重启。1.2 一条完整的横纵渗透路径应该怎么规划很多新手拿了第一台机器就开始乱打漫无目的地扫网段、堆payload。那不是横向渗透那是碰运气。一次正规的横向渗透域控路径本质上是一条权限逐步抬高的流水线阶段核心目标典型动作初始立足拿到域内主机权限漏洞利用、弱口令、钓鱼域内侦察摸清网段、域结构、高危目标域信息收集、端口扫描、SPN查询权限提升从普通用户到本地管理员/System内核漏洞、服务配置错误、UAC绕过凭据获取拿到本地或内存中的哈希/票据hashdump、mimikatz、DUMP lsass横向移动利用凭据访问更多主机PtH、PsExec、WMI、WinRM、DCOM定位域管找到域管登录过的机器/会话会话扫描、BloodHound路径分析最终接管拿下域控权限域管凭据登录域控、DCSync、持久化说实话真正花时间的阶段是前期的域名信息收集和凭据积累最后一两步反而是水到渠成。如果你在做防守方看到攻击者在这个链条里推进的速度比如刚拿到普通主机半小时后就出现了本地管理员凭据抓取动作那就可以提前判断对方正在向域控进发。2. 落点之后第一件事先把自己“放”在内网地图上2.1 网络位置与主机身份的快速摸底拿到Beacon会话后第一步不是急着扫网段而是先搞清楚这台机器是谁、在哪个网段、有没有加域、当前是什么权限。我会习惯性地先跑一组基础命令组合beacon shell whoami /all beacon shell ipconfig /all beacon shell route print beacon shell arp -a beacon shell net view /domain这里有一个很容易被忽略的点whoami /all里的域/工作组信息直接决定了你是按域内横向的思路走还是按普通内网渗透的思路走。如果主机根本没加域那后面所有Kerberos相关攻击都是空谈只能老老实实走本地账号哈希横移。arp -a看起来很初阶但在真实环境中很有价值。它反映的是这台机器近期通信过的主机这些主机往往有业务关联比直接扫整个C段更“优先攻击”。在红队行动里业务关联的机器之间往往存在双向信任打其中一台大概率能反过来影响另一台。2.2 域控制器定位与全域名信息清单确定了主机在域里之后下一个动作就是找域控。域控的位置不需要暴力扫描直接用协议本身就能问出来beacon shell nltest /dclist:目标域名 beacon shell net group Domain Controllers /domain beacon shell net time /domainnet time /domain会把请求直接发到域控时间同步服务在大多数域环境里默认开启响应里带着的机器名就是域控的机器名。再配一条ping 域控主机名或者nslookupIP就出来了。之后需要对整个域结构做一个完整的“家底盘点”。这个阶段是信息量最大的时刻建议有意识地按清单收集以下内容域信任关系nltest /trusted_domains现有域是否存在跨域/森林信任域管理员组net group Domain Admins /domain直接看最高权限组的成员域控列表net group Domain Controllers /domain本机管理员组net localgroup administrators确认自己当前的提权空间域密码策略net accounts /domain判断是否需要准备密码喷洒所有入域主机列表这步建议用工具扫描或PowerShell查询CS里直接跑shell net view /domain:目标域名也能列出来我把这个阶段叫“投资前的尽调”。如果连域里有什么、谁管着域、密码策略是什么都不知道就开打后面要么重复劳动要么打草惊蛇。2.3 管理员进程与敏感会话的定位拿到域管理员组的成员名单后下一步是定位这台机器上是否有域管会话或者是否有高权限进程正在运行。Cobalt Strike里最常用的是用tasklist和PowerShell组合查beacon shell tasklist /v /fi username eq 域名\\administrator如果机器上恰好有域管进程那就相当于直接捡到了通往域控的钥匙。要是没有也没关系后面横向到更多机器逐步找总会遇到。实际测试中大部分域环境不会允许域管在自己的机器上长期挂会话但域管经常通过远程桌面或服务方式登录到特定跳板机。所以把目标锁定在“管理网段”“运维主机”“监控服务器”这些特殊机器上效率远高于满网撒网。3. Beacon会话操作的基础功权限提升与凭据抓取3.1 把权限从普通用户抬到System/管理员CS的Beacon会话默认权限取决于你打进时使用的漏洞和载荷。很多时候拿到的是普通域用户权限这时候横向移动受限得很厉害。提权这件事优先级最高的是getsystem——它会尝试一系列本地提权方法将会话权限提升到NT AUTHORITY\SYSTEMbeacon getsystem在部分较新系统上getsystem会失败这时就需要手动带过已知漏洞exp。CS的elevate模块可以指定使用某类提权漏洞beacon elevate ms16-032 x64 beacon elevate uac-token-duplication x64提权不建议硬试先跑一下系统补丁信息systeminfo或使用whoami /priv看当前令牌权限再挑选匹配环境的漏洞会稳妥很多。Windows的UAC在白名单管理员下也会限制令牌完整性很多失败不是漏洞无效而是你压根没有绕过UAC就尝试了需要高完整性令牌的操作。3.2 凭据抓取的常见姿势与坑提权到System后马上进入关键步骤抓本机凭据。CS里最常用的两条命令beacon hashdump beacon mimikatz sekurlsa::logonpasswordshashdump读取的是SAM数据库只能拿到本地账户哈希如果这台机器上别人远程登录过SAM里不一定有域凭据。mimikatz sekurlsa::logonpasswords是抓内存中lsass进程里缓存的凭据效果更全但更容易被杀软拦截。几个实测心得不是每台机器都能抓到域管凭据但哪怕只抓到一条本地管理员哈希也足够继续横向。被杀软拦了不要硬扛用反射加载、内存执行、替换签名等方式规避或者先做白加黑、免杀再拉工具。拿到哈希后立即放入CS的凭据库CS的pth命令能直接使用存入的哈希不需要保存明文。如果抓到了明文密码千万不要随手复制到笔记里真实行动中要随时准备清屏避免操作日志泄露关键凭据。凭据抓取是横向渗透的“弹药库”第一批弹药往往很有限。所以很多队伍的目标是快速拿一批主机每台都抓一遍积少成多再回头横向。4. 横向移动的几种主流打法与失败排查4.1 Pass the Hash用哈希直接登录在Windows域环境里NTLM哈希可以直接替代密码完成身份认证这就是哈希传递PtH。CS里最简单的做法是先把哈希保存进凭据库再创建一个带该令牌的进程beacon pth 域名\\administrator ntlm哈希执行成功后Beacon会在当前机器上以注入的令牌运行一个进程。之后访问远程主机的SMB共享、计划任务或服务时就会携带这个令牌的凭据。PtH的成功率取决于两个因素目标主机是否开启了Admin$共享、目标是否允许本地管理员通过空IPC$会话访问。注意一点执行pth后要使用rev2self恢复当前进程的原始令牌否则后续在Beacon里执行的命令都会带上这个注入令牌可能暴露操作路径或引发权限错乱。4.2 PsExec与SMB Beacon横向在CS里横向移动最常用的是jump系列命令。以jump psexec为例beacon jump psexec 192.168.10.20 x64它的原理是用当前会话的权限连接目标主机的ADMIN$共享上传服务二进制创建Windows服务通过服务启动来建立新的Beacon会话。实际上就是PsExec思路的CS封装。整个过程中涉及三个关键依赖目标防火墙放行445/139端口、当前令牌具备目标管理员权限、ADMIN$共享存在且可写。这三个条件缺一个都会导致失败。4.3 WMI与WinRM绕过SMB盲区的新路线现实环境里很多企业会封掉445端口只保留443/80或者用防火墙策略阻断SMB登录。这时候还死磕PsExec就是浪费时间。WMI和WinRM是另外两条横向通道beacon jump wmi 192.168.10.20 x64 beacon jump winrm 192.168.10.20 x64WMI走的是135端口利用WMI提供进程创建和管理能力不依赖SMB文件共享。WinRM则走5985/5986端口是微软官方远程管理通道。两者在域环境里通常会有更多例外放行尤其是WinRM在企业运维场景中经常被预配置好。实测对比来看WinRM的可靠性最高、行为最像正常运维流量但前提是目标开启WinRM服务且当前凭据被加入Remote Management Users组。4.4 横向移动失败的常见原因速查横向移动命令执行失败时不要急着换手法先根据报错定位问题。这是我在实战中反复踩坑后整理出来的对照表报错/现象常见根因处理建议ERROR 53 网络路径找不到目标445已封、防火墙拦截换WMI或WinRM确认目标可达性ERROR 1326 用户名或密码不正确哈希/密码错误或凭据不适用于该机器核对哈希完整性确认目标是否本地管理员ERROR 5 拒绝访问当前令牌权限不足检查注入令牌是否为管理员或先做提权超时无响应目标主机离线或防火墙丢包ping确认主机存活检查策略放行范围Kerberos相关错误时间偏移超过5分钟同步时间或改用NTLM认证被杀软拦截目标安装EDR/AV做免杀处理改用pth/wmi等方式降低特征记住一个重要原则横向移动的失败绝大多数和网络策略、凭据权限相关而不是漏洞利用姿势不够花。先排除网络层再排查应用层永远比盲目换工具更高效。5. 拿下域控后的关键操作从Shell到全域哈希5.1 建立域控会话的两种常用手法走到这一步你手里通常已经有域管账户的哈希或明文。登录域控本身并不复杂关键是选对通道。我一般先试jump psexec或jump winrm直接建Beacon会话到域控因为域控通常配置了远程管理服务这两个通道成功率最高。beacon jump psexec 192.168.10.1 x64 beacon jump winrm 192.168.10.1 x64如果这两种都失败了还有一个兜底方案直接用pth令牌访问域控的C$共享然后使用shell命令在域控上创建服务反弹会话。但一般到域控这一步jump系列已经够用。域控是整个域的命脉登录域控后动作要快、要稳尽量一次就把该拿的全拿走不要反复操作导致日志里留下大量入侵痕迹。5.2 DCSync不落地数据库直接导出全域哈希登录域控后最核心的操作就是DCSync。很多人的第一反应是去复制ntds.dit出来解密但在真实行动中DCSync远比直接复制ntds.dit高效且隐蔽。DCSync的原理是模拟一个域控角色向真实域控发起目录复制请求。由于域控之间本身就有数据同步需求这类请求在正常网络流量中很难被识别。只要当前账户具备复制目录变更权限通常是域管账户就能从协议层面把目标用户对象的NTLM哈希拉出来完全不需要在目标机器上落地文件。在CS中直接运行beacon dcsync 目标域名 目标用户名比如拉取域管理员账户的哈希beacon dcsync pentestlab krbtgt beacon dcsync pentestlab administrator这里的核心是krbtgt账户。krbtgt的哈希是整个域的密钥基础拿到它就可以伪造域内任意账户的黄金票据即使你退出域控、丢了其他所有权限仍然可以通过伪造票据重新进入域内任何主机。所以DCSync后第一时间就应该把krbtgt哈希保存好。5.3 域管权限的持久化思路拿到域控Shell和全域哈希不等于游戏结束有效的持久化才是红队评估里的高阶分项。我不建议过度堆砌各种隐蔽手法但有几个思路值得了解黄金票据Golden Ticket用krbtgt哈希伪造任意用户的TGT票据默认有效期为10年。黄金票据不依赖目标主机上的任何后门程序属于纯认证层面的权限维持。SID History注入将普通账户的SID History加入Domain Admins组对应的SID使该账户在进行资源访问时被系统识别为域管成员。这个持久化不直接改域管组成员隐蔽性较好。AdminSDHolder ACL修改修改AdminSDHolder对象的ACL使特定账户获得对域内特权组的继承控制权。SDProp每60分钟重置特权组的ACL但只要始终保持对AdminSDHolder的控制就能持续接管新的域管账户。这些持久化手法在真实红队行动中各有适用场景但如果只是做常规加固测试我个人建议不要全部实施——既要考虑防守方能否发现也要把握演练边界。6. 从防守视角反推这套打法的检测盲区6.1 横向渗透过程会留下哪些线索攻防是双向的红队能走通的路径蓝队一定能在某个层面发现端倪。横向渗透域控再隐蔽也会留下系统性痕迹。从检测视角看重点关注以下事件检测点关注事件说明登录事件4624、4625异常登录类型3网络涌入管理员账户特权登录4672管理员账号特殊登录出现非预期主机进程创建4688、Sysmon EventID 1cmd、powershell、rundll32调用net/wmic等服务服务创建7045PsExec/WMI创建服务的行为特征目录复制4662对域对象执行复制目录变更的权限访问日志清空1102安全审计日志被意外清除6.2 我实测中总结的几条核心经验每次做横向渗透域控的实战复盘总会沉淀出几条“只有在现场才真正理解”的经验不要在目标网络里长时间保持同一条Beacon通道。CS支持多种监听器和C2信道但频繁切换会增加流量特征暴露风险。横向过程中尽量用短时会话拿到需要的信息立即结束。优先清理横向动作产生的临时服务与共享。PsExec创建的服务、上传的可执行文件是EDR最敏感的行为特征。CS里操作完可以手动删除目标服务但注意别把原有服务也删了。时间同步比多数人想象中重要。域环境默认要求客户端与域控时间偏差不超过5分钟否则Kerberos认证直接失败。很多PtH失败案例不是哈希不对而是机器时间偏了。不要小看网络分段的作用。不少企业在关键业务段启用VLAN隔离即使拿到域管凭据网络不可达依然是一座隐形墙。提前绘制目标网络的路由关系能给你省下大量无效横向的时间。6.3 对防守方加固的几个直接建议站在做防守方案的角度横向渗透域控这条链路其实可以被有效卡断。最有效的几个点限制本地管理员跨机复用。很多横向能走通靠的是同一个本地管理员密码被批量部署到全网机器。如果每台机器本地管理员密码不同横向就会被迫停下。最小化域管的登录行为。域管账户不要随意在普通服务器上使用域管登录域控使用专用跳板机并启用即时清权限JIT。监控目录复制权限访问。DCSync非常依赖复制目录权限对所有用户对象执行复制目录变更GetChangesAll的访问都应有告警。开启重点环境的Credential Guard。它能把LSASS中的凭据隔离在虚拟安全进程里让mimikatz这类凭据抓取工具在多数场景下失效。网络层对SMB、WMI、WinRM做来源白名单。域内运维所在的源IP才允许访问目标主机的管理端口其余全部拒绝。这些手段单看可能都有绕过空间但组合在一起横向渗透的成本会成倍上升。红队的乐趣恰恰是寻找这些控制之间的缝隙而蓝队的价值则在于不断把这缝隙补上。最后说点个人感触。这套从Cobalt Strike横向渗透到域控的路径本质上不是一堆工具堆叠而是“信息收集、权限提升、凭据获取、横向移动”这四个环节的循环精进。工具会更新、漏洞会失效但站在“如何从一个普通域用户逐步走向最高权限”的思维框架去推演永远能适应大多数内网环境。如果你是在做蓝队我建议你把每条命令的执行结果都理解清楚知道它为什么会成功、为什么会失败如果你是在做红队那就把这篇文章当成一份操作清单在授权环境下反复演练直到形成肌肉记忆。
返回列表