当前位置: 首页 > news >正文

《Sysinternals实战指南》ListDLLs Handle 学习笔记(8.11):谁注入了 DLL?谁占着文件不放?一篇教你全搞定


🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


PsTools 学习笔记(7.8):远程连接选项——连接性、超时、会话与安全基线

  • 1. 问题背景:PsExec 远程连接为什么经常“看起来能用,现场却翻车”
  • 2. PsExec 远程连接的底层通路与前置条件
    • 2.1 远程通路的最小验证
    • 2.2 必须满足的基础条件
  • 3. 远程常用选项:真正该记住的是这些
  • 4. 慢链路 / 高丢包场景:稳态参数组合
    • 4.1 可靠优先:一次到位
    • 4.2 差分热修:最小带宽
  • 5. 会话与可见性:-i、-h、-x 的正确理解
    • 5.1 查看远端会话
    • 5.2 `-x` 要慎用
  • 6. PsExec 远程连接流程图:从命令到远端执行
  • 7. 常见故障速修表:从症状反推断点
  • 8. 安全基线:远程执行不能只追求“跑通”
    • 8.1 凭据不要裸奔
    • 8.2 端口只对运维范围开放
    • 8.3 事后必须清理
  • 9. 脚手架模板:复制后按现场改参数
    • 9.1 批量稳发:清单文件执行
    • 9.2 一次性交互诊断
    • 9.3 限权后台执行
    • 9.4 远端工作目录固定
  • 10. 我的实战判断:PsExec 稳定性的关键不是参数多,而是链路清楚
  • 11. 小结

1. 问题背景:PsExec 远程连接为什么经常“看起来能用,现场却翻车”

在 PsTools 家族里,PsExec 是最常用、也最容易被误用的工具。它看起来只是一条远程执行命令,但真正落到企业环境里,背后牵涉 SMB、ADMIN$、RPC、SCM、远程服务、会话隔离、UAC 令牌、防火墙和安全软件拦截。

很多人排查 PsExec 失败时,只盯着一条报错,例如Access is deniedThe network path was not foundPSEXESVC could not be installed。这很容易跑偏,因为这些报错只是结果,不是链路本身。

这篇文章的目标不是把 PsExec 参数简单列一遍,而是围绕远程连接选项建立一套可落地的判断框架:先看远程通路,再看连接超时,再看会话可见性,最后看安全基线和故障速修。

下面这张图展示的是本文的整体结构:PsExec 远程连接不是单点动作,而是由连接通路、超时控制、会话交互和安全基线共同组成。

从图中可以看出,PsExec 的稳定性不是靠“多试几次”堆出来的。真正稳定的做法,是先确认 SMB/RPC/会话通道是否成立,再根据慢链路、交互执行、安全隔离等不同场景选择参数组合。

我的判断是:PsExec 排障不要先问“命令怎么写”,而要先问“远端链路是否满足执行条件”。命令只是表层,通路才是根。


2. PsExec 远程连接的底层通路与前置条件

PsExec 不是魔法。它远程执行命令的大致过程可以理解为三步:先通过ADMIN$把远程服务组件复制到目标机,再通过SCM 服务控制管理器创建并启动远程服务,最后由该服务承载远端命令并把输入输出回传回来。

这也是为什么 PsExec 经常会被 445、135、防火墙、EDR、UAC 令牌这些因素影响。只要其中任意一个环节断掉,最终表现出来可能都是“连接失败”或“访问被拒绝”。

这张图展示了 PsExec 远程连接的核心链路:管理端通过 SMB 访问 ADMIN$,再通过 RPC/SCM 创建远端服务,最终在目标主机上运行 PSEXESVC 并执行命令。

从图里能看出,PsExec 的前置条件至少包括四类:ADMIN$ 共享可用、SMB 445 可达、SCM/RPC 可用、具备远端管理员权限。如果你只验证了 ping 通,但没有验证 ADMIN$ 和 SCM,那这个排查是不完整的。

2.1 远程通路的最小验证

现场排查时,我建议不要一上来就执行复杂的 PsExec 命令。先用下面几条命令确认基础链路。

