内网渗透瑞士军刀-impacket工具解析(五)
字数 1862 2025-08-23 18:31:17
Impacket工具解析:Psexec.py 深度剖析
一、Psexec工具概述
Psexec是一款经典的Windows远程命令执行工具,最初由Mark Russinovich开发,属于Sysinternals工具集的一部分。Impacket项目中的psexec.py是基于开源项目RemCom重新实现的Python版本。
主要特点
- 仅需SMB服务即可运行(无需安装额外服务)
- 体积小巧(约700KB)
- 支持交互式命令执行
- 基于DCERPC和SMB协议实现
二、技术实现原理
1. 整体架构
Psexec采用客户端-服务端架构:
- 客户端:psexec.py脚本
- 服务端:RemComSVC服务程序(嵌入在Python代码中)
2. 工作流程
- 通过SMB连接将RemComSVC程序上传到目标服务器
- 使用SCMR(服务控制管理器RPC)创建并启动服务
- 通过命名管道进行客户端与服务端的通信
- 执行命令并将结果返回给客户端
三、RemComSVC服务端深度解析
1. 服务入口点
_ServiceMain函数是服务的主入口点- 主要功能:
- 启动
CommunicationPoolThread线程处理客户端请求 - 监听服务退出事件
- 服务退出时执行自删除
- 启动
2. 通信线程
-
CommunicationPoolThread线程:- 创建命名管道(
RemCom_communicaton) - 为每个连接创建
CommunicationPipeThreadProc线程
- 创建命名管道(
-
CommunicationPipeThreadProc线程:- 使用
ReadFile读取客户端消息 - 调用
Execute处理命令 - 将结果写入管道返回给客户端
- 使用
3. 数据结构
// 客户端请求结构
struct RemComMessage {
char szCommand[MAX_PATH];
char szWorkingDir[MAX_PATH];
DWORD dwPriority;
DWORD dwProcessId;
char szMachine[MAX_COMPUTERNAME_LENGTH + 1];
};
// 服务端响应结构
struct RemComResponse {
DWORD dwErrorCode;
DWORD dwReturnCode;
};
4. 命令执行过程
-
创建三个命名管道用于I/O重定向:
RemCom_stdoutRemCom_stdinRemCom_stderr
-
管道命名规则:
\\.\pipe\RemCom_stdout_<机器名>_<PID> \\.\pipe\RemCom_stdin_<机器名>_<PID> \\.\pipe\RemCom_stderr_<机器名>_<PID> -
调用
CreateProcess创建进程:- 命令来自
szCommand字段 - 标准I/O重定向到上述管道
- 命令来自
四、psexec.py客户端实现解析
1. 主要执行流程
- 初始化RPC连接(端点:
\pipe\svcctl) - 调用
doStuff方法:- 建立SMB连接
- 使用
ServiceInstall类安装服务
2. 服务安装细节
ServiceInstall类:- 自动生成服务名(4字节ASCII字母)
- 自动生成服务程序名(8字节ASCII字母)
- 通过RPC寻找可写共享路径
- 将服务文件复制到目标路径
- 创建并启动服务
3. 管道通信实现
- 连接
RemCom_communicaton命名管道 - 构造
RemComMessage数据包并写入管道 - 创建三个线程处理I/O:
RemoteStdInPipeRemoteStdOutPipeRemoteStdErrPipe
4. 交互式Shell实现
RemoteShell类继承自Cmd类- 支持的命令:
help:显示帮助信息lcd:切换本地工作目录lget:从目标下载文件(使用SMBConnection.getFile)shell:在本地执行系统命令- 其他命令:写入标准输入管道
五、安全特征分析
1. 可检测特征
-
文件特征:
- RemComSVC二进制硬编码内容
- 服务文件必须落地到目标系统
-
服务特征:
- 服务名随机生成(4字节ASCII)
- 服务程序名随机生成(8字节ASCII)
-
网络特征:
- 硬编码命名管道名称
RemCom_communicaton - 特定模式的管道命名(
RemCom_std*前缀) - 服务创建和共享访问行为
- 硬编码命名管道名称
2. 防御建议
-
检测层面:
- 监控异常的服务创建行为
- 检测对
RemCom_*命名管道的访问 - 分析SMB共享中的可疑文件写入
-
防护层面:
- 限制SMB协议的访问权限
- 实施服务创建白名单
- 启用高级威胁检测机制
六、技术总结
Psexec.py通过巧妙组合DCERPC和命名管道技术实现了Windows平台的远程交互式Shell,其核心技术要点包括:
-
服务部署机制:
- 利用SCMR RPC远程安装服务
- 自动寻找可写共享路径
-
进程交互设计:
- 主通信管道+三个I/O重定向管道
- 基于机器名和PID的管道隔离
-
客户端实现:
- 完整的交互式Shell功能
- 支持文件下载等扩展功能
尽管该工具存在明显的可检测特征,但其设计思路仍值得安全研究人员深入学习和理解,特别是在Windows内部机制和远程管理技术方面。