windows smb协议简单分析
SMB协议
一. Client和Server的连接过程
- client和server首先建立NetBIOS session
- clent和server确定使用的smb协议的dialect(定义了特定协议版本的消息包集)
- client登录到server
- client连接server上的一个share
- client在share中打开文件
- client开始读取文件
client和server首先要建立全双工的TCP连接,然后client建立并发送一个NetBIOS session请求包。
如果请求包格式化正确,server返回一个包含着确认session建立成功的消息包。然后,client
开始想server发送第一个smb协议数据包。
二. SMB协议涉及到的数据包分析
Packet1. SMB_COM_NEGOTIATE
Direction:C->S Description:client想server发送smb dialect的确认信息,server返回一个包含着dialects 的字符串的数据包。
Packet2. SMB_COM_NEGOTIATE
Direction:S->C Description:server相应client的请求,确定将在session中使用的smb dialect。server返回 的数据包中还包括一个8字节的随机字符串,该字符串将在系一部中用于在登录过程中对客户端 进行身份验证。
Packet3. SMB_COM_SESSION_SETUP_ANDX
Direction:C->S Description:该数据包包含着有关client功能的信息,因此即使server实现了share-level security model,也必须要发送该数据包。
Packet4. SMB_COM_SESSION_SETUP_ANDX
Direction:S->C Description:如果server接受了challenge/response,则返回给client的数据包中将包含 一个有效的UID。如果不接受,则在数据包中返回error code,并拒绝访问。
Packet5. SMB_COM_TREE_CONNECT_ANDX
Direction:C->S Description:client对share发起访问,该数据包中包含UNC格式的绝对共享路径。
Packet6. SMB_COM_TREE_CONNECT_ANDX
Direction:S->C Description:如果server授予了client访问权限,则server返回与该数据包中的share对应的 16位的TID。如果share不存在或者client没有足够的权限,则server返回error code并拒绝访问。
Packet7. SMB_COM_OPEN_ANDX
Direction:C->S Description:client请求server代表自己在share中打开文件,该数据包中包含要打开的文件的名称。
Packet8. SMB_COM_OPEN_ANDX
Direction:S->C Description:如果授予了对文件的访问权限,则server返回请求文件的ID;如果文件不存在或者 用户没有足够的权限访问该文件,则返回error code并拒绝client的访问。
Packet9. SMB_COM_READ_ANDX
Direction:C->S Description:client请求server代替自己读取文件中的数据并返回给自己。打开文件时client 获取的文件ID包含在该数据包中,以便识别server应该从哪个打开的文件中读取数据。
Packet10. SMB_COM_READ_ANDX
Direction:S->C Description:server返回client请求的文件数据。由于已授予对server,share和文件的访问权限,一般不会出现问题。但是在某些特殊情况下会发生错误,例如在打开文件和从文件中读取数据这两步之间,对share的访问权限遭到了更改,就会发生错误。
三. SMB Message结构
SMB Message包括一个固定长度的header(32字节)、一个可变长度的Parameter block(最大为64kb)、一个可变长度的Data block。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