ping PC-001 dir \\PC-001\Admin$ sc \\PC-001 query type= service

这三条命令分别验证:目标是否在线、ADMIN$ 是否可访问、SCM/RPC 是否可用。它们比直接上 PsExec 更适合作为第一轮诊断动作。

推荐做法:先验证通路,再执行远程命令。这样失败时能更快定位是网络、权限、共享、RPC,还是安全软件拦截。

2.2 必须满足的基础条件

在企业桌面或服务器环境中,PsExec 稳定运行通常需要满足以下条件:

条件说明排查命令
SMB 445 可达用于访问 ADMIN$ 和复制组件Test-NetConnection PC-001 -Port 445
RPC 135 可达用于远程服务控制Test-NetConnection PC-001 -Port 135
ADMIN$ 可访问默认指向远端 Windows 目录dir \\PC-001\Admin$
具备管理员权限用于创建远端服务whoami /groups
防火墙允许文件共享、远程服务管理需放行netsh advfirewall
安全软件不阻断避免 PSEXESVC 被拦截查看 EDR/杀软日志

不要把 ping 通当作 PsExec 可用的证据。ping 只能说明 ICMP 层面有响应,不能证明 SMB、RPC、ADMIN$ 和 SCM 都正常。


3. 远程常用选项:真正该记住的是这些

PsExec 参数很多,但现场使用不应该把它当成背参数表。远程连接相关参数可以按四类理解:目标、凭据、连接稳定性、执行上下文。

选项作用使用建议
\\host指定目标主机单机执行最常见
\\@list.txt从清单批量读取主机适合批量运维
-u user指定远端登录用户名推荐域账号或受控运维账号
-p pass指定密码不建议明文写入命令行
-n N连接超时,单位秒慢链路建议调大
-c复制本地程序到远端再执行适合远端没有工具的情况
-f强制覆盖远端文件部署固定版本时使用
-v仅版本更新时复制节省带宽,适合慢链路
-r name自定义远端服务名避免默认 PSEXESVC 被策略命中
-i指定交互会话需要 UI 可见时使用
-h使用高完整性令牌管理员账户在 UAC 环境下常用
-d不等待远端进程结束后台投递使用
-w dir指定远端工作目录避免相对路径和日志路径异常

一个比较典型的远程执行命令如下:

psexec \\app-01 -u domain\op -p ***** -n 45 -c -v -w C:\ops job.exe -arg1 -arg2

这条命令的重点不是“参数多”,而是它同时解决了几个现场问题:指定凭据、放宽连接超时、复制工具、只在版本更新时复制,并把工作目录固定到 `C:\ops`。

PsExec 参数组合要围绕场景设计。慢链路、交互界面、后台投递、批量部署、安全审计,参数组合都不一样。


4. 慢链路 / 高丢包场景:稳态参数组合

分支机构、异地机房、VPN、弱网环境下,PsExec 最容易出现连接超时、复制中断、执行结果不稳定等问题。这个时候不能只靠重复执行,而应该从参数层面做稳态设计。

这张图展示的是慢链路下的典型稳态组合:延长连接超时、减少重复复制、使用自定义服务名、后台投递任务,让任务尽量不被临时网络抖动打断。

从图中能看到,慢链路排障不是单纯“把超时时间调大”。更稳的组合是:`-n` 负责连接容忍度,`-c -v` 负责减少传输成本,`-r` 负责服务名可控,`-d` 负责避免本地会话长时间阻塞。

4.1 可靠优先:一次到位

psexec \\edge-01 -n 90 -c -f -v -r psexec_opsvc -d ^ -w C:\ops\pkg deploy.exe /silent /log C:\ops\log\deploy.log

这组参数适合边缘节点或弱网分支:

  • -n 90:将连接超时拉长到 90 秒;
  • -c -f -v:复制程序、必要时覆盖、仅高版本复制;
  • -r psexec_opsvc:自定义远端服务名,便于排查;
  • -d:后台执行,避免本地控制台一直等待;
  • -w C:\ops\pkg:固定远端工作目录,避免相对路径错位。

