psexec 和 wmic 区别
PsExec
PsExec 是 Sysinternals 套件中的一个工具,主要用于在远程计算机上 执行 进程。它通过 SMB 协议在远程系统上创建一个临时的服务(名为 psexecsvc
)来运行你指定的命令,然后将命令的输出返回给你
核心特点
- 功能:在远程机器上以高权限(通常是 SYSTEM)执行命令或启动程序
- 工作原理:
- 连接到远程机器的 Admin$ 共享
- 将 PsExec 客户端文件复制到
Admin$\System32\psexec.exe
(或类似路径) - 通过服务管理器(SCM)创建一个临时服务来执行命令
- 命令执行完毕后,删除服务和客户端文件
- 典型用途:
- 在远程服务器上启动交互式命令提示符 (
PsExec \\remote-pc cmd
) - 以 SYSTEM 权限运行程序 (
PsExec -s \\remote-pc <program.exe>
) - 执行远程脚本或批处理文件。
- 在远程服务器上启动交互式命令提示符 (
优点与缺点
- 优点:
- 远程执行能力强:能以高权限运行任何可执行文件或命令
- 支持交互式会话:可以打开一个远程命令提示符,就像在本地操作一样
- 不依赖 PowerShell 或 WMI 的特定配置
- 缺点:
- 依赖文件共享:需要 Admin$ 共享可用,且端口 445 必须开放
- 可能被安全软件检测:其工作方式(文件复制、创建服务)与一些恶意软件类似,可能被杀毒软件或 EDR 标记
- 网络流量:在执行过程中会产生一些网络流量
WMIC
WMIC (Windows Management Instrumentation Command-line) 是一个命令行工具,用于与 WMI 框架进行交互。WMI 是一个内置于 Windows 的管理接口,提供了查询和管理几乎所有系统信息的标准化方法。WMIC 让你能够从命令行执行这些查询和操作
核心特点
- 功能:查询系统信息、执行管理任务。它不是用于直接执行远程可执行文件,而是通过 WMI 接口来管理系统
- 工作原理:
- 通过 DCOM 协议连接到远程机器的 WMI 服务
- 向 WMI 存储库发送查询或命令请求
- WMI 服务在远程机器上执行请求,并返回结果
- 典型用途:
- 查询系统信息:例如,查看远程机器的进程列表 (
wmic /node:"remote-pc" process list brief
)、服务状态、硬件信息、网络配置等 - 执行管理任务:例如,终止远程进程 (
wmic /node:"remote-pc" process where name="calc.exe" call terminate
)、启动或停止服务、修改注册表项等
- 查询系统信息:例如,查看远程机器的进程列表 (
优点与缺点
- 优点:
- 系统内置:是 Windows 的一部分,不需要额外下载或分发文件
- 强大的查询能力:能够通过
WHERE
语句进行复杂的过滤,查询各种系统对象 - 隐蔽性好:工作在 WMI 协议层,不会像 PsExec 那样创建临时服务或复制文件,因此更难被检测
- 缺点:
- 命令复杂:语法相对复杂,需要熟悉 WMI 的类和别名
- 功能限制:虽然可以执行任务,但不能像 PsExec 那样灵活地运行任意的本地程序
- 依赖:需要远程 WMI 服务开启且 DCOM 端口(通常是 135/TCP)可用
特性 | PsExec | WMIC |
---|---|---|
用途 | 远程执行命令和程序 | 远程查询和管理系统信息 |
原理 | 远程创建服务,运行可执行文件 | 通过 WMI 接口发送管理命令 |
协议 | SMB (TCP 445) | DCOM (TCP 135) |
优势 | 远程执行能力强、支持交互式会话 | 系统内置、强大的查询过滤、隐蔽性好 |
缺点 | 需要文件共享、可能被检测、会产生文件 | 语法复杂、功能限于 WMI 框架内的操作 |
场景 | 当你需要在远程机器上启动一个程序时 | 当你需要查询远程机器的状态或执行管理任务时 |