Documentation
¶
Index ¶
- Constants
- type SMB2NegotiateRequestStruct
- type SMB2NegotiateResponseStruct
- type SMB2PacketStruct
- type SMB2SessionSetup2RequestStruct
- type SMB2SessionSetupRequestStruct
- type SMB2SessionSetupResponseStruct
- type SMBV1NegotiateRequestStruct
- type SMBV1NegotiateResponseStruct
- type SMBV1PacketStruct
- type SMBV1SessionSetupRequestStruct
- type SMBV1SessionSetupResponseStruct
Constants ¶
View Source
const ( ProtocolSMB = "\xFFSMB" ProtocolSMB2 = "\xFESMB" )
SMB协议版本头
View Source
const ( SecurityModeSigningEnabled uint16 SecurityModeSigningRequired )
SMB签名 开启/关闭
View Source
const ( SMB2_NEGOTIATE = 0x0000 SMB2_SESSION_SETUP = 0x0001 SMB2_LOGOFF = 0x0002 SMB2_TREE_CONNECT = 0x0003 SMB2_TREE_DISCONNECT = 0x0004 SMB2_CREATE = 0x0005 SMB2_CLOSE = 0x0006 SMB2_FLUSH = 0x0007 SMB2_READ = 0x0008 SMB2_WRITE = 0x0009 SMB2_LOCK = 0x000A SMB2_IOCTL = 0x000B SMB2_CANCEL = 0x000C SMB2_ECHO = 0x000D SMB2_QUERY_DIRECTORY = 0x000E SMB2_CHANGE_NOTIFY = 0x000F SMB2_QUERY_INFO = 0x0010 SMB2_SET_INFO = 0x0011 SMB2_OPLOCK_BREAK = 0x0012 )
SMB2 Command代码
View Source
const ( SMBV1_NEGOTIATE = 0x72 SMBV1_SESSION_SETUP_ANDX = 0x73 )
View Source
const ( SMB2_0_2_Dialect = 0x0202 SMB2_1_Dialect = 0x0210 SMB3_0_Dialect = 0x0300 SMB3_0_2_Dialect = 0x0302 SMB3_1_1_Dialect = 0x0311 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type SMB2NegotiateRequestStruct ¶
type SMB2NegotiateRequestStruct struct {
SMB2PacketStruct
StructureSize uint16 //2字节,客户端必须设置36
DialectCount uint16 `smb:"count:Dialects"` //2字节,必须大于0
SecurityMode uint16 //2字节,设置是否启用SMB签名
Reserved uint16 //2字节,必须设置0
Capabilities uint32 //4字节,如果客户端使用SMB3.x,必须使用SMB2_GLOBAL_CAP_*构造,否则设置为0
ClientGuid []byte `smb:"fixed:16"` //16字节,客户端自身生成
ClientStartTime uint64 //8字节,保留字段,归零
Dialects []uint16 //16位整数数组
}
SMB2 Negotiate 请求头结构
type SMB2NegotiateResponseStruct ¶
type SMB2NegotiateResponseStruct struct {
SMB2PacketStruct
StructureSize uint16 //2字节,客户端必须设置36
SecurityMode uint16 //2字节,设置是否启用SMB签名
DialectRevision uint16 //2字节,SMB协议号
Reserved uint16 //2字节,保留字段,归零
ServerGuid []byte `smb:"fixed:16"` //16字节,服务器标识符
Capabilities uint32 //4字节,服务器协议作用
MaxTransactSize uint32 //4字节,客户端set_info请求缓冲区大小
MaxReadSize uint32 //4字节,服务器接受smb read请求最大长度
MaxWriteSize uint32 //4字节,服务器接受smb write请求最大长度
SystemTime uint64 //8字节,处理协商请求服务器系统时间
ServerStartTime uint64 //8字节,服务器启动时间
SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"` //2字节,smb2表头开始到安全缓存区的偏移量
SecurityBufferLength uint16 `smb:"len:SecurityBlob"` //2字节,安全缓冲区长度
Reserved2 uint32 //4字节,协商上下文偏移量
SecurityBlob *gss.NegTokenInit //服务器返回二进制安全对象,遵循RFC2743标准
}
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/63abf97c-0d09-47e2-88d6-6bfa552949a5 SMB2 Negotiate 响应头结构
type SMB2PacketStruct ¶
type SMB2PacketStruct struct {
ProtocolId []byte `smb:"fixed:4"` //4字节,协议标识符,必须设置为 0x424D53FE
StructureSize uint16 //2字节,协议结构大小,必修设置为64
CreditCharge uint16 //2字节,smb2.0.2发送方必须设置为0
Status uint32 //4字节,客户端设置0,服务端返回
Command uint16 //2字节,需要包含smb2有效命令
CreditRequestResponse uint16 //2字节,标识客户端请求信用数
Flags uint32 //4字节,标识如何处理请求
NextCommand uint32 //4字节,复合请求使用,不用归零
MessageId uint64 //8字节,消息唯一标识符
Reserved uint32 //2字节,保留字段,归零
TreeId uint32 //4字节,标识树连接,必须设置0
SessionId uint64 //8字节,会话唯一标识符,必须设置0
Signature []byte `smb:"fixed:16"` //16字节,消息未签名则设0
}
SMB2标准头结构
type SMB2SessionSetup2RequestStruct ¶
type SMB2SessionSetup2RequestStruct struct {
SMB2PacketStruct
StructureSize uint16
Flags byte
SecurityMode byte
Capabilities uint32
Channel uint32 //4字节,保留字段,归零
SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"`
SecurityBufferLength uint16 `smb:"len:SecurityBlob"`
PreviousSessionID uint64 //8字节,会话标识符。服务端用来标识客户端会话
SecurityBlob *gss.NegTokenResp
}
质询请求认证结构体、需要带上响应
type SMB2SessionSetupRequestStruct ¶
type SMB2SessionSetupRequestStruct struct {
SMB2PacketStruct
StructureSize uint16
Flags byte
SecurityMode byte
Capabilities uint32
Channel uint32 //4字节,保留字段,归零
SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"`
SecurityBufferLength uint16 `smb:"len:SecurityBlob"`
PreviousSessionID uint64 //8字节,会话标识符。服务端用来标识客户端会话
SecurityBlob *gss.NegTokenInit
}
type SMB2SessionSetupResponseStruct ¶
type SMB2SessionSetupResponseStruct struct {
SMB2PacketStruct
StructureSize uint16
Flags uint16
SecurityBufferOffset uint16 `smb:"offset:SecurityBlob"`
SecurityBufferLength uint16 `smb:"len:SecurityBlob"`
SecurityBlob *gss.NegTokenResp
}
type SMBV1NegotiateResponseStruct ¶
type SMBV1NegotiateResponseStruct struct {
TotalLength uint32
SMBV1PacketStruct
WCT uint8
SelectedIndex uint16
SecurityMode uint8
MaxMpxCount uint16
MaxVcs uint16
MaxBufferSize uint32
MaxRawBuffer uint32
SessionKey uint32
Capabilities uint32
SystemTime uint64
ServerTime uint16
ChallengeLen uint8
BCC uint16
ServerGUID []byte `smb:"fixed:16"`
}
type SMBV1PacketStruct ¶
type SMBV1SessionSetupRequestStruct ¶
type SMBV1SessionSetupRequestStruct struct {
SMBV1PacketStruct
WCT uint8
AndXCommand uint8
Reserved1 uint8
AndXOffset uint16
MaxBuffer uint16
MaxMpxCount uint16
VCNumber uint16
SessionKey uint32
SecurityBlobLength uint16 `smb:"len:SecurityBlob"`
Reserved2 uint32
Capabilities uint32
BCC uint16
SecurityBlob *gss.NegTokenInit
NativeOS []byte
NativeLanManager []byte
}
type SMBV1SessionSetupResponseStruct ¶
type SMBV1SessionSetupResponseStruct struct {
TotalLen uint32
SMBV1PacketStruct
WCT uint8
AndXCommand uint8
Reserved1 uint8
AndXOffset uint16
Action uint16
SecurityBlobLength uint16 `smb:"len:SecurityBlob"`
BCC uint16
SecurityBlob *gss.NegTokenResp
NativeOS []byte `smb:"ignore:true"`
NativeLanManager []byte `smb:"ignore:true"`
}
Click to show internal directories.
Click to hide internal directories.