ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

技术博客:渗透测试中的「横向移动」

技术博客:渗透测试中的「横向移动」

很多刚接触渗透测试的人,会误以为拿到一台 Web 服务器的 Shell,渗透就差不多结束了。但真实攻防中,这往往只是开始。攻击者真正想拿到的,通常不是边界主机,而是域控、数据库、邮件系统、核心业务服务器这类高价值资产。连接“外网入口”和“核心资产”的关键环节,就是横向移动。

什么是横向移动?

横向移动是指攻击者在获得内网某台主机的初始权限后,以该主机为跳板,继续在内网中访问其他系统、获取更多凭据、扩大控制范围的过程。

它和垂直提权不同:

  • 垂直提权:在同一台主机上从普通用户提升到管理员或 SYSTEM/root。
  • 横向移动:从一台主机跳到另一台主机,逐步接近核心目标。

两者经常交替出现:先横向到一台权限更高的主机,再在上面提权;提权完成后,又继续向下一台主机横向移动。

为什么横向移动很关键?

因为单点突破往往不足以造成严重危害。攻击者需要:

  • 找到域控制器、数据库、文件服务器等核心资产;
  • 获取域管理员、数据库管理员等高权限账号;
  • 扩大控制范围,降低被单点阻断的风险;
  • 为后续数据窃取、持久化控制创造条件。

从攻击链看,横向移动处于承上启下的位置:

flowchart TD A[初始突破] --> B[凭据获取] B --> C[横向移动] C --> D[权限提升] D --> E[目标达成] A -->|Web 漏洞 / 钓鱼 / 边界服务漏洞| A1[典型技术: 漏洞利用、钓鱼邮件、弱口令爆破] B -->|Mimikatz / 抓取 / 哈希传递| B1[典型技术: Mimikatz、LaZagne、Pass-the-Hash] C -->|SMB / RDP / WMI / WinRM| C1[典型技术: PsExec、CrackMapExec、WMI、RDP] D -->|提权 / 域管提升| D1[典型技术: 内核漏洞、服务配置错误、Kerberoast] E -->|数据窃取 / 持久化| E1[典型技术: 数据打包、计划任务、后门植入]

如果没有横向移动,攻击者通常只能停留在被攻破的边界主机上;一旦横向移动成功,内网纵深防御就可能被逐步瓦解。

横向移动常见技术路线

横向移动的手法很多,但核心思路基本一致:复用已有权限、凭据、协议或配置缺陷,实现跨主机访问。

1. 基于凭据的移动

攻击者获取到用户名密码、NTLM 哈希、Kerberos 票据等凭据后,可以直接访问其他主机。常见方式包括:

  • 使用 PsExec、CrackMapExec 等通过 SMB 执行远程命令;
  • 通过 RDP 登录目标主机;
  • 使用 WMI 远程执行命令;
  • 利用 Pass-the-Hash、Pass-the-Ticket 进行身份复用。

这类方式之所以常见,是因为很多内网环境中存在凭据复用、本地管理员密码相同、域账号权限过大等问题。

2. 基于漏洞的移动

如果目标主机存在未修复漏洞,攻击者也可能直接利用漏洞完成横向跳转。例如:

  • 利用未打补丁的 SMB 漏洞;
  • 利用 Exchange、域控相关组件漏洞;
  • 利用中间件、数据库、远程服务漏洞。

这种方式风险较高,容易触发告警,但在缺乏补丁管理和资产梳理的环境中仍然具有威胁。

3. 基于隧道和代理的移动

当内网存在网段隔离、防火墙限制或路由不可达时,攻击者可能会建立隧道或代理,穿透网络边界。常见手段包括:

  • SOCKS 代理;
  • SSH 隧道;
  • 端口转发;
  • 内网路由添加。

这类技术不一定直接获取新主机权限,但能帮助攻击者扩大探测范围,为后续横向移动创造条件。

攻击者如何寻找横向目标?

横向移动不是盲目跳转,通常会先做内网信息收集:

  • 查看当前主机的 IP、子网、路由表;
  • 扫描内网存活主机和开放端口;
  • 判断是否为域环境;
  • 查找共享目录、配置文件、浏览器保存密码、数据库连接串;
  • 定位域控制器、数据库服务器、文件服务器等高价值目标。

很多横向移动的成功,并不是因为攻击者使用了多么复杂的工具,而是因为内网中已经存在可用凭据、过度信任关系和缺乏分段隔离。

