zoukankan      html  css  js  c++  java
  • windows共享文件夹使用中的问题(SMB协议)

    关于SMB

    windows的文件共享,使用的是SMB协议。SMB协议有v1,v2,v3三个版本,其中v1版本是CIFS协议的扩充。
    这几个协议的报文和内容在网上真的是挺难找到说明的。。

    问题

    最近在接入一个仪器时碰到了问题,仪器是嵌入式系统(连支持人员都找不不到。。),在网上好不容易找到一个设备说明,可以通过windows共享文件夹将里面的内容导出来。

    我在win7系统上开放了共享文件夹,经过一系列guest用户配置、防火墙配置以后,设备可以成功传输上文件了。

    初步分析

    不过想在公司的虚拟机上直接获取文件夹,而虚拟机使用的是windows server 2012,这时候问题来了,仪器访问不了2012系统的共享文件夹,一直报错。
    我做了一些对比

    • win7系统,设备始终能存储文件;
    • 2012系统,设备始终不能访问;
    • 2012系统,我使用win7电脑是可以访问的
    • 用xp系统,也能访问2012系统的共享文件夹(这个操作是后来做的)

    抓包分析

    陷入了死胡同,从测试来看,推测可能是win7和win2012系统共享文件夹某些设置有区别。无奈使用wireshark抓取报文尝试分析猜测。
    有如下发现

    • 设备访问使用的是SMBv1版本协议
    • 设备在写入win7系统时,先后使用open和write指令,
      • open指令打开文件,按道理系统应该返回一个可写的权限,但是系统返回的是全0(即只读)
      • write指令写入时,可以成功(按我的理解应该是不能成功的)
    • 而设备在写入win2012系统,使用同样的指令
      • open同样返回只读权限
      • write指令则返回失败

    完全一样的指令流程,win2012上写入失败,而win7成功。
    而且从报文信息看,win2012写入失败是有一定道理的(权限不足),但是为什么会权限不足,我调整了很久的用户权限策略,依旧没有改变。

    关于这个情况,个人推测可能是某个时期SMB协议的漏洞,win7存在,而在win2012中修复了。

    对比分析

    同样抓包了其他windows系统访问win2012系统时的报文。
    发现访问时,会使用SMB2.1版本协议,与设备不同。

    尝试禁用SMB2.1,限制系统只能使用SMBv1,发现在SMB连接建立过程中,有特殊的NTLMSSP认证过程,而设备没有这个步骤。
    怀疑权限的授予,可能与这个过程有关。

    无论如何,我是不可能改设备的代码的。。只能从自己身上想办法。

    规避方案

    设备改不了,只能从服务器这边想办法,搜了很久也没有看到有人碰到类似问题。
    windows的SMB我也debug不了,最后决定自己在服务器上开一个SMB服务,同时把windows自带的SMB服务关掉(Server这个服务,否则端口会冲突)。
    SMB服务使用的是这个实现,我把SMBv2/v3,以及windows authentication选项全部关闭。
    测试以后终于能用了

    心塞(* ̄︿ ̄)

  • 相关阅读:
    python 汇总
    python 异常处理、文件常用操作
    python类中super()和__init__()的区别
    百度搜索结果爬虫
    BS4爬虫实例应用-CISP
    Java类WebServer及中间件拿webshell方法总结
    建模分析之机器学习算法(附python&R代码)
    [原创]代理转发工具汇总分析
    代码审计之文件操作
    PHP自带防SQL攻击函数区别
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608619.html
Copyright © 2011-2022 走看看