Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 攻防对抗 › 「攻防对抗」内网渗透从零到一之SMB协议

「攻防对抗」内网渗透从零到一之SMB协议

Eswlnk的头像
Eswlnk
2022-12-22 12:56:10
「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog
智能摘要 AI
本文主要介绍了SMB协议及其不同版本(SMBv1、SMBv2、SMBv3)的基本结构和功能。SMB协议是一种网络文件共享协议,常用于内网横向移动。SMBv1的消息结构包括SMB_Header、SMB_Parameters和SMB_Data三部分,分别负责协议版本、命令及参数、数据传输。SMBv2是对SMBv1的扩展,增加了异步命令支持,并简化了消息结构。SMBv3引入了加密和压缩特性,进一步增强了安全性。文中详细列举了各版本中关键命令及其作用,例如SMB_COM_NEGOTIATE用于协商协议版本,SMB2 SESSION_SETUP用于身份验证等。此外,还提供了相关命令的PowerShell配置方法和数据分析示例。

0x00

在内网利用PTH进行横向移动时常使用的atexec/smbexec/psexec等都有smb协议的身影,而笔者对smb协议理解的也比较粗浅,所以对smb协议进行一个系统的学习,并作个记录。

0x01 SMBv1

CIFS协议是SMB协议的一个特定版本的特定叫法,本质还是SMB协议。其它的SMB协议版本对应有其它的叫法,这个叫法也可以说是方言。

服务器消息块 (SMB) 协议是网络文件共享协议,如 Microsoft Windows中实现的称为 Microsoft SMB 协议。 定义特定版本的协议的消息数据包集称为方言。 常见的 Internet 文件系统 (CIFS) 协议是 SMB 的方言。

CIFS协议可以进行客户端和服务器之间传输文件,也可以用于访问集中式打印队列,以及使用命名管道进行进程间通信。

0x010 SMBv1 消息结构

SMBv1消息由三部分构成

  • 固定长度的SMB标头(SMB_Header)
  • 可变长度的参数块(SMB_Parameters)
  • 可变长度的数据块(SMB_Data)

0x0100 SMB_Header

SMB_Header结构如下

SMB_Header{
    UCHAR  Protocol[4];
    UCHAR  Command;
    SMB_ERROR Status;
    UCHAR  Flags;
    USHORT Flags2;
    USHORT PIDHigh;
    UCHAR  SecurityFeatures[8];
    USHORT Reserved;
    USHORT TID;
    USHORT PIDLow;
    USHORT UID;
    USHORT MID;
}

Command位用于表示发送的是什么命令,用命令对应的命令代码表示,比如我要发送SMB_COM_CREATE_DIRECTORY命令,则填充Command位为0x00,SMB_COM_CREATE_DIRECTORY命令的意思是创建一个新目录。其它命令可查看文档

SMB_Header结构的其它位的含义可以查看文档

0x0101 SMB_Parameters

SMB_Parameters结构如下

SMB_Parameters{
    UCHAR  WordCount;
    USHORT Words[WordCount] (variable);
}

WordCount作为Words数组的宽度决定SMB_Parameters的大小,当WordCount为0时SMB_Parameters大小为1字节。

0x0102 SMB_Data

SMB_Data结构如下

SMB_Data{
    USHORT ByteCount;
    UCHAR  Bytes[ByteCount] (variable);
}

WordCount作为Bytes数组的宽度决定SMB_Data的大小,当ByteCount为0时SMB_Data大小为2字节。

0x011 消息概例

SMBv1消息结构可以表示为如下

SMB_Header{
    UCHAR  Protocol[4];
    UCHAR  Command;
    SMB_ERROR Status;
    UCHAR  Flags;
    USHORT Flags2;
    USHORT PIDHigh;
    UCHAR  SecurityFeatures[8];
    USHORT Reserved;
    USHORT TID;
    USHORT PIDLow;
    USHORT UID;
    USHORT MID;
}
SMB_Parameters{
    UCHAR  WordCount;
    USHORT Words[WordCount] (variable);
}
SMB_Data{
    USHORT ByteCount;
    UCHAR  Bytes[ByteCount] (variable);
}

