### psexec 和 wmic 区别

PsExec

PsExec 是 Sysinternals 套件中的一个工具，主要用于在远程计算机上 执行 进程。它通过 SMB 协议在远程系统上创建一个临时的服务（名为 `psexecsvc`）来运行你指定的命令，然后将命令的输出返回给你

核心特点

- 功能：在远程机器上以高权限（通常是 SYSTEM）执行命令或启动程序
- 工作原理：
  1. 连接到远程机器的 Admin$ 共享
  2. 将 PsExec 客户端文件复制到 `Admin$\System32\psexec.exe`（或类似路径）
  3. 通过服务管理器（SCM）创建一个临时服务来执行命令
  4. 命令执行完毕后，删除服务和客户端文件
- 典型用途：
  - 在远程服务器上启动交互式命令提示符 (`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 接口来管理系统
- 工作原理：
  1. 通过 DCOM 协议连接到远程机器的 WMI 服务
  2. 向 WMI 存储库发送查询或命令请求
  3. 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 框架内的操作
场景 | 当你需要在远程机器上启动一个程序时 | 当你需要查询远程机器的状态或执行管理任务时