推荐用于:弱网分支部署、远程修复包投递、远端维护窗口内的无人值守执行。

4.2 差分热修:最小带宽

psexec \\branch-05 -n 75 -c patch.dll -v rundll32.exe patch.dll,Entry

如果只是投递一个小补丁或小组件,`-v` 很有价值。它可以避免每次都重复复制相同文件,尤其适合带宽有限的场景。

弱网环境下,不建议同时批量推送大文件到大量主机。先小范围试点,再分批执行,否则失败后很难判断是网络抖动、远端权限,还是安全软件阻断。


5. 会话与可见性:-i、-h、-x 的正确理解

PsExec 远程执行成功,不代表用户桌面一定看得到界面。Windows 从 Vista 之后引入 Session 0 隔离,服务运行在 Session 0,而用户桌面通常在 Session 1、Session 2 或更高编号的会话中。

所以当你远程执行一个带界面的程序,却发现“进程有了,界面没出现”,不一定是程序没启动,也可能是它启动在了错误的会话里。

这张图展示了 PsExec 会话与可见性的关系:Session 0 是隔离的系统会话,用户真正能看到和交互的是登录后的用户会话,必要时需要使用 `-i` 指定目标会话,并配合 `-h` 使用高完整性令牌。

从图中可以看出,Session 0 与用户会话是隔离的。想让 UI 真正显示在用户桌面,必须先确认目标用户在哪个 Session,再决定是否使用 `-i `。如果涉及管理员界面或需要提升令牌,还要配合 `-h`。

5.1 查看远端会话

query session /server:PC-001

如果目标用户在 Session 2,可以这样执行:

psexec \\PC-001 -i 2 -h cmd.exe

如果你只是执行后台脚本,不需要界面,那么不要随便加 `-i`。交互式执行适合诊断,不适合所有批量运维任务。

5.2-x要慎用

`-x` 用于在 Winlogon 安全桌面显示界面,这个参数不是常规运维动作。它适合非常少数需要安全桌面上下文的场景,不建议普通脚本批量使用。

不要把 `-i` 当成万能参数。很多服务端任务本来就不应该显示 UI,强行交互反而会引入会话、权限和安全风险。


6. PsExec 远程连接流程图:从命令到远端执行

为了把前面的内容串起来,可以把 PsExec 远程执行理解为下面这条链路。只要链路中的某一环断掉,最终就可能表现为连接失败、访问拒绝、服务安装失败、进程启动但无输出。

本机执行 PsExec 命令

目标主机是否可解析

检查 DNS / IP / 路由

SMB 445 是否可达

检查文件和打印共享 / 防火墙

ADMIN$ 是否可访问

检查管理员权限 / Admin$ / UAC 远程限制

RPC / SCM 是否可用

检查 135 与动态 RPC 端口

创建并启动 PSEXESVC

安全软件是否拦截

检查 EDR / 白名单 / 自定义服务名

远端执行命令并回传输出

检查退出码 / 日志 / 执行结果

这个流程图的价值在于,它能让排障从“猜报错”变成“查链路”。你可以按照 DNS、SMB、ADMIN$、RPC、SCM、安全软件、执行结果这个顺序逐项排除。

这也是 Mark 式排障里很重要的一点:用户看到的是报错,工程师要还原的是链路。报错不是根因,链路断点才是根因候选。


7. 常见故障速修表:从症状反推断点

PsExec 的报错很多,但真正高频的根因并不多。排查时不要被英文报错吓住,先判断它属于网络路径、权限令牌、服务创建、会话显示,还是远端路径问题。

报错 / 现象高概率原因处理建议
Access is denied.非管理员、UAC 远程限制、SMB 会话冲突核对管理员权限;清理net use;必要时评估LocalAccountTokenFilterPolicy
The network path was not found.DNS、路由、SMB 445 不通用 IP 测试;检查 445;确认文件共享启用
The RPC server is unavailable.RPC 135 或动态端口被拦放行远程服务管理规则;检查防火墙策略
PSEXESVC could not be installedADMIN$ 不可写、杀软拦截、权限不足检查 ADMIN$;改用管理员;查看 EDR 日志
进程启动但没 UI没有指定用户会话或缺少高完整性令牌使用query session,再配合-i <id> -h
命令偶发卡住慢链路、高延迟、管道输出过大加大-n;使用-d;减少输出回传
远端找不到文件没有-c,远端 PATH 或工作目录不对-c或指定-w工作目录

