首页 / 资讯中心 / 文章详情

内网横向移动实战指南:从凭证复用到路径规划

内网横向移动实战指南:从凭证复用到路径规划 ★ FEATURED ARTICLE
1. 先搞清楚横向移动到底在解决什么问题1.1 什么是横向移动攻击者为什么要做这件事直接说横向移动Lateral Movement就是攻击者拿下一台机器之后用它作为跳板继续在内网里访问、控制其他机器的过程。内网渗透这个词拆开看内网决定了边界、可达性和信任关系都不太一样渗透的关键则在于从外到内、从单点到全局的逐步深入。而横向移动正是把单点突破变成全面控制的那一步。这一段在真实攻防里非常高频。我见过很多团队打一场授权演练入口拿得很顺利一两小时就打进内网了但之后就卡住了——因为拿到的要么是一台普通办公机要么是某个低权限业务服务器真正的核心资产还离得很远。这时候没有横向移动的套路和思路就只能在内网地图上干瞪眼。这个主题适合谁看首先是做攻防演练、红队评估、渗透测试的工程师其次是负责内网安全建设和应急响应的人员。对蓝队来说理解横向移动甚至更重要——防守方如果不知道攻击者拿到一台机器后会怎么动就不知道应该在哪道防线布置监测、哪类日志需要重点留存、哪些行为属于需要告警的异常信号。1.2 一次完整攻击流程里横向移动的位置要理解横向移动最好先把它放进全局流程里看。一次典型的攻击路径大致是信息收集 - 漏洞利用/打点 - 获取初始权限 - 权限提升 - 横向移动 - 目标达成。横向移动不是终点而是手段。它的目标往往是找到更高价值的机器比如数据库服务器、运维堡垒机、文件服务器、域控制器获取更高权限的账号比如域管理员、服务账号、备份账号扩大控制范围为后续的持久化和数据回传做准备在某些场景下横向移动本身也是为了规避检测——一直在单台机器上做可疑操作风险很高频繁跳转反而让溯源变得更加困难。所以在实际规划里横向移动从来不是能打哪台就打哪台而是要有清晰的路径意识从当前权限出发哪些主机可达哪些账号可用哪条路径最短哪条路径能制造更少的日志噪音这些思考比单纯会敲几条命令重要得多。2. 横向移动的核心思路与方案选型2.1 一切横向都围绕凭证展开这是我们需要重点建立的一个概念在内网环境里横向移动的本质是凭证复用而不是重新做漏洞利用。绝大多数横向移动技术都是拿已经获得的账号密码、哈希、票据、Token去访问另一台机器上开放的远程管理服务然后执行命令。我自己有个习惯把横向移动拆成三个要素身份凭证、访问通道、执行落地。身份凭证是指你手里有什么——明文密码、NTLM哈希、Kerberos票据、甚至是一个伪造的Token它决定了你能以什么身份出现。访问通道是指目标机器开放了哪些服务——SMB、WinRM、RDP、WMI等它决定了你能用哪种方式连过去。执行落地是指你连过去之后如何把命令或程序在目标上跑起来——这往往决定了整个操作的成功率和隐蔽性。这三个要素缺一不可。只拿到凭证但目标没开对应服务白搭服务开着但没凭证白搭凭证和服务都对但落地方式被安全软件拦了还是白搭。这里有个内网环境下特有的认知点在域环境里一台机器信任的不是某个人而是该域账号的凭证。也就是说只要你的凭证有效目标机器不会关心你当前是不是真的坐在那台机器前。这跟日常办公登录公司系统的感受完全不同很多初学者一开始不太习惯经常会问为什么我在A机器上拿到管理员密码B机器就能直接进。原因就在这儿——内网基础设施对凭证的验证是分布式的信任一旦下发处处可用。2.2 常见横向移动方式与选型逻辑接下来的问题是面对一个具体的场景怎么选我把常见方式列一个表然后逐个解释选型背后的逻辑。方式依赖协议/服务必要条件适用场景哈希传递PtHSMB管理员组NTLM哈希、目标开放445工作组和域环境通用最常见票据传递PtTKerberos域账号、目标SPN/服务票据域环境需与域控交互SMB远程执行SMB admin$管理员权限、445可达Windows经典场景方便、稳定计划任务RPC/SMB管理员权限、远程计划任务服务可用SMB直连受限但计划任务可达的场合WMI135/RPC管理员凭据、DCOM可达很多安全软件不拦WMI隐蔽性较好WinRM5985/5986管理员凭据、WinRM开启适合批量命令执行日志相对干净RDP3389账号密码/哈希、会话策略需要交互式桌面操作时使用选型逻辑我总结为三步。第一步看手上凭证的类型。如果你只有NTLM哈希那优先考虑哈希传递因为不用还原明文如果拿到的是Kerberos票据那么票据传递更直接。明文密码就灵活得多几乎上述所有方式都能用。第二步看目标机器的暴露面。可以先做一轮端口识别看看目标开了什么服务。如果445可达SMB路子最稳如果445被策略限制但5985开放WinRM就比SMB合适如果只有135开放WMI是唯一选项。第三步看安全软件和政策情况。这一步在真实演练里往往最影响成败。有些安全软件会监控psexec这类的服务创建行为有些EDR对WMI事件有比较明确的检测规则有些环境干脆把这些远程执行通道全部做了微隔离。所以真正动手之前先了解一下目标的防护情况有时候用计划任务反而比psexec更稳。关于工具工具只是手段思路才是核心。常用的工具比如Mimikatz、psexec系列、WMI类工具、PowerShell远程会话这些都有大量现成方案。但我的建议是别只依赖某一款工具因为安全软件的特征规则往往就盯着那些知名工具的签名和行为。理解原理之后有时候用一条PowerShell命令、一段自写的C小工具效果不比大路货差关键是动静更小。3. 核心细节解析与实操要点3.1 哈希传递为什么有了哈希就能直接登录哈希传递Pass-the-Hash这个名字听起来有点反直觉密码的哈希不是密码本身怎么就能通过认证呢这就要说到Windows的认证机制。在NTLM认证体系里客户端向服务器证明身份的方式不是发送明文密码而是使用一个基于密码哈希派生的应答。服务器并不关心你是否知道明文它只验证你构造的应答是否正确。换句话说NTLM认证的最终校验依据就是哈希本身。既然校验的是哈希那攻击者手里只要有一份有效的NTLM哈希他就等于掌握了一把能打开资源的钥匙。这听起来像个设计缺陷但它其实是历史遗留和兼容性权衡的结果。Windows生态里有很多历史组件和服务依赖NTLM微软不可能说改就改。对安全从业者来说我们要做的是理解这个机制、在授权测试中使用它更重要的是在生产环境里知道如何降低这种风险——比如启用Credential Guard、限制NTLM的使用范围、对过度暴露的管理员账号做管控。实操上哈希传递有几个关键前提值得强调。第一本地管理员组的哈希才有价值普通用户的哈希在很多远程执行场景里不够用。第二被传递哈希的账号在目标机器上需要有对应的权限否则连接会被拒绝。第三SMB签名策略会影响成功率如果目标强制SMB签名而发起方不支持连接就会失败。这三点是我在测试中反复踩过的坑。3.2 票据传递域环境里的钥匙串域环境里Kerberos是默认认证协议。简单说域内用户登录后会从域控拿到一张票据TGT这张票据可以进一步换取各服务的服务票据ST。所谓票据传递就是把这些票据从一台机器上提取出来然后在另一台机器上导入冒充原用户继续访问域内资源。这里我觉得最有意思的一点是Kerberos票据本身是自带时效和权限信息的一张有效的票据在没有过期之前就相当于一个合法的身份。所以票据传递不要求你知道明文密码也不一定需要管理员权限只需要想办法读取目标用户会话中的票据。常见的票据类型里有黄金票据和白银票据这种提法。黄金票据是伪造的TGT前提是你掌握了KRBTGT账号的哈希有了它你几乎可以伪造任意域内身份。白银票据是伪造的服务票据它的适用范围限制在特定服务上但因为整个过程没有跟域控交互留下的日志会更少。对蓝队而言了解这些票据的特征——比如服务票据的加密类型、账号SID、有效期异常——比研究怎么伪造更重要。说句实在话在一些大型域环境里票据传递确实比哈希传递的效果更好主要原因是Kerberos票据不受SMB签名策略那种限制而且能在某些只开了Kerberos通道的环境里继续工作。不过它的前提是你已经能和域控正常交互或者能从一个活跃会话中提取票据环境要求比PtH要苛刻一些。3.3 远程执行通道的几种处理方式有了凭证之后怎么把命令送进目标机器我按实际操作中的常见度排个序讲讲各自的细节和坑。先说最经典的SMB远程服务方式。原理是利用SMB的Admin$共享也就是管理共享把服务文件或指令传到目标机器上然后通过创建Windows服务的方式远程启动。这种方式稳定可靠支持在域环境和本机管理员场景里使用而且能够拿到SYSTEM权限的服务上下文。需要注意的一点是它会启动一个新的服务并留下服务创建记录这在一些对安全日志比较敏感的环境里算是一个比较明显的痕迹。然后是计划任务。利用计划任务远程执行命令的原理是向目标机器的计划任务服务提交一个任务让它在指定时间运行指定的程序或命令。这种方式的优势是它依托于系统自带的服务很多安全软件对计划任务的监控没有对可疑服务创建那么严格。缺点是计划任务服务偶尔会受策略限制部分环境下权限配置不到位会看到拒绝访问。再来说WMI。WMI这条路的原理是利用Windows Management Instrumentation的远程接口在目标机器上创建进程或调用方法。比如你可以连到目标的Win32_Process类用Create方法直接起进程。这种方式不依赖SMB和445端口也不创建服务在很多环境里显得更低调。但它依托的是RPC如果目标机器开启了防火墙135端口的可达性就成了关键。最后是WinRM。WinRM本质上是微软官方提供的远程管理通道走5985HTTP或5986HTTPS端口PowerShell Remoting就是基于它实现的。WinRM的体验最接近给目标开一个shell支持交互式命令、脚本执行、文件传输适合做比较复杂的操作。不过它的问题也明显默认情况下WinRM服务不一定开启而且它的使用会留下明确的PowerShell日志和安全日志容易被EDR关注。如果要用一句话总结怎么选SMB求稳、计划任务求巧、WMI求静、WinRM求全。没有绝对的好坏只有适不适合当前的网络环境和策略限制。3.4 域环境下容易被忽略的特殊路径除了上面这些标准动作真实环境中还有一些容易被人忽略的点往往能成为破局的关键。一个是共享会话和凭证残留。很多系统管理员习惯在一台主机上挂多个远程会话如果你拿下的这台机器正好是管理员的运维跳板机那你不需要自己再去想怎么横向——管理员已经替你铺好路了。从内存、会话、计划任务、剪贴板里都可能找到有价值的信息甚至直接复用它的活动会话。另一个是内网DNS与主机名解析带来的信息面。内网里的DNS记录往往能直接映射出业务系统的拓扑关系局域网里的mDNS、NetBIOS名称解析同样可能暴露大量主机名和IP的对应关系。通过搜集这些信息你可以比盲目扫网段更高效地圈定目标范围。还有一个是信任关系和委派。域环境里的信任可能横跨多个域、多个林某些跨域信任配置得非常宽松。比如某个子域对父域有完全信任子域被拿下就可能波及整个林。还有服务账号的委派配置如果某个服务账号被配置了无约束委派攻击者可以利用它来冒充其他用户访问任意服务。这些都是横向移动的高级通道需要在信息收集阶段就有意识地去探查。不过要提醒一句越高级的路径往往越依赖具体的域配置没有放之四海而皆准的方法。最好的做法是先把基础路径做扎实再去探索这些花活。4. 实操流程与核心环节实现4.1 信息收集先画地图再动手很多初学者一拿到内网权限就急着横向移动结果撞得一头包。我的习惯是先在当前机器上做好信息收集把地图画出来再动。信息收集要做的事情包括确定当前主机的角色是服务器、终端、域控吗当前用户所在的组是否本地管理员、是否域管理员当前网络的出口和可达段DNS指向哪个域控是否存在本机或域内共享账号最近的登录记录里有没有高权限账号的身影。这些信息会直接决定横向移动的优先级和方式。这里我要推荐一个思路不用非等每个网段都扫完再动而是边收集、边验证、边推进。比如你发现当前主机上存在某个运维服务账号的缓存凭证并且这台机器正好能访问相邻网段那就可以先顺着这些线索去验证目标明确之后再去补全其他信息效率反而更高。4.2 路径规划与权限验证在动手之前我习惯先做一个简单的清单手里有哪些凭证哪些账号是管理员权限目标机器的哪些端口开放目标机器是否加入域、当前域策略是什么把这些列成一张表你会发现横向移动方案的优先级自动就出来了。权限验证说白了就是拿凭证去试目标不一定要真的执行命令可以先做非常轻量的验证。比如通过SMB的会话建立来判断账号密码是否有效通过RPC调用查询目标机器的账户信息这些行为产生的日志相对少也能避免密码输错被锁定的尴尬。特别要提的是远程桌面的密码尝试次数限制。某些环境配置了账户锁定策略如果反复用不同密码尝试RDP登录可能直接把账号锁死造成业务影响这在授权测试里属于事故了。所以RDP类操作我要么放最后用要么确保密码准确率极高要么干脆绕过RDP、用其他通道做。4.3 落地执行与关键命令示例以下这些命令和操作是我在自建测试环境和授权演练中常用到的思路供参考。再次强调这些内容只应该在你有充分授权的目标上使用。哈希传递类的典型操作思路是先获取目标管理员账号的NTLM哈希比如从当前机器内存或SAM数据库中提取然后直接使用哈希作为身份验证凭据发起远程连接。具体命令因工具而异很多工具已经实现了输入哈希、指定目标、执行命令的一体化流程重点要看懂它背后在做什么而不是只背参数。计划任务方式的一个经典做法是在目标机器上创建一个计划任务任务执行一条命令运行账户使用你拿到的管理员账号。这样做的效果是目标机器以该账号身份启动进程命令就在目标侧落地了。如果你习惯用PowerShell也可以使用系统自带的远程计划任务相关命令来完成同样的效果。WMI方式的典型做法是直接调用远程机器上的进程创建方法传入要执行的命令和参数。这种方式没有交互界面适合执行静默命令比如启动一个代理、写一个文件、拉取一段数据。凡是需要交互式桌面的操作WMI就不太合适。WinRM方式则是先建立与目标机器的远程会话然后在会话中执行你想要的任何PowerShell命令。它的操作体验最自然因为本质上就是进入了一个远程shell。一次会话里可以做多步操作比单条命令式的执行更有连续性。上面这些具体的命令参数我就不逐个贴完整版了一方面是不同工具、不同版本之间差异很大盲抄参数容易出错更重要的是实战里大部分时间花在判断哪种通道在这台机器上可用上而不是在敲命令本身。把判断逻辑理顺命令反而不是难点。4.4 落地后的验证与后续推进命令执行成功不代表横向移动结束。下一步要做的是确认执行结果、收集目标上的新信息、查看是否有更高价值的账号或数据同时理性评估当前操作的暴露面决定是要继续深入还是先退一步调整策略。这里有个实操体会每走一步就问自己三个问题。第一刚才的操作在目标机器上留下了什么日志服务创建记录、计划任务记录、远程登录事件、进程创建事件都要心里有数。第二当前会话和凭据还剩多少有效期要不要在失效前拿到更多有价值的东西第三如果目标机器有安全软件刚才的行为有没有触发它的告警如果发现异常动静宁可停下来换个通道也不要硬来。还有一个容易被忽略的点横向移动成功之后及时回收和整理新增的凭证与信息。有时候你在A机器上横移到B机器后发现B机器上又有一个新的管理员账号而这个账号又能访问C和D。这种链式推进里信息整理不及时很容易把自己搞晕最后东西拿到了却理不清哪条路径有效、哪些账号还能用。我自己就在实战里吃过这种亏拿了一堆碎片凭证回头一看全过期了。5. 常见问题与排查技巧实录5.1 权限没问题但远程执行失败这是最高频的问题。拿着管理员账号SMB也通了但远程服务创建一直报拒绝访问或者找不到网络路径。排查的时候我一般按这个顺序来。第一确认账号到底是不是目标机器的本地管理员。这里有个坑域内Domain Admins组的成员默认是域内所有机器的本地管理员没错但很多企业做了精细化授权某些服务器上域管理员并不在本地管理员组里。所以不要想当然拿账号在目标上验证一下实际权限最靠谱。第二确认目标机器的远程服务有没有启用。SMB方式依赖Server服务计划任务方式依赖Schedule服务WMI依赖Winmgmt和RPCWinRM依赖WinRM服务。任何一个服务被禁用都会表现出权限没问题但就是执行不了的诡异现象。第三看防火墙和策略。Windows防火墙的默认规则可能阻止远程服务创建、远程计划任务、WMI等入站请求。有些环境还会用强制IPsec或入站规则限制某些端口这时候换一个通道往往比跟防火墙较劲更有效率。5.2 安全软件拦截操作真实网络环境里目标机器上有杀软、有EDR太正常了。被拦截时我的第一反应不是去绕过而是先分析它拦的是什么。如果是行为拦截那换个执行方式往往就能解决。比如某款EDR对psexec创建服务的行为很敏感但不太关注计划任务和PowerShell远程那就换WinRM或计划任务。这里的要点是安全软件有它的检测重心不同通道的规避效果差异很大测试人员需要具备这种选路意识。另外还有一个容易被忽略的策略先探测后进行。在高敏感机器上直接做横向移动动作之前可以先做一次轻量探测比如尝试建立空会话、查询开放端口、判断防火墙规则这些行为通常不会触发高等级告警。探测结果能帮你筛选出哪条通道最合适避免一上来就触发安全告警。5.3 网络隔离与边界管控内网不等于全通现在很多企业已经做了初步的网络分区和微隔离。常见的情况是生产网段和办公网段之间有防火墙只开放特定端口服务器区才允许访问数据库某些敏感网段的主机只允许特定运维IP远程登录。遇到这种环境硬扫是没有意义的。更高效的做法是利用已经控住的机器做踏脚石看它能否访问其他网段。比如当前拿下的机器是办公网的一台跳板机它可能被运维人员配置了访问生产网段的权限那你就应该顺着这些已有的信任关系走而不是从办公网直接去撞生产区。如果发现目标网段做了严格的IP白名单只允许特定管理主机的流量进来那就尝试先控住那台管理主机。这个过程可能需要多步才能完成但这恰恰是横向移动里最真实、最考验耐心的部分。5.4 从防守视角看横向移动的日志特征作为防守方我想额外多说一点。横向移动的日志特征其实非常清晰关键在于你愿不愿意花力气去梳理。登录日志里关注4624登录成功事件中的登录类型。类型3是网络登录通常在SMB/WMI等远程访问中出现类型10是远程交互登录对应RDP。如果一台普通办公机频繁出现来自内网其他机器的类型3登录而且登录账户是管理员这是非常值得警惕的横向移动信号。进程创建日志里关注命令行中的可疑特征。远程执行的命令往往带有特殊参数、编码字符或者指向奇怪路径的脚本。这些特征在Windows安全日志4688里可以看到。另外服务创建事件7045、计划任务创建事件4698也对应着横向移动的落地环节。把这些事件串起来看你就能还原一条完整的横向移动链路。我见过不少防守团队把告警规则写得极其复杂结果误报一堆真正的异常反而被淹没了。其实横向移动检测的核心就两条一个是异常的管理员远程登录一个是异常的进程、服务、计划任务创建。简单规则加快速响应往往比复杂模型加没人处置有效得多。6. 写在最后的几点个人心得到这里横向移动的核心内容差不多讲完了。最后分享几点我在实际工作中的体会。第一授权是底线。这篇文章里所有的思路、技术、命令都应该只用于你有明确授权的系统、你搭建的实验环境或者企业内部合规的攻防演练。未经授权的横向移动可能触犯法律这不是一句客套话而是行业里反复出现过的真实教训。第二思路比工具重要。工具更新迭代非常快今天好用的明天可能被拦截今天流行的明天可能被检测。但凭证复用、通道选择、执行落地这三层框架是比较稳定的把这个框架想透了无论工具怎么变化你都能迅速找到替代方案。第三从防守的视角去学攻。我自己提升最快的阶段不是反复练习某款工具的时候而是去研究EDR、日志分析、威胁检测的时候。反过来理解安全产品会检测什么你就知道在测试中应该避免什么、如何选择更合理的路径。这种双向思维对做安全的人来说价值极大无论你身处攻防哪一侧。第四多搭自己的实验环境。纸上谈兵确实学得快但很多东西不在真实环境里踩一遍你永远不会理解。比如SMB签名策略导致连接失败、域账户锁定的风险、网络分区导致某条通道不可用这些坑都只有亲手触发过才会有深刻记忆。现在很多人用虚拟机、容器和开源工具搭建域环境就是一个很好的练手方式。横向移动这个话题写再多也难以覆盖所有真实场景。每家企业内网结构、策略和防护都不一样永远有新的边界条件等着你去摸。希望这篇文章能帮你在动手之前先建立起一套清晰的思考框架剩下的就是在一个个真实的网络环境里慢慢积累了。保持好奇心守住合规底线多踩坑多总结。
阅读完成 · 觉得有帮助?
咨询建站