从防守角度看,如何检测和阻断?

横向移动之所以难防,是因为很多攻击行为看起来很像正常运维:管理员也会用 RDP、WMI、PsExec、远程更新、批量部署补丁。因此检测重点不应只放在“某个工具是否出现”,而要看行为是否异常。

可以从三层入手:

1. 流量层

关注内网东西向流量中异常的 SMB、RDP、WMI、WinRM、LDAP、Kerberos 行为。例如:

  • 某台普通业务主机突然大量访问其他主机 445、3389、5985 端口;
  • 非运维账号频繁发起远程登录;
  • 同一账号短时间内登录大量主机;
  • Kerberos 票据请求、NTLM 认证出现异常模式。

2. 端点层

通过 EDR 或主机日志关注:

  • 异常进程创建;
  • Mimikatz、LaZagne 等凭据抓取行为;
  • PowerShell 执行可疑命令;
  • 计划任务、服务、注册表启动项被修改;
  • 远程命令执行痕迹。

3. 日志与身份层

重点审计:

  • 域账号登录日志;
  • 特权账号使用记录;
  • 账号横向访问路径;
  • 异常时间、异常地点、异常主机登录;
  • 本地管理员账号复用情况。

阻断方面,可以结合最小权限、网络分段、微隔离、RDP/WMI/SMB 访问控制、敏感主机白名单、快速账号封控等措施,把攻击者限制在尽可能小的范围内。

代码与命令示例

以下示例仅用于理解横向移动的技术原理和检测思路,必须在授权实验环境或靶场中使用,不得用于非授权目标。

示例 1:SSH 横向登录

如果内网主机开放 SSH,且存在弱口令或凭据复用,攻击者可能尝试远程登录:

ssh user@192.168.10.20

从防守角度看,可以重点检测:

  • 同一账号短时间内登录多台主机;
  • 非运维账号登录生产服务器;
  • 来自异常源 IP 的 SSH 登录;
  • 登录失败次数突然增加。

示例 2:WMI 远程执行命令

在 Windows 域环境中,WMI 常被用于远程管理。攻击者也可能利用它执行命令:

wmic /node:192.168.10.20 /user:admin /password:Pass123 process call create "cmd.exe /c whoami"

这类行为在端点和系统日志中通常会留下痕迹,例如进程创建记录、远程 WMI 调用记录、异常命令行参数等。

示例 3:PowerShell 远程会话

PowerShell Remoting 也是常见的横向移动方式之一:

Enter-PSSession -ComputerName 192.168.10.20 -Credential admin

如果业务主机正常情况下不会建立 PowerShell 远程会话,却突然出现大量远程执行行为,就需要重点排查。

示例 4:Python 端口探测脚本

横向移动前,攻击者通常会探测内网存活主机和开放端口。下面是一个简化的端口探测示例:

import socket target = "192.168.10.20" ports = [22, 80, 445, 3389, 5985] for port in ports: try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) result = s.connect_ex((target, port)) if result == 0: print(f"{target}:{port} is open") s.close() except Exception: pass

从检测角度,可以关注内网主机是否出现大量短连接、异常扫描行为、同一源 IP 对多个目标端口进行探测等。

学习建议

横向移动是内网渗透中非常典型、也非常容易“只懂概念、不会落地”的知识点。建议学习时不要只背工具名,而是按这个顺序梳理:

  1. 先理解目标:攻击者为什么要横向移动?想靠近哪些资产?
  2. 再理解前提:横向移动依赖哪些凭据、协议、信任关系?
  3. 接着看路径:从边界主机到域控/数据库,可能经过哪些跳板?
  4. 最后看检测:每一步会留下哪些日志、流量和端点痕迹?

为便于快速对照,下表汇总了常见横向移动攻击手法在流量层、端点层、日志层的检测要点、典型告警特征及简要阻断建议。