这里有一个经验判断:如果错误是“路径找不到”,优先查名称解析和 445;如果是“访问拒绝”,优先查账号权限、UAC 令牌和 ADMIN$;如果是“服务安装失败”,优先查 SCM、杀软和远端系统目录写入权限。


8. 安全基线:远程执行不能只追求“跑通”

PsExec 的能力很强,但它的风险也很直接:远程复制、远程创建服务、远程执行进程。这些动作在安全软件、EDR、审计系统眼里都属于高敏行为。所以生产环境使用 PsExec,必须有安全基线。

这张图展示了 PsExec 使用时应该同时关注的两条线:左边是最小权限、凭据安全、审计日志、防火墙和服务清理;右边是快速排障路径,帮助你在不扩大风险面的情况下恢复业务。

从图中能看出,安全不是最后才补的“注意事项”,而是远程执行设计的一部分。真正稳的做法,是策略先行、持续加固,遇到故障时快速定位,恢复后及时清理。

8.1 凭据不要裸奔

命令行里直接写 `-p 密码` 是最直观的做法,但它也是最不推荐的做法。密码可能出现在命令历史、脚本文件、进程命令行快照、日志系统里。

推荐优先使用当前域身份、交互输入密码、受控运维账号、cmdkey、LAPS 或企业密管系统。

8.2 端口只对运维范围开放

PsExec 需要 SMB 和 RPC,但这不代表要对所有网段开放。企业环境里更合理的方式是只对运维网段、跳板机或受控管理终端开放必要端口。

Test-NetConnectionPC-001-Port 445Test-NetConnectionPC-001-Port 135

8.3 事后必须清理

任务完成后,建议检查是否有残留服务、残留文件和残留凭据。

sc \\PC-001 query PSEXESVC sc \\PC-001 delete PSEXESVC net use \\PC-001\IPC$ /delete cmdkey /delete:PC-001

不要在终端上长期保留临时放开的安全策略、明文凭据、残留服务或无审计的远程执行通道。


9. 脚手架模板:复制后按现场改参数

下面给几组现场常用模板。实际使用时不要直接盲跑,至少要改主机名、账号、路径和日志目录。

9.1 批量稳发:清单文件执行

for /f %%H in (hosts.txt) do ( psexec \\%%H -n 75 -c -v -w C:\ops -r opsvc -d agent.exe -install )

这个模板适合把一个工具或代理部署到多台终端。`-n 75` 提高弱网容忍度,`-c -v` 控制复制行为,`-r opsvc` 让服务名可控,`-d` 后台投递。

9.2 一次性交互诊断

psexec \\host -i 1 -h powershell.exe -NoLogo -NoProfile

这个模板适合你需要在远端用户会话里做一次交互诊断时使用。注意先确认 Session ID,不要默认所有机器都是 Session 1。

9.3 限权后台执行

psexec \\app -l -belownormal -d -w C:\tasks task.exe /q

这个模板适合后台低干扰任务。`-l` 限制权限,`-belownormal` 降低调度优先级,适合非紧急作业。

9.4 远端工作目录固定

psexec \\PC-001 -w C:\Temp cmd /c "whoami > result.txt"

如果程序依赖相对路径、配置文件或本地日志,`-w` 很关键。很多“远程能启动但行为异常”的问题,本质上就是工作目录不对。


10. 我的实战判断:PsExec 稳定性的关键不是参数多,而是链路清楚

PsExec 的远程连接选项,表面看是参数问题,实际是企业运维里的链路控制问题。你要知道命令从哪里发出,经过什么端口,依赖什么共享,用什么权限,在远端创建什么服务,最后在哪个会话里运行。

如果只是为了“跑一次命令”,最简单的写法当然能用。但如果要做批量运维、远程修复、弱网部署、交互诊断,就必须把连接、超时、会话、安全四件事分开看。

