标题: 《Win10网络共享故障排查表单》与SMB漏洞八卦 创建: 2021-10-23 13:42 更新: 2022-03-01 17:07 链接: https://scz.617.cn/windows/202110231342.txt 历史上Windows网络共享带来过太多问题,有普通用户层面的,也有安全漏洞层面的。 从Win95开始,SMB协议就没让人省心过,印象最深的SMB协议漏洞是98年yuange公布 的一个。他在个人主页上公开提供了一个漏洞利用工具,修改过的vredir.vxd,替换 Win9x客户端同名文件后,去访问另一台Win9x服务端的有密码保护的共享目录。此时 会弹框提示输入密码,按住回车不松,相当于不停地尝试空密码。但yuange提供的这 个vredir.vxd代码逻辑被修改过,会修改某个发往服务端的SMB报文字段,让服务端 认为己端共享目录的密码只有一个字节的长度。同时,修改过的vredir.vxd在按住回 车不松时自动遍历密码字节,最多尝试256次,其中必有一个可取值导致服务端判定 客户端提供的密码有效。于是,最终效果变成,在客户端密码提示框处长按回车,稍 等一会儿,自动进入服务端有密码保护的共享目录。 99年我在华为北研所,那是成片的Win9x、成片的密码保护共享目录,我手头有这个 vredir.vxd。 这个漏洞在我浅薄的网络安全从业经历中排名非常靠前,在个人心目中该洞Top 1。 当年第一次试用vredir.vxd时,真心有种惊才绝艳感。二十多年后再来看这个洞,某 些不知深浅的后浪们可能对此不屑一顾,但TA们不知道那个年代的yuange没有微软符 号,没有SMB协议文档,没有Wireshark抓包,没有IDA没有Hex-Rays,用的调试工具 也不是VMware+windbg。 受限于当年不发达的石器时代的网络安全环境,很多人不知道这个洞以及yuange公开 提供的利用工具。后来出现过很多影响很大的SMB漏洞,包括永恒之蓝用过的那个, 但这些林林总总的SMB漏洞再末让我产生过惊才绝艳的感慨。 yuange绝对是那个时代微软漏洞第一人,将人肉反汇编这门现已失传的技能发挥到极 致的天才选手。第一次意识到这件事,就是我看到vredir.vxd并测试成功的瞬间。后 来NS先驱们要组团打怪,当时我自己都还没过来组团呢,看到yuange在isbase论坛上 说自己即将离职海信在找工作,赶紧给deepin强烈推荐,让眼圈他们去联系yuange。 yuange没有踩上网络安全大爆发的点,他有些超前于时代。虽然谈不上伽罗瓦、阿贝 尔之于群论,也谈不上罗巴切夫斯基、小鲍约尔之于非欧几何,但从其个人层面来说, 没与时代对上脉搏,是一种命运的安排。这对他的精神状态带来一些负面影响,以致 后来他精神状态不太稳定。无论后来发什么神经,在我心目中yuange永远定格在他二 十出头意气风发、惊才绝艳的岁月中。 大多数人是来看八卦的吧,此番的八卦到此为止,不必往下看了。 后面讲的是《Win10网络共享故障排查表单》,假设想在两台Win10之间使用共享目录, 中间出现各种幺蛾子而未能成功,对此进行一系列检查。不做过多科普,假设排障人 士拥有相关基础知识。事实上,昨天老革命遇上旧问题,长期不开共享都忘了那些趟 过的坑,急切间开共享失败,搞掂后发现还是那句话,好记性不如烂笔头,曾经再熟 悉,日子长了也得忘。 下列检查项在Win10服务端进行 -------------------------------------------------------------------------- (a) 检查445/TCP侦听中 用netstat或tcpview检查445/TCP侦听中。过去还涉及139/TCP,两台Win10之前就别 管139/TCP了。 若未侦听445/TCP,一般都是Server服务未启动,转检查项(b) -------------------------------------------------------------------------- (b) 检查Server服务启动中 在services.msc中检查Server服务启动中,也可以命令行检查、命令行启动 sc query lanmanserver sc qc lanmanserver net start srv Server服务默认是启动的,但你可能做过安全加固,将之禁用。需要说明的是,禁用 Server服务将阻断绝大多数SMB协议漏洞,已知的、未知的,都阻断了。若服务端没 有提供共享目录的需求,请禁用Server服务,可以在services.msc中,也可以命令行 sc config lanmanserver start= disabled sc stop lanmanserver 一般来说,Server服务启动后,开始侦听445/TCP。但从远程"nc -n 445"可能 连不上,用Wireshark抓包,发现只有SYN包出去,没有SYN+ACK回来,转检查项(c) -------------------------------------------------------------------------- (c) 检查Win10自带FW wf.msc检查防火墙规则,确保C/S沿线IP层、TCP层可达。 有一种可能,高级用户在安全加固时清空过FW自带入站规则,除非显式增加过其他放 行规则,否则445/TCP不可达。可以这样恢复FW自带的与共享目录相关的规则 入站规则 右键/新建规则 预定义 文件和打印机共享 Inbound Rules 右键/New Rule Predefined File and Printer Sharing Allow the connection 注意调整"域/专用/公用",与当前网络匹配 为减少FW干挠,可以暂停FW control Windows Defender 防火墙 启用或关闭Windows Defender 防火墙 此处可以彻底关闭自带FW,不要长期这样干 还原默认值 此处可以彻底恢复被清空过的入站规则列表 服务端445/TCP已侦听,FW已关闭,客户端nc仍然连不上服务端445/TCP,抓包仍然只 有SYN没有SYN+ACK,转检查项(d) -------------------------------------------------------------------------- (d) 检查"高级共享设置" control 网络和共享中心 更改高级共享设置 专用 来宾或公用 (假设这是当前配置) 文件和打印机共享 启用文件和打印机共享 高级用户在安全加固时可能选择"关闭" 所有网络 密码保护的共享 有密码保护的共享 control Network and Sharing Center Change advanced sharing settings Private Guest or Public (current profile) File and printer sharing Turn on file and printer sharing All Networks Password protected sharing Turn on password protected sharing 高级用户在安全加固时可能"关闭文件和打印机共享",为使用共享目录,必用启用之。 但是,可能出现一种状况,启用,回到上级配置,再次更改高级共享设置,发现仍然 在关闭状态,刚才的启用操作被回滚了。若出现这种状况,确保a、b、c检查项已无 干挠,再转检查项(e) -------------------------------------------------------------------------- (e) 检查网络属性 control 网络和共享中心 当前网络属性 Microsoft网络的文件和打印共享 control Network and Sharing Center 当前网络属性 Microsoft网络的文件和打印共享 此处默认是选中的,但高级用户在安全加固时可能清空它。若其为空,即使445/TCP 侦听中,实际并不接受任何入连接,不会返回SYN+ACK。若其为空,(d)检查项会出幺 蛾子,会出现回滚。 勾中此处,客户端nc已能建立到服务端445/TCP的连接,抓包看到三次握手。 -------------------------------------------------------------------------- (f) 检查SMB协议相关安全限制 secpol.msc 安全设置 本地策略 安全选项 secpol.msc Security Settings Local Policies Security Options 这里有一堆可能影响到共享目录使用的安全选项,尤其当C/S两侧不是同一类型OS时。 但此处的安全选项过于专业化,不解析了,一般人应该碰不上需要调整它们的时候, 保持默认状态就好。 -------------------------------------------------------------------------- (g) 开启共享目录 compmgmt.msc 计算机管理 系统工具 共享文件夹 共享 右键/新建共享 compmgmt.msc Computer Management System Tools Shared Folders Shares 右键/New Share 此处涉及共享权限设置、NTFS权限设置、用户权限设置,没法细讲,没碰上就算了, 碰上就凭经验处理,属于会者不难的东西。 "net share"确认新建共享出现。 -------------------------------------------------------------------------- 若a-g做完仍有问题,可以考虑重启Server服务后再次测试,一般都不再有问题。 下列检查项在Win10客户端进行 -------------------------------------------------------------------------- (h) 检查SMB会话 net use \\\ipc$ * /u:\ 根据提示输入,确保可以正常建立SMB会话 (i) 访问共享目录 start \\\ 有可能不认之前IPC$上的SMB会话,弹出对话框提示输入user/pass,照做就是。 -------------------------------------------------------------------------- 假设C/S两侧都是Win10,只开一个匿名只读共享,不想提供user/pass就访问到,很 多Win9x年代过来的会比较怀念那种匿名共享。Win10时代达到那种效果要比想像的复 杂一些,回头单独写篇。 参看 《Win10创建匿名共享》 https://scz.617.cn/windows/202203011529.txt