SMB_Header结构中字段都是固定的,而SMB_Parameters和SMB_Data也是遵循其基本结构的,只是不同的消息Words数组和Bytes数组存储的东西不一样而已。

使用如下powershell命令禁用SMBv2/SMBv3,使服务器使用SMBv1协议

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force

大概分析一下以下两条cmd命令的SMBv1消息,重点看Command字段值

net use \\10.1.1.1\ipc$ "administrator" /user:"administrator"
dir \\10.1.1.1\c$

Command字段值按顺序汇总为如下

SMB_COM_NEGOTIATE
SMB_COM_SESSION_SETUP_ANDX
SMB_COM_SESSION_SETUP_ANDX
SMB_COM_TREE_CONNECT_ANDX
SMB_COM_TREE_CONNECT_ANDX
SMB_COM_TRANSACTION2
SMB_COM_TRANSACTION2
SMB_COM_TRANSACTION2
SMB_COM_TRANSACTION2
SMB_COM_TRANSACTION2
SMB_COM_TRANSACTION2

SMB_COM_NEGOTIATE命令用于协商协议方言。

SMB_COM_SESSION_SETUP_ANDX命令用于配置SMB 会话。如果服务器在用户级访问控制模式下运行,则必须发送至少一个 SMB_COM_SESSION_SETUP_ANDX以执行用户登录到服务器并建立有效的 UID。通过抓包我们也可以看到SMB_COM_SESSION_SETUP_ANDX命令用来进行NTLM身份认证。

SMB_COM_TREE_CONNECT_ANDX命令用于建立到服务器共享的客户端连接。这里是先建立到\\10.1.1.1\ipc$共享的客户端连接,然后在dir的时候建立到c$的共享

SMB_COM_TRANSACTION2命令请求消息结构如下

SMB_Parameters
   {
   UCHAR  WordCount;
   Words
     {
     USHORT TotalParameterCount;
     USHORT TotalDataCount;
     USHORT MaxParameterCount;
     USHORT MaxDataCount;
     UCHAR  MaxSetupCount;
     UCHAR  Reserved1;
     USHORT Flags;
     ULONG  Timeout;
     USHORT Reserved2;
     USHORT ParameterCount;
     USHORT ParameterOffset;
     USHORT DataCount;
     USHORT DataOffset;
     UCHAR  SetupCount;
     UCHAR  Reserved3;
     USHORT Setup[SetupCount];
     }
   } 
 SMB_Data
   {
   USHORT ByteCount;
   Bytes
     {
     UCHAR Name;
     UCHAR Pad1[];
     UCHAR Trans2_Parameters[ParameterCount];
     UCHAR Pad2[];
     UCHAR Trans2_Data[DataCount];
     }
   }

SMB_COM_TRANSACTION2消息结构中的Setup[SetupCount]表示子命令,SMB_COM_TRANSACTION2命令具体的作用还需要看子命令,也就是看Setup[SetupCount]的值

把SMB_COM_TRANSACTION2命令中的子命令按顺序汇总为如下

TRANS2_QUERY_PATH_INFORMATION
TRANS2_QUERY_PATH_INFORMATION
TRANS2_QUERY_FS_INFORMATION
TRANS2_QUERY_FS_INFORMATION
TRANS2_FIND_FIRST2
TRANS2_QUERY_FS_INFORMATION

TRANS2_QUERY_PATH_INFORMATION子命令用于获取文件或目录的信息。TRANS2_QUERY_PATH_INFORMATION请求消息中的Trans2_Parameters.InformationLevel的值为QUERY Information Level Codes,QUERY Information Level Codes决定了响应消息中包含的哪些信息,QUERY Information Level Codes有如下值

「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog

TRANS2_QUERY_FS_INFORMATION子命令用于请求有关作为服务器上共享基础的对象存储的信息。TRANS2_QUERY_FS_INFORMATION子命令请求消息也有Trans2_Parameters.InformationLevel字段,该字段值为QUERY_FS Information Level Codes,QUERY_FS Information Level Codes不同返回的内容不同,有如下

「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog

TRANS2_FIND_FIRST2子命令用于搜索目录中的文件或目录。Trans2_Parameters.InformationLevel字段值为FIND Information Level Codes,FIND Information Level Codes不同返回的内容不同,有如下

「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog

其它SMB_COM_TRANSACTION2命令的子命令可以查看文档

每条命令的细节可以去查文档,文档里面的有命令的作用和对应的消息结构。

0x02 SMBv2

SMBv2是对SMBv1的一个扩展,当SMBv2标头设置了Flags中的SMB2_FLAGS_ASYNC_COMMAND位时,SMBv2标头结构为ASYNC,当SMBv2标头没有设置Flags中的SMB2_FLAGS_ASYNC_COMMAND位时,SMBv2标头结构为SYNC

SMBv2标头结构在SMBv2的所有消息中是固定的,而消息剩余部分的内容随命令不同而不同,SMBv2命令填充到SMBv2标头的Command字段中,SMBv2命令有如下

「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog

使用如下powershell命令开启SMBv2/SMBv3,命令执行完之后需要重启计算机

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 -Force

大概分析一下以下两条命令的SMBv2消息

net use \\10.1.1.1\ipc$ "123.com" /user:"administrator"
dir \\10.1.1.1\c$
「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog

Command字段值按顺序汇总为如下

SMB_COM_NEGOTIATE
SMB2 NEGOTIATE
SMB2 SESSION_SETUP
SMB2 SESSION_SETUP
SMB2 TREE_CONNECT
SMB2 IOCTL
SMB2 IOCTL
SMB2 TREE_CONNECT
SMB2 IOCTL
SMB2 CREATE
SMB2 QUERY_INFO
SMB2 CREATE
SMB2 CLOSE
SMB2 CREATE
SMB2 CLOSE
SMB2 QUERY_INFO

SMB_COM_NEGOTIATE是SMBv1中的命令,是用来协商方言的。

SMB2 NEGOTIATE是SMBv2中的命令,也是用来协商方言的。这里可以看下返回包,服务器选择了SMB2.1方言

「攻防对抗」内网渗透从零到一之SMB协议-Eswlnk Blog

SMB2 SESSION_SETUP命令用以请求新的经过身份验证的会话到服务器。这里就是使用NTLM协议进行身份认证。

SMB2 TREE_CONNECT命令用来请求服务器上的特定共享。这里连接的是ipc$

SMB2 IOCTL用来发送文件系统控制命令或设备控制命令。

SMB2 CREATE用以请求创建或访问文件。

SMB2 QUERY_INFO用来查询文件、命名管道或基础卷的信息。

SMB2 CLOSE用于关闭SMB2 CREATE命令打开的文件实例。

0x03 SMBv3

SMBv2/SMBv3在官方文档里面是作为SMB 2协议的一个方言存在的

所以SMBv2的消息结构也是SMBv3的消息结构,当然SMBv3有很多自己的特性,比如SMBv3可以使用SMB2 TRANSFORM_HEADER标头来发送加密消息,也可以使用SMB2 COMPRESSION_TRANSFORM_HEADER标头来发送压缩消息。

我这里连接Windows Server 2012的SMB服务,这时候协商使用的是SMB3.0.2方言

而对比其它的数据包,结构也基本一致。

文章用到的数据包可以在这里找到。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
smbsmb协议命令模式
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「高危漏洞」宝塔面板 Nginx 挂马事件剖析以及相关的补救措施
上一篇
CVE-2022-39198 Apache Dubbo Hessian Deserialization Vulnerability Gadgets Bypass
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 今日热点:伪Clash软件下载陷阱曝光,附防范建议
  • 「攻防对抗」利用 fastjson 原生反序列化与动态代理突破安全限制
  • 「攻防对抗」从上传漏洞到Getshell | 一次完整的渗透过程
  • 「日志记录」从零起步揭开路由器漏洞挖掘的面纱
  • 「攻防对抗」NSmartProxy流量特征的真实表现与应用
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

逆向分析之破解和解压Python打包工具
2021-12-09 16:28:12
EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载
2023-05-27 17:00:58
关于Windows环境下Payloads总结
2022-02-15 15:34:53

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.671 秒   |  SQL查询 31 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