我的建议可以收束为四句话:

  • 先测通路:DNS、445、ADMIN$、RPC、SCM;
  • 再选参数:慢链路用-n,复制用-c/-v,后台用-d,会话用-i
  • 控制权限:不要明文密码,不要长期放宽 UAC 和防火墙;
  • 保留证据:日志、退出码、远端执行结果都要能回看。

PsExec 是一把很锋利的运维工具。锋利本身不是问题,不知道它切到了哪一层才是问题。


11. 小结

本文围绕 PsExec 远程连接选项,梳理了底层通路、常用参数、慢链路稳态组合、会话与可见性、安全基线和故障速修。真正要带走的不是某个单独参数,而是一套判断顺序。

当 PsExec 失败时,不要直接怀疑工具,也不要反复试命令。先按链路排:名称解析是否正常,SMB 是否可达,ADMIN$ 是否可写,RPC/SCM 是否可用,账号是否具备管理员权限,EDR 是否拦截,目标会话是否正确。

当 PsExec 能跑通时,也不要忽略安全。远程执行本身就是高权限动作,必须做到凭据可控、端口可控、日志可追溯、服务可清理。

把 PsExec 用稳的关键,是把它从“一条远程命令”升级成“一套可审计、可验证、可回滚的远程执行流程”。


🔝 返回顶部

点击回到顶部

http://www.cnnetsun.cn/news/2500229.html

相关文章:

  • 【2026必藏】6款智能降AIGC网站大曝光,一键秒降AI率至安全区!
  • 工业AI模型全生命周期管理:AI模型养成记
  • 【荷兰语语音生成黄金标准】:基于176小时母语者听感测试的ElevenLabs参数调优白皮书
  • 初次使用Taotoken从注册到发出第一个API请求的全流程指引
  • 2025一带一路暨金砖大赛之第二届智能体构建与应用赛项--赛项样题
  • 毕业设计 深度学习安全帽佩戴检测(源码+论文)
  • CircuitJS1 Desktop Mod:离线电路仿真如何让电子学习变得简单有趣?
  • 轻量化无感空间架构,替代传统UWB重型部署体系
  • 大模型---Agent的遗忘方式
  • 纯手打却大面积标红?深度测评5款降AIGC工具,送你高效“去机器味”提示词
  • python接口测试代码
  • ElevenLabs越南语API响应延迟突增?独家诊断工具包(含cURL压测脚本+越南CDN节点路由优化表)
  • 不敢露脸做视频?AI数字人功能让你3分钟生成专业口播视频
  • 如何快速实现HTML转图片:专业开发者的终极实战指南
  • 如何快速掌握TegraRcmGUI:Windows上最简单的Switch注入工具终极指南
  • 【Midjourney材质表现终极指南】:20年AI视觉工程师亲授7大高保真材质控制法则(含V6.1最新参数矩阵)
  • 别让“职场压榨”,消耗掉你的人生!打工人该醒醒了
  • 【大白话说Java面试题 第66题】【JVM篇】第26题:介绍一下 G1 垃圾收集器?
  • 软件开发行业的挑战:如何应对开发人员短缺的问题
  • 2026问卷样本回收九大加速技巧:从发放到清洗全解析,附平台推荐
  • 莱香酵素:以食养润美,以温和养生活✨
  • 深入TI毫米波雷达SDK:拆解IWR6843AOP Out of Box Demo的数据流与任务调度
  • 实战分享:用GDIP-YOLO的‘正则化器’模式,让你的YOLOv3在雾天也能跑出68FPS
  • 2026年阿里云OpenClaw/Hermes Agent配置Token Plan部署超详细攻略
  • 针对现在的AI模型的token中转转包业务的分析
  • XBOX360 KINECT体感游戏合集109个
  • 03 Chroma_向量化:Qwen模型的丝滑接入
  • QGIS数据入库实战:如何将Excel坐标点一键导入PostgreSQL/PostGIS数据库
  • 从对话框到具象交互:AI Agent 的场景化新形态
  • 《最终的数据解读指南》