Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

SMB2/GetInfo

Opcode 0x10

此 SMB2 命令可用于从服务器获取关于文件及其他类型对象的信息。

SMB2/GetInfo Request

SMB2/GetInfo Request Packet Format

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | InfoClass | Infolevel |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Max Response Buffer Size |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+ Parameters +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+-+-+-+-+ FID +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Buffer Code

SMB2/BufferCode 0x29 = 0x28 | 0x01(但为什么?动态部分在哪里?)

InfoClass

Infoclass 指定我们想获取哪种类型对象的信息。

0x01 SMB2_CLASS_FILE_INFO0x02 SMB2_CLASS_FS_INFO0x03 SMB2_CLASS_SEC_INFO

InfoLevel

Infolevel 与 Infoclass 一起指定要返回的特定信息类型。

SMB2_CLASS_FILE_INFO 的 Infolevels

SMB2_CLASS_FS_INFO 的 Infolevels

SMB2_CLASS_SEC_INFO 的 Infolevels

Max Response Buffer Size

此字段指定服务器在响应中可以发回的最大数据量。如果响应被截断,服务器将把 NT Status Code 设置为 STATUS_BUFFER_OVERFLOW

Parameters

一个 16 字节的数据块,包含特定于 class/infolevel 的额外参数。

FID

SMB2/FID 要从中获取信息的对象标识符。

SMB2/GetInfo Response

SMB2/GetInfo Response Packet Format

If STATUS_SUCCESS or STATUS_BUFFER_OVERFLOW+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | Response Buffer Offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Response Buffer Size (16 or 32 bit?) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Data depending of Infoclass/Infolevel in the request+-+-+-+-+...if STATUS_BUFFER_TOO_SMALL+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | 0x0000 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Response Buffer Size == 4 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Required Buffer Size |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+if STATUS_INVALID_PARAMETER or STATUS_INVALID_INFO_CLASS or +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | 0x0000 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 0x00000000 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Buffer Code

SMB2/BufferCode 0x09 = 0x08 | 0x01

Response Buffer Size

随后返回数据的字节数。

NT Status Codes

  • 0xc0000023 STATUS_BUTTER_TOO_SMALL 这表示缓冲区太小,无法容纳返回的数据。响应数据包将只包含 4 字节,表示所需的缓冲区大小。
  • 0x80000005 STATUS_BUFFER_OVERFLOW 这表示缓冲区太小,并且响应数据已被截断。没有指示缓冲区需要多大。

Discussion

请求中 maxresponsebuffersize 和 fid 之间的 16 字节中,有一部分保存了特定于所用 class/level 的数据,并会改变返回的数据类型。已经观察到字节 8-11 明确属于这个范围。但也可能是字节 4-15,甚至可能是全部字节。此 blob 应在对应的 class/level 页面上记录。

Examples

下面是一个 scanner 尝试每个 SMB2 getinfo level 的抓包。被查询文件具有以下设置:

scan-getinfo.dat: create_time: Thu Aug 10 09:11:44 2006 EST access_time: Fri May 12 09:11:44 2006 EST write_time: Sat Feb 11 10:11:44 2006 EST change_time: Sun Nov 13 10:08:13 2005 EST attrib: 0x20 alloc_size: 8 size: 7 nlink: 1 delete_pending: 0 directory: 0 ea_size: 41 fname: '\test\scan-getinfo.dat'

下面是运行 SMB2-GETINFO 和 SMB2-SETINFO smbtorture 测试的抓包。这展示了如何处理 EAs、ACLs,以及许多 getinfo 和 setinfo levels。

Imported from https://wiki.wireshark.org/SMB2/GetInfo on 2020-08-11 23:25:00 UTC

相关 Wireshark Wiki 页面

网络分析技术档案