背景

在最近项目中需要使用到windows smb文件共享,并且该项目过程不允许重启系统,其使用到的TCP连接端口为445,该项目测试环境一直处在内部网络,所以一开始没发现什么问题,项目进展到一定程度后,需要在公网环境中进行仿真测试,突然发现smb通道不能使用了,查了半天,发现是ISP把445端口给禁了,这让整个项目处于一个非常尴尬的处境,同时发现很多同行遇到了在原项目中使用了smb文件共享现在公网环境也无法正常工作,所以需要找到一个优雅的方法来完美解决这个问题。

找出SMB监听445的服务

按常理会把smb通道指定别的端口进行通信即可,可研究半天,发现net use使用smb时,无法指定传输端口,其原理是在windows开机启动时加载netbt驱动,smb服务使用默认端口445进行监听,而作为smb客户端也是用这个端口进行远端连接,google半天,是有那么一个注册表可以改这个初始化端口,应该在:

HKLM:\SYSTEM\CurrentControlSet\Services\NetBT

按正常思路,修改注册表,重启对应服务。那接下来使用netstat命令查看一下监听445端口的进程:

可以看出是pid为4的进程进行监听,从任务管理器上看是名叫System,备注"NT Kernel & System",这玩意儿要重启,岂不是直接告诉你系统重启,但是该项目最大的特点就是不允许重启系统,事情发展到这个形态,不由得让我们Linux开发出身的程序员对一个封闭系统的感叹,唏嘘。

端口代理

但问题总要解决,这个时候我想到了端口代理/端口转发,只要网络流量在公网上不使用445端口就可以,我就设计出了一个思路:

Windows smb客户端访问本地445:

net use \\127.0.0.1\C$

1.客户端通过访问本地445,端口转发成访问远端,将访问本地445转发成访问远端8445端口,假设smb服务器IP为192.168.1.81:

netsh interface portproxy add v4tov4 listenport=445 connectaddress=192.168.1.81 connectport=8445

2.服务端由访问8445,端口转发成访问本地445:

netsh interface portproxy add v4tov4 listenport=8445 connectaddress=192.168.1.81 connectport=445

动手操作,按图描述的结构进行配置,服务端查看端口状态,可看到已有8445端口在监听

而客户端查看445端口状态,依然是pid为4的服务在监听,进行net use连接测试,连上的并不是远端的smb服务,而是本地smb服务。
经分析原理,配置端口代理后,被代理的端口会创建一个监听状态,可是本地已有smb服务监听了445端口,所以在客户端侧端口代理功能相当于失效。

再了解一下windows防火墙架构,如下是示意图:

前面所配置的端口代理应该属于Ipnat.sys模块,但是当我们在客户端在用户态使用net use连接127.0.0.1的smb的时候,在windows sockets driver(winsock.dll)时转到对应的本地smb应用服务,流量请求根本到不了Ipnat.sys模块,导致端口代理也就不会起作用。

端口拦截、端口代理

通过windows防火墙架构理清楚原因后,我们就想是否有别的办法在winsock.dll层面将流量报文拦截下来,然后转移到端口代理中去呢。
果不其然,google上找到了我们需要的驱动WinDivert:

windows 数据包转移 (WinDivert) 是一种用户模式的数据包捕获和转移包,WinDivert 允许用户模式应用程序捕获、修改、丢弃从 windows 网络堆栈发送的网络数据包。

基于这个工具,在github找到衍生开源项目divertTCPconn。
这个项目利用WinDivert驱动可以把指定目的端口的流量转换成访问本地其它端口,这不就正是我们想要的东西,那问题基本解决了,跃跃欲试,重新整理架构图:

把WinDivert和DivertTCPconn结合编译、执行,将访问远端445端口的流量转换成访问本地8445,然后再写一条端口代理从本地8445代理到远端8445,对应命令如下:

端口拦截

divertTCPconn.exe 445 8445

端口代理
假设远端smb服务器IP为192.168.1.81

netsh interface portproxy add v4tov4 listenport=8445 connectaddress=192.168.1.81 connectport=8445

经过客户端smb连接

net use \\192.168.1.81\C$

测试发现,流量并没有走8445端口,后面对divertTCPconn项目源码进行分析,发现在使用过滤器时,针对的是inbound&dst-port=445进行匹配。但对于我们这种情景来说,本地访问远端445是属于outbound&dst-port=445,赶紧把divertTCPconn代码修改:

经再次测试,在服务器之间走的是8445端口,而客户端和服务器内部也能够将445和8445进行转换,总结本案例是通过用户态端口拦截加端口重定向技术,最终达到我们想要的效果,并且在整个过程中,不用修改注册表,不用重启系统。

