内网渗透瑞士军刀-impacket工具解析(六)
字数 1521 2025-08-23 18:31:34

Impacket工具解析:SMBExec深度剖析与实战指南

一、SMBExec概述

SMBExec是Impacket工具包中的一个重要模块,用于通过SMB协议在目标系统上执行命令。与PsExec类似但实现方式不同,SMBExec通过NTLM认证后调用RPC创建系统权限服务来执行命令。

核心特点

  • 无固定文件落地:不像PsExec那样需要固定的二进制文件(remcomsvc)
  • 两种执行模式:SERVER模式和SHARE模式
  • 两种Shell类型:cmd和powershell
  • 相对隐蔽:通过SMB协议进行攻击行为较为隐秘

二、SMBExec工作原理

执行流程

  1. 通过NTLM认证建立连接
  2. 使用RPC创建SYSTEM权限的服务
  3. 服务执行写入到bat文件的命令
  4. 将执行结果写入指定文件
  5. 读取结果文件
  6. 删除服务和生成的文件

核心类结构

  • SMBServer:SERVER模式下在本地创建SMB服务
  • CMDEXEC:处理身份认证、通道绑定和调用RemoteShell
  • RemoteShell:实现命令执行和服务创建的核心逻辑

三、命令执行机制

PowerShell模式执行流程

  1. 开启进度消息静默
  2. 使用分号拼接要执行的命令
  3. Base64编码命令
  4. 构造如下格式的命令:
echo powershell.exe -NoP -NoL -sta -NonI -W Hidden -Exec Bypass -Enc [BASE64编码命令] ^> \\127.0.0.1\C$\__output 2^>^&1 > C:\Windows\TEMP\execute.bat & C:\Windows\system32\cmd.exe /Q /c C:\Windows\TEMP\execute.bat & del C:\Windows\TEMP\execute.bat
  1. 通过cmd执行bat文件
  2. 结果输出到__output文件

CMD模式

省略了调用PowerShell的部分,直接通过cmd执行命令

四、服务创建机制

核心API

使用RCreateServiceW API创建服务,具体参数结构可参考微软文档

服务名生成

  • 默认生成8位随机服务名
  • 初始化时默认为"BTOBTO"
  • 可通过-service-name参数自定义

五、执行结果获取

SHARE模式

  1. 调用smbconnection.getFile方法获取结果文件
  2. 本地读取结果
  3. 删除文件

SERVER模式

  1. 本地直接读取结果文件
  2. 删除文件

六、SERVER模式详解

SERVER模式与SHARE模式的主要区别:

  • 在攻击机本地启动SMB服务端监听
  • 让目标机器连接攻击机的SMB服务
  • 可捕获目标机器账户的NTLMv2哈希

七、RPC绑定与传输机制

  1. 使用命名管道svcctl创建RPC绑定
  2. 通过DCERPCStringBinding类创建DCERPC绑定
  3. 使用工厂函数DCERPCTransportFactory创建传输实例
  4. 判断使用协议(本例使用ncacn_np命名管道协议)
  5. 获取管道端点

八、攻击检测与日志分析

可监测的日志特征

  1. 服务创建事件:触发服务创建日志
  2. 进程树
    • 服务启动创建cmd进程
    • cmd进程执行命令
  3. 错误日志:可能出现wermgr进程日志

典型进程链

服务 → cmd → powershell(如使用PowerShell模式)

九、安全建议与改进方向

当前版本局限性

  1. 特征明显,多数杀软可检测
  2. SMB协议使攻击过程相对容易追踪

可能的改进方向

  1. RPC调用方式优化
  2. 服务创建机制改进
  3. SERVER模式细节完善
  4. 混淆执行流程规避检测

十、实战使用示例

基本用法

python smbexec.py [domain/]username:password@target

参数说明

  • -service-name:指定服务名称
  • -mode:指定SERVER或SHARE模式
  • -shell-type:指定cmd或powershell

SERVER模式示例

python smbexec.py -mode SERVER domain/user:pass@target

总结

SMBExec作为Impacket工具包中的重要内网渗透工具,通过SMB协议和RPC服务实现了在目标系统上的命令执行。理解其工作原理有助于安全人员进行防御策略制定,同时也为红队人员提供了改进攻击技术的方向。在实际使用中,应根据目标环境选择合适的模式和Shell类型,并注意规避安全检测。

Impacket工具解析:SMBExec深度剖析与实战指南 一、SMBExec概述 SMBExec是Impacket工具包中的一个重要模块,用于通过SMB协议在目标系统上执行命令。与PsExec类似但实现方式不同,SMBExec通过NTLM认证后调用RPC创建系统权限服务来执行命令。 核心特点 无固定文件落地 :不像PsExec那样需要固定的二进制文件(remcomsvc) 两种执行模式 :SERVER模式和SHARE模式 两种Shell类型 :cmd和powershell 相对隐蔽 :通过SMB协议进行攻击行为较为隐秘 二、SMBExec工作原理 执行流程 通过NTLM认证建立连接 使用RPC创建SYSTEM权限的服务 服务执行写入到bat文件的命令 将执行结果写入指定文件 读取结果文件 删除服务和生成的文件 核心类结构 SMBServer :SERVER模式下在本地创建SMB服务 CMDEXEC :处理身份认证、通道绑定和调用RemoteShell RemoteShell :实现命令执行和服务创建的核心逻辑 三、命令执行机制 PowerShell模式执行流程 开启进度消息静默 使用分号拼接要执行的命令 Base64编码命令 构造如下格式的命令: 通过cmd执行bat文件 结果输出到__ output文件 CMD模式 省略了调用PowerShell的部分,直接通过cmd执行命令 四、服务创建机制 核心API 使用 RCreateServiceW API创建服务,具体参数结构可参考微软文档 服务名生成 默认生成8位随机服务名 初始化时默认为"BTOBTO" 可通过 -service-name 参数自定义 五、执行结果获取 SHARE模式 调用 smbconnection.getFile 方法获取结果文件 本地读取结果 删除文件 SERVER模式 本地直接读取结果文件 删除文件 六、SERVER模式详解 SERVER模式与SHARE模式的主要区别: 在攻击机本地启动SMB服务端监听 让目标机器连接攻击机的SMB服务 可捕获目标机器账户的NTLMv2哈希 七、RPC绑定与传输机制 使用命名管道 svcctl 创建RPC绑定 通过 DCERPCStringBinding 类创建DCERPC绑定 使用工厂函数 DCERPCTransportFactory 创建传输实例 判断使用协议(本例使用 ncacn_np 命名管道协议) 获取管道端点 八、攻击检测与日志分析 可监测的日志特征 服务创建事件 :触发服务创建日志 进程树 : 服务启动创建cmd进程 cmd进程执行命令 错误日志 :可能出现wermgr进程日志 典型进程链 服务 → cmd → powershell(如使用PowerShell模式) 九、安全建议与改进方向 当前版本局限性 特征明显,多数杀软可检测 SMB协议使攻击过程相对容易追踪 可能的改进方向 RPC调用方式优化 服务创建机制改进 SERVER模式细节完善 混淆执行流程规避检测 十、实战使用示例 基本用法 参数说明 -service-name :指定服务名称 -mode :指定SERVER或SHARE模式 -shell-type :指定cmd或powershell SERVER模式示例 总结 SMBExec作为Impacket工具包中的重要内网渗透工具,通过SMB协议和RPC服务实现了在目标系统上的命令执行。理解其工作原理有助于安全人员进行防御策略制定,同时也为红队人员提供了改进攻击技术的方向。在实际使用中,应根据目标环境选择合适的模式和Shell类型,并注意规避安全检测。