PsTools 学习笔记(7.5):PsExec 的备用凭据与安全基线
PsTools 学习笔记(7.5):PsExec 的备用凭据与安全基线
- PsTools 学习笔记(7.5):PsExec 的备用凭据与安全基线
- 1)PsExec 凭据的三种写法
- 1.1 直接在命令行指定(最直观,但最不安全)
- 1.2 交互式输入(推荐基线)
- 1.3 预先建立安全会话(批量/脚本友好)
- 2)域账号、本地账号、UPN、跨域
- 3)PsExec 做了什么:PSEXESVC + SMB + SCM
- 4)权限与 UAC:最易踩的坑
- 4.1 “Access is denied.” 常见原因
- 4.2 UAC 远程限制(LocalAccountTokenFilterPolicy)
- 4.3 `-h` 与高完整性
- 5)安全基线建议(生产可用)
- 6)实战模板
- 6.1 安全批量(IPC 会话 + 清理)
- 6.2 PowerShell + 凭据对象(仍需谨慎处理内存中的密码)
- 7)典型错误与修复清单
- 8)要点速记
PsTools 学习笔记(7.5):PsExec 的备用凭据与安全基线
本篇聚焦 PsExec 的凭据用法 与 企业内安全落地:如何在不把密码“裸奔”在命令行的前提下,稳定拿到远程管理员权限,并规避常见的权限/网络/UAC 坑。
1)PsExec 凭据的三种写法
1.1 直接在命令行指定(最直观,但最不安全)
psexec \\PC-001 -u CONTOSO\opsadmin -p S3cr3t! cmd /c whoami
- 优点:一条命令跑通。
- 致命缺点:密码会留在 Shell 历史、命令行快照、脚本仓库 甚至监控日志中。生产不建议。
1.2 交互式输入(推荐基线)
psexec \\PC-001 -u CONTOSO\opsadmin cmd /c whoami
:: 将提示“Password: ”,输入后不回显
- 优点:不在命令行明文出现。
- 注意:适合单机或半自动操作;批量可配合
net use/cmdkey或安全变量。
1.3 预先建立安全会话(批量/脚本友好)
方式 A:短连接 IPC 会话
:: 建立到目标的认证会话(不持久)
net use \\PC-001\IPC$ /user:CONTOSO\opsadmin S3cr3t! /persistent:no:: 随后可不带 -u/-p 使用 PsExec,走已建立的会话
psexec \\PC-001 cmd /c whoami:: 清理会话
net use \\PC-001\IPC$ /delete
方式 B:Windows 凭据管理器(更干净)
:: 写入目标主机的凭据(会存入当前用户的“Windows 凭据”)
cmdkey /add:PC-001 /user:CONTOSO\opsadmin /pass:S3cr3t!:: 直接用 PsExec
psexec \\PC-001 cmd /c whoami:: 完成后清理
cmdkey /delete:PC-001
- 优点:可脚本化,执行时命令行不再明文输出密码。
- 注意:仍要对脚本仓库中的密码承担保密义务;更好的方式是密管系统(如 Vault/LAPS)。
2)域账号、本地账号、UPN、跨域
- 域账号(推荐):
-u CONTOSO\opsadmin或-u opsadmin@contoso.com。 - 本地账号:
-u .\Administrator(或PC-001\Administrator),但易受 UAC 远程限制影响(见 §4.2)。 - 跨域:必须有信任关系(Kerberos/NTLM),否则用目标机本地管理员或跳板机。
3)PsExec 做了什么:PSEXESVC + SMB + SCM
理解底层流程有助于定位“凭据正确却还报错”的问题:
- PsExec 连接
\\目标\Admin$(SMB 445),将PSEXESVC.exe复制过去; - 通过 **服务控制管理器(SCM,基于 RPC)**在远端创建/启动 PSEXESVC;
- 通过命名管道把 STDIN/OUT/ERR 回传本地;
- 退出时清理远端服务与文件(异常中断时可能遗留,需要手动清理)。
网络/系统必要条件
- 打开 SMB(TCP 445) 与 SCM/RPC 所需端口(通常随 445、动态端口范围)。
- Admin$ 共享可用(目标机 C:\Windows 存在且共享未禁用)。
- 远端管理员权限(本地 Administrators 或等效权限)。
4)权限与 UAC:最易踩的坑
4.1 “Access is denied.” 常见原因
- 目标机 Admin$ 关了、SMB 被防火墙拦了;
- 账号不是远端管理员;
- UAC 令牌过滤导致拿到受限令牌(见 4.2);
- 已有至目标的 SMB 会话使用了**“别的用户”**(会导致“多重连接”错误)。
排障快查
:: 1) 能否访问 Admin$
dir \\PC-001\admin$:: 2) 清理到目标的多重会话
net use \\PC-001\IPC$ /delete:: 3) 重新使用正确凭据建立 IPC 会话
net use \\PC-001\IPC$ /user:CONTOSO\opsadmin S3cr3t! /persistent:no
4.2 UAC 远程限制(LocalAccountTokenFilterPolicy)
在工作组/本地管理员场景,远程登录默认给的是受限令牌,导致你“是管理员但又不完全是”。
临时权衡(仅在需要时启用,且有补偿控制):
:: 在目标机提升:允许本地管理员远程获取“完全管理员令牌”
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ^/v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
更稳的策略是:使用域管理员/受控委派,或在目标加入域后使用域侧权限模型,避免改此键。
4.3 -h 与高完整性
-h:在远端以 高完整性 运行(UAC On 的系统上),但仅当凭据本身就属于 Administrators。- 常见误解:
-h不是权限放大器,它只决定令牌完整性级别。
5)安全基线建议(生产可用)
- 杜绝命令行明文密码:优先 交互式输入 或 IPC/cmdkey + 密管系统(Vault/LAPS/LAPS2)。
- 最小权限:专用的 运维域账号,受限登录(Logon Rights)、受控委派(KCD/CredSSP)或 JIT/JEA。
- 时效与审计:临时提升/短期口令;启用 PowerShell Transcript/进程创建日志(4688) 与 Sysmon。
- 网络白名单:仅对运维子网放行 445/TCP 等必要端口;零信任分段。
- 清理痕迹:任务完毕
net use ... /delete、cmdkey /delete:host;定期巡检遗留 PSEXESVC。 - UAC 不要关闭:需要高完整性就用
-h;本地管理员远程完全令牌仅作权宜(4.2)。
6)实战模板
6.1 安全批量(IPC 会话 + 清理)
@echo off
setlocal enabledelayedexpansion
set HOSTS=PC-001 PC-002 PC-003
set USER=CONTOSO\opsadmin
set /p PASS=输入密码(不回显请直接回车): for %%H in (%HOSTS%) do (echo [%%H] 建立安全会话...net use \\%%H\IPC$ /user:%USER% %PASS% /persistent:no >nul 2>&1if errorlevel 1 ( echo [%%H] 连接失败 & goto :continue )echo [%%H] 执行...psexec \\%%H -nobanner -h cmd /c "whoami && hostname" > logs\%%H.out 2>&1echo [%%H] ExitCode=!ERRORLEVEL!:continuenet use \\%%H\IPC$ /delete >nul 2>&1
)
6.2 PowerShell + 凭据对象(仍需谨慎处理内存中的密码)
$hosts = 'PC-001','PC-002'
$cred = Get-Credential -Message '输入远端凭据'
$pw = $cred.GetNetworkCredential().Password
$user = $cred.UserNameforeach($h in $hosts){Write-Host "[$h] 建立会话..."cmd /c "net use \\$h\IPC$ /user:$user $pw /persistent:no" | Out-Null& psexec \\$h -nobanner -h cmd /c "whoami /groups" *> "logs\$h.out"Write-Host "[$h] ExitCode=$LASTEXITCODE"cmd /c "net use \\$h\IPC$ /delete" | Out-Null
}
7)典型错误与修复清单
| 报错/现象 | 根因 | 处理 |
|---|---|---|
Access is denied. | 非管理员/UAC 远程限制/会话占用 | 见 §4.1/4.2,清 SMB 会话,核对权限与 LocalAccountTokenFilterPolicy |
Make sure that the default admin$ share is enabled... | Admin$ 关闭或 445 被拦 | 开启文件和打印共享、防火墙放行 445、确认 C:\Windows 存在 |
PSEXESVC could not be installed | 无写入权限/杀软拦截 | 以管理员身份、-h 运行,或给白名单;确认防病毒策略 |
| “多重连接”相关错误 | 已有不同凭据 SMB 会话 | net use \\host\IPC$ /delete 后重新认证 |
| 明明管理员仍无法写系统路径 | 拿到的是“受限令牌” | 用域管理员、-h 或参照 §4.2 临时放开 LocalAccountTokenFilterPolicy |
8)要点速记
- 别用明文
-p;优先交互式、IPC/cmdkey、密管。 - 拿高完整性:
-h(账户本身需是管理员)。 - 通路三件套:445/Admin$/SCM。
- UAC 远程限制是本地管理员的常见坑。
- 任务后清理会话与凭据,避免“多重连接”和泄露面。
下一篇(7.6) 我们进入 PsExec 的命令行选项“全家桶”:把所有“运行时环境/进程优先级/会话交互/复制策略”等开关一次讲透,并给一套“模板化参数组合”方便直接复用。