继勒索病毒“永恒之蓝”445端口被封之后,在公网实现smb文件共享相关推荐

  1. 勒索病毒(永恒之蓝)

    WannaCry WannaCry(又叫Wanna Decryptor),一种"蠕虫式"的勒索病毒软件,大小3.3MB,由不法分子利用NSA(National Security A ...

  2. AD域内禁用所有计算机445端口,勒索病毒“永恒之蓝”变种再来,该如何关闭445端口(收藏)(示例代码)...

    Windows系统要及时接收查看系统信息,根据提示安装补丁,才能确保系统的安全性. 不同系统的补丁安装地址↓(在Windows系统中打开浏览器,复制相应系统链接粘贴,按下Enter回车即可)如果还没安 ...

  3. 恢复勒索病毒“永恒之蓝”中招的文件,ooops,your files have been encrypted!解决方案

    以下内容包含普通电脑解决方案.云服务器解决方案.以及预防方法.文件日常免费自动备份方案 半夜被运维值班人员的紧急电话惊醒,阿里云ECS服务器业务停止了,迷迷糊糊打开手机远程桌面,无法连接.无奈打开电脑 ...

  4. 针对ONION勒索病毒!如何关闭139端口及445端口等危险端口

    系统有些端口是我们平时用不到但是又存在危险的端口,例如139.135.445等端口,windows默认是开着的,这时我们可以手动关闭这些端口!下边为大家介绍一种通过windows组策略来一次性关闭所有 ...

  5. 抵抗勒索病毒的正确姿势——不要上来就封端口!

    刚刚过去的这个周末,朋友圈一定被勒索病毒刷屏了~ 看到一堆人告诉别人封锁135-139,445端口,作为一个修过无数AD复制问题,客户端无法登录或者使用域资源问题的老司机,我想问问,您真的知道这些端口 ...

  6. MS17-010 漏洞永恒之蓝445漏洞复现

    前言 这里使用kali中的Metasploit 主要利用445端口的漏洞 首先需要一台win7作为目标靶机 (不只是win7可以) 启用Metasploit mfsconsole 1.查找漏洞模块 s ...

  7. 445端口被封之后,在公网实现smb文件共享

    背景 在最近项目中需要使用到windows smb文件共享,并且该项目过程不允许重启系统,其使用到的TCP连接端口为445,该项目测试环境一直处在内部网络,所以一开始没发现什么问题,项目进展到一定程度 ...

  8. “永恒之蓝”勒索病毒安全事件应急指导手册(附工具包)

    相关说明 北京时间2017年05月12日,安恒信息监测到黑客利用NSA黑客武器库泄漏的"永恒之蓝"工具发起的网络攻击事件:大量服务器和个人PC感染病毒后被远程控制,成为不法分子的比 ...

  9. 勒索病毒来自美国网络武器库 破解靠重装系统

    全球多个国家12日遭受一种勒索软件的攻击,受害者包括中国一些高校和英国多家医院.据了解,这种勒索软件是不法分子利用了美国国家安全局网络武器库中泄漏出的黑客工具. 据新华社报道,中国网络安全公司360首 ...

最新文章

  1. useradd与adduser的区别
  2. asp.net利用Web Service实现短信发送致手机
  3. (原創) 由一維陣列模擬二維陣列(多維陣列) (C/C++)
  4. 阿里云开启多媒体搜索新时代,发布全域精准图像搜索
  5. Spring Boot 2.0(三):Spring Boot 开源软件都有哪些?
  6. 689D Magic Odd Square 奇数幻方
  7. php 文件上传mime 类型,PHP JAVA C上传文件如何准确判断文件类型-mime知识普及
  8. 木兰已出现,木兰已死?
  9. ASP.NET那点不为人知的事(二)
  10. 飞猪:国庆乡村民宿订单量涨560% 00后红色旅游订单量同比涨80%
  11. mysql存储过程核销_mysql存储过程
  12. SAP License:一个资深SAP顾问的2021年项目总结
  13. Java:使用 Java 开发的一个异常处理框架
  14. 路由器NAT负载均衡实验过程详解
  15. vi编辑器编辑超大文件。
  16. PIN码-使用与解决办法
  17. 一招教你电脑微信双开
  18. 分布式部署 Zabbix 监控平台
  19. matplotlib 画双轴子图无法显示 x-轴 坐标轴标签
  20. java根据提供word模板导出word文档

热门文章

  1. 苹果电脑运行3dsmax的三种方法,你知道吗?
  2. [2022软工第三次作业]结对编程项目——最长英语单词链
  3. 移动端实时音视频直播技术中推流和传输详解
  4. 视频监控在安防市场比重大 技术发展引出商机
  5. 多元化邮件插图成鲜活生命力,助力邮件营销转化!
  6. 三星高价卖苹果iPhone X OLED屏幕, 苹果或寻新队友
  7. IPO并不遥远,飞哥IPERi模型助你打开互联网创业创新成功密码
  8. 一个计算机程序员高手的成长 [转]
  9. 牛客--2019网易--扭蛋机
  10. P、NP、NPC问题