攻击手法流量层检测要点端点层检测要点日志层检测要点典型告警特征阻断建议
SMB(445)异常大量 445 端口连接;非运维主机频繁访问共享;SMB 协议版本异常svchost.exe 异常加载;PsExec 服务创建痕迹;net use 命令执行4624 登录类型 3 异常;5140 共享访问异常;4776 NTLM 认证异常同一主机短时间访问大量 445 端口;共享访问来源主机异常限制 SMB 访问来源;关闭不必要的共享;对敏感主机实施 445 白名单
RDP(3389)异常 3389 连接;非运维时段远程登录;大量 RDP 爆破流量mstsc.exe 异常启动;剪贴板重定向;远程桌面服务异常4624 登录类型 10 异常;4778/4779 会话重连记录;登录源 IP 异常非运维账号远程登录;同一账号多地同时登录;登录失败后成功启用 NLA;限制 RDP 来源 IP;使用 RDP 网关;对高价值主机禁用 RDP
WMI(135/动态端口)135 端口异常连接;WMI 调用流量突增;动态 RPC 端口异常wmic.exe 异常执行;进程创建父子关系异常;远程 WMI 调用记录4624 登录类型 3 异常;WMI 活动日志;事件 ID 5857/5858wmic process call create 命令;非运维账号发起 WMI 调用限制 WMI 远程调用;禁用不必要的 WMI 命名空间;对敏感主机实施访问控制
WinRM(5985/5986)5985/5986 端口异常连接;WinRM 流量突增;非运维主机发起 WinRMwinrs.exe 异常执行;PowerShell 远程会话建立;WSMan 服务异常4624 登录类型 3 异常;WinRM 操作日志;PowerShell 远程会话日志Enter-PSSession 命令;非运维账号建立远程 PowerShell 会话限制 WinRM 访问来源;对敏感主机禁用 WinRM;实施 TrustedHosts 白名单
SSH(22)异常 22 端口连接;SSH 登录流量突增;非运维主机发起 SSHssh.exe 异常执行;密钥文件被访问;SSH 隧道建立痕迹SSH 登录日志异常;同一账号多主机登录;登录源 IP 异常同一账号短时间登录多台主机;非运维账号登录生产服务器限制 SSH 来源 IP;使用密钥认证;禁用 root 远程登录;实施堡垒机统一入口
PowerShell Remoting5985/5986 端口异常;PowerShell 远程流量突增;非运维主机发起远程会话powershell.exe 异常执行;脚本块日志;AMSI 告警;远程会话建立PowerShell 操作日志(4104);远程会话日志;4624 登录类型 3 异常Enter-PSSession/Invoke-Command 命令;PowerShell 下载执行模式限制 PowerShell 远程访问;启用 Constrained Language Mode;对敏感主机禁用 Remoting

需要说明的是,上述检测要点并非孤立存在,实际防守中应把流量、端点、日志三层数据联动分析,才能更准确地区分正常运维与恶意横向移动。

在实际落地时,可以借助一些成熟的检测工具来辅助上述三层分析。下面简要说明 Zeek、Suricata、Sysmon、BloodHound 各自的适用场景。

Zeek(流量层)

Zeek 是一款面向网络流量的安全监控框架,擅长解析 SMB、RDP、WMI、WinRM、LDAP、Kerberos 等协议并输出结构化日志。它适合在流量层发现异常连接模式,例如某台业务主机短时间内访问大量主机的 445、3389、5985 端口,或同一账号从多台主机发起远程登录。Zeek 本身不直接阻断流量,更多用于持续记录和告警。

Suricata(流量层)

Suricata 是高性能的入侵检测与防御系统,基于规则匹配内网东西向流量中的恶意特征,例如 PsExec 服务创建、WMI 远程调用、异常 SMB 命令、RDP 爆破等。它既可以作为 IDS 旁路监听,也可以作为 IPS 在线阻断。相比 Zeek,Suricata 更偏重已知攻击特征的实时匹配,适合在流量层快速触发告警。

Sysmon(端点层)

Sysmon 是 Windows 平台上的主机监控工具,通过驱动级日志记录进程创建、网络连接、文件写入、注册表变更、DLL 加载等行为。它适合在端点层发现 Mimikatz、LaZagne 等凭据抓取行为、异常进程创建、PowerShell 可疑执行、计划任务或服务被修改等痕迹。Sysmon 日志通常需要配合 SIEM 或 EDR 平台做关联分析,才能形成有效告警。

BloodHound(日志与身份层)

BloodHound 是一款面向 Active Directory 的分析工具,通过采集域内对象、ACL、会话、组关系等数据,可视化呈现账号之间的横向访问路径和提权路径。它适合在日志与身份层梳理账号横向访问路径、定位本地管理员复用、发现过度信任关系,帮助防守方优先收敛高风险路径。需要说明的是,BloodHound 本身是攻击者常用的侦察工具,防守方也可以用它做红队视角的路径审计,但采集数据时需在授权范围内进行。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进