Appearance
Appearance
Opcode 0x10
此 SMB2 命令可用于从服务器获取关于文件及其他类型对象的信息。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | InfoClass | Infolevel |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Max Response Buffer Size |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+ Parameters +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+-+-+-+-+ FID +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+SMB2/BufferCode 0x29 = 0x28 | 0x01(但为什么?动态部分在哪里?)
Infoclass 指定我们想获取哪种类型对象的信息。
0x01 SMB2_CLASS_FILE_INFO0x02 SMB2_CLASS_FS_INFO0x03 SMB2_CLASS_SEC_INFOInfolevel 与 Infoclass 一起指定要返回的特定信息类型。
0x01 SMB2/SMB2_FS_VOLUME_INFO 与 SMB qfs level 1001 相同
0x03 SMB2/SMB2_FS_SIZE_INFO 与 SMB qfs level 1003 相同
0x04 SMB2/SMB2_FS_DEVICE_INFO 与 SMB qfs level 1004 相同
0x05 SMB2/SMB2_FS_ATTRIBUTE_INFO 与 SMB qfs level 1005 相同
0x06 SMB2/SMB2_FS_QUOTA_INFO 与 SMB qfs level 1006 相同
0x07 SMB2/SMB2_FS_FULL_SIZE_INFO 与 SMB qfs level 1007 相同
0x08 SMB2/SMB2_FS_OBJECTID_INFO 与 SMB qfs level 1008 相同
此字段指定服务器在响应中可以发回的最大数据量。如果响应被截断,服务器将把 NT Status Code 设置为 STATUS_BUFFER_OVERFLOW
一个 16 字节的数据块,包含特定于 class/infolevel 的额外参数。
SMB2/FID 要从中获取信息的对象标识符。
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 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+SMB2/BufferCode 0x09 = 0x08 | 0x01
随后返回数据的字节数。
请求中 maxresponsebuffersize 和 fid 之间的 16 字节中,有一部分保存了特定于所用 class/level 的数据,并会改变返回的数据类型。已经观察到字节 8-11 明确属于这个范围。但也可能是字节 4-15,甚至可能是全部字节。此 blob 应在对应的 class/level 页面上记录。
下面是一个 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