内网渗透瑞士军刀-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工作原理
执行流程
- 通过NTLM认证建立连接
- 使用RPC创建SYSTEM权限的服务
- 服务执行写入到bat文件的命令
- 将执行结果写入指定文件
- 读取结果文件
- 删除服务和生成的文件
核心类结构
- SMBServer:SERVER模式下在本地创建SMB服务
- CMDEXEC:处理身份认证、通道绑定和调用RemoteShell
- RemoteShell:实现命令执行和服务创建的核心逻辑
三、命令执行机制
PowerShell模式执行流程
- 开启进度消息静默
- 使用分号拼接要执行的命令
- Base64编码命令
- 构造如下格式的命令:
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
- 通过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模式细节完善
- 混淆执行流程规避检测
十、实战使用示例
基本用法
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类型,并注意规避安全检测。