Psexec是怎么工作的?Psexec与官方服务端组件PsexeSvc.exe的交互
字数 3008
更新时间 2026-04-24 12:05:22
PsExec 工作原理与交互流程详解
1. 概述
PsExec 是一款功能强大的 Windows 远程命令执行工具,主要用于在远程主机上执行命令行程序。其核心工作原理是通过网络与远程主机上运行的官方服务端组件 PsexeSvc.exe 进行交互,从而实现对远程主机的控制。
2. 核心组件
- 客户端 (PsExec.exe):运行在控制端(攻击者或管理员)的机器上,用于发起远程执行命令的请求。
- 服务端 (PsexeSvc.exe):一个由客户端上传并安装在目标主机上的服务程序,负责接收并执行远程命令。
3. 工作流程
3.1 连接与身份认证
- 建立连接:客户端首先与远程主机的 445 端口(SMB 服务端口)建立连接。
- 身份验证:客户端通过 SMB 协议,使用提供的凭据(用户名和密码)向远程主机进行身份验证。
- **IPC\( 共享访问**:验证成功后,客户端连接到远程主机的 `IPC\)` 管理共享,为后续的远程操作建立通道。
3.2 服务端组件部署与启动
- 上传 PsexeSvc.exe:
- 客户端通过已建立的 SMB 连接,将
PsexeSvc.exe可执行文件上传到远程主机的ADMIN$共享(通常映射为C:\Windows目录)或其他可写共享目录中。
- 客户端通过已建立的 SMB 连接,将
- 创建并启动服务:
- 客户端通过远程服务管理器(Service Control Manager, SCM)在目标主机上创建一个新的 Windows 服务。这个服务被配置为自动启动
PsexeSvc.exe。 - 服务启动后,
PsexeSvc.exe在远程主机上以 SYSTEM 权限或指定用户的权限运行。
- 客户端通过远程服务管理器(Service Control Manager, SCM)在目标主机上创建一个新的 Windows 服务。这个服务被配置为自动启动
3.3 进程间通信管道的建立
这是 PsExec 运行的核心机制,确保了客户端与服务端之间的交互。
- 命名管道创建:
PsexeSvc.exe启动后,会在远程主机上创建一个命名管道(Named Pipe)。默认的管道名称通常为\\.\pipe\psexesvc,但可以自定义。 - 管道连接:客户端的
PsExec.exe通过网络连接到远程主机上由PsexeSvc.exe创建的命名管道。这个连接是通过 SMB 协议在 445 端口上建立的,但实际数据传输是在这个专用管道中进行,从而绕过了标准输入/输出的限制。
3.4 远程命令执行与会话交互
- 命令传递:客户端将要执行的命令(例如
cmd.exe或任何其他命令行指令)通过建立的命名管道发送给PsexeSvc.exe。 - 进程创建:
PsexeSvc.exe在远程主机上以指定权限创建子进程来运行接收到的命令。 - 输入/输出/错误重定向:
- 标准输入 (stdin):客户端发送的输入数据通过管道传递给远程进程。
- 标准输出 (stdout) 和标准错误 (stderr):远程进程的输出和错误信息通过管道回传给客户端。
- 交互式会话:通过这种双向管道通信,用户可以像在本地一样与远程命令行进行交互。
3.5 会话结束与清理
- 命令执行完成:远程进程结束后,
PsexeSvc.exe会通过管道将进程退出代码返回给客户端。 - 服务停止与删除:默认情况下,
PsExec会在命令执行完成后,通过 SCM 停止并删除它创建的临时服务。 - 文件清理:客户端可能会尝试删除之前上传的
PsexeSvc.exe可执行文件,但这取决于具体参数和权限设置。
4. 交互协议的 Python 模拟实现
文档中提供了交互关键步骤的 Python 代码逻辑,用于理解协议细节:
-
建立 SMB 连接与认证:
- 使用
impacket库的SMBConnection类与目标主机的 445 端口建立连接并进行 NTLM 身份验证。
- 使用
-
文件上传:
- 通过
putFile()方法,将本地的PsexeSvc.exe文件上传到远程主机的ADMIN$共享(即C:\Windows目录)。
- 通过
-
远程服务操作:
- 通过
svcctl协议(MS-RPC)连接到远程服务管理器(SCM)。 - 使用
OpenSCManagerW打开 SCM 句柄。 - 使用
CreateServiceW创建一个新的服务,其可执行文件路径指向刚刚上传的PsexeSvc.exe。 - 使用
StartServiceW启动该服务,触发PsexeSvc.exe运行。
- 通过
-
连接到命名管道:
- 服务启动后,使用 SMB 连接的
connectTree()方法连接到IPC$共享。 - 使用
openFile()方法打开由PsexeSvc.exe创建的命名管道(如\pipe\psexesvc)。
- 服务启动后,使用 SMB 连接的
-
通过管道进行数据交换:
- 通过管道的句柄,使用
read(),write(),transactNamedPipe()等方法与PsexeSvc.exe进行双向通信,发送命令并接收输出。
- 通过管道的句柄,使用
-
清理:
- 命令执行完毕后,通过 SCM 的
ControlService()停止服务,并使用DeleteService()删除服务。 - 最后,关闭所有打开的句柄和连接。
- 命令执行完毕后,通过 SCM 的
5. 防御与检测技巧
基于其工作原理,可以采取以下方法进行防御和检测:
5.1 防御措施
- 网络层防护:
- 在防火墙或主机防火墙上,严格控制 445 端口(SMB)的入站访问,仅允许来自可信管理网络的连接。
- 共享权限加固:
- 严格限制
ADMIN$、C$等管理共享的访问权限,仅允许必要的管理账户访问。 - 在非服务器的客户端系统上,可以考虑禁用不必要的网络共享。
- 严格限制
- 凭据保护:
- 避免在所有主机上使用相同的高权限账户密码,防止凭据在单台主机失陷后横向移动。
- 使用强密码并定期更换。
- 服务创建限制:
- 通过组策略(GPO)或本地安全策略,限制非管理员用户创建或修改服务的能力。
- 端点检测与响应 (EDR):
- 部署 EDR 安全产品,监控并告警可疑的服务创建行为(尤其是在临时目录或非标准路径下创建服务)和命名管道的创建与通信。
5.2 检测方法
- 进程监控:
- 监控系统上
PsexeSvc.exe或名称类似的可疑进程的启动。注意攻击者可能对文件进行重命名。
- 监控系统上
- 服务监控:
- 监控短时间内创建和删除的 Windows 服务,特别是由网络连接触发的服务创建。
- 网络流量分析:
- 检测来自非管理网段、针对 445 端口的异常 SMB 连接,特别是连接成功后紧接着出现的命名管道(
\pipe\psexesvc或变体)访问流量。
- 检测来自非管理网段、针对 445 端口的异常 SMB 连接,特别是连接成功后紧接着出现的命名管道(
- 文件系统监控:
- 监控
C:\Windows或ADMIN$共享目录下突然出现的、非系统自带的.exe文件(如PsexeSvc.exe)。
- 监控
- 日志审计:
- 启用并集中审计 Windows 安全日志(事件 ID 4688:进程创建,事件 ID 7045:服务创建)和 Sysmon 日志(如果能部署),分析相关事件。
(注:本文档是基于奇安信攻防社区分享的《Psexec是怎么工作的?Psexec与官方服务端组件PsexeSvc.exe的交互》文章核心内容整理而成,涵盖了连接建立、服务部署、管道通信、命令执行及防御检测等关键技术环节。)
相似文章
相似文章