学习笔记-协议

协议


LLMNR

链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,IPv4 和 IPv6 的主机可以通过此协议对同一本地链路上的主机执行名称解析。Windows 操作系统从 Windows Vista 开始就内嵌支持,Linux 系统也通过 systemd 实现了此协议。它通过 UDP 5355 端口进行通信,且 LLMNR 支持 IPV6。

LMNR 进行名称解析的过程为:

  1. 检查本地 NetBIOS 缓存
  2. 如果缓存中没有则会像当前子网域发送广播
  3. 当前子网域的其他主机收到并检查广播包,如果没有主机响应则请求失败

NBNS

网络基本输入 / 输出系统 (NetBIOS) 名称服务器 (NBNS) 协议是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法。通过 UDP 137 端口进行通信,但 NBNS 不支持 IPV6。

NetBIOS 协议进行名称解析的过程如下:

  1. 检查本地 NetBIOS 缓存
  2. 如果缓存中没有请求的名称且已配置了 WINS 服务器,接下来则会向 WINS 服务器发出请求
  3. 如果没有配置 WINS 服务器或 WINS 服务器无响应则会向当前子网域发送广播
  4. 如果发送广播后无任何主机响应则会读取本地的 lmhosts 文件
  5. lmhosts 文件位于 C:\Windows\System32\drivers\etc \ 目录中。

mdns

在计算机网络中,多播 DNS( mDNS )协议将主机名解析为不包含本地名称服务器的小型网络中的 IP 地址。它是一种零配置服务,使用与单播域名系统(DNS)基本相同的编程接口,数据包格式和操作语义。虽然 Stuart Cheshire 将 mDNS 设计为独立协议,但它可以与标准 DNS 服务器协同工作。它通过 UDP 5353 端口进行通信,且 MDNS 也支持 IPV6。

目前仅有 windows 10 支持 mdns

经测试发现,禁用了 llmnr 后 mdns 也会被禁用。


SMB

SMB 有哪些版本

  • SMB 1.0 (or SMB1) - The version used in Windows 2000, Windows XP, Windows Server 2003 and Windows Server 2003 R2
  • SMB 2.0 (or SMB2) - The version used in Windows Vista (SP1 or later) and Windows Server 2008
  • SMB 2.1 (or SMB2.1) - The version used in Windows 7 and Windows Server 2008 R2
  • SMB 3.0 (or SMB3) - The version used in Windows 8 and Windows Server 2012

从 Windows 95 开始,Microsoft Windows 操作系统支持 SMB 协议 ,但是由于 SMB 由于有漏洞。所以在 Windows Vista 之后,Windows 开始使用 SMB2 协议。也就是自 Vista 之后的 WIN7、Windows Server 2008 等都是用的 SMB2 协议。而 Windows XP 和 Windows Server2003 及其之前的机器都是用的 SMB1.0 协议。

SMB 协议支持直接运行在 TCP 上或封装运行在 NetBIOS 协议上,Psexec 的 SMB 协议就是直接运行在 TCP 上,而 net use 命令的抓包就是运行在 NetBIOS 协议。

在 WindowsNT 中,SMB 除了基于 NBT 实现,还可以直接通过 445 端口实现。

对于 WinNT 客户端(发起端)来说:

  • 如果在允许 NBT 的情况下连接服务器时,客户端会同时尝试访问 139 和 445 端口,如果 445 端口有响应,那么就发送 RST 包给 139 端口断开连接,用 455 端口进行会话,当 445 端口无响应时,才使用 139 端口,如果两个端口都没有响应,则会话失败;
  • 如果在禁止 NBT 的情况下连接服务器时,那么客户端只会尝试访问 445 端口,如果 445 端口无响应,那么会话失败。

对于 winNT 服务器端来说:

  • 如果允许 NBT, 那么 UDP 端口 137、138,TCP 端口 139,445 将开放;
  • 如果禁止 NBT,那么只有 445 端口开放。

TCP 139、445 端口

139 和 445 端口的通信过程是通过 SMB(服务器信息块)协议实现的。即根据 DNS 服务器中的名字列表信息,寻找需要通信的对象。如果顺利地得到对象的 IP 地址,就可以访问共享资源 。Windows 2000 以前版本的 Windows 使用 NetBIOS 协议解决各计算机名的问题。通过向 WINS 服务器发送通信对象的 NetBIOS 名,取得 IP 地址。而 Windows2000 以后的版本所采用的 CIFS 则利用 DNS 解决计算机的命名问题。

在 SMB 通信中,首先要取得通信对象的 IP 地址,然后向通信对象发出开始通信的请求。如果对方充许进行通信,就会确立会话层(Session)。并使用它向对方发送用户名和密码信息,进行认证。如果认证成功,就可以访问对方的共享文件。在这些一连串的通信中使用的就是 139 端口。

除此之外,Windows 2000 以后的系统还使用 445 端口。文件共享功能本身与 139 端口相同,但该端口使用的是与 SMB 不同的协议。这就是在 Windows 2000 中最新使用的 CIFS(通用因特网文件系统)协议。CIFS 和 SMB 解决计算机名的方法不同。SMB 使用 NetBIOS 和 WINS 解决计算机名,而 CIFS 则使用 DNS。当 139 和 445 端口同时打开的话,网络文件共享优先使用 445 端口。当 445 端口关闭时,网络文件共享使用 139 端口。但是自从 win10 开始,文件共享只使用 445 端口,445 端口关闭的话,则不能使用文件共享服务。因此,在文件服务器和打印服务器使用 Windows 的公司内部网络环境中,就无法关闭 139 和 445 端口。

在默认设置下,Windows 会开放提供文件共享服务的 TCP 139 号端口。一旦文件共享服务启动,系统就会进入等待状态。而共享资源则可以利用 net 命令轻松地进行分配。尽管 C 盘如果没有管理员权限就无法共享,但如果不经意地将 Guest 帐号设置为有效以后,攻击者就能够访问 C 盘,非常轻松地破坏硬盘。如果客户端使用 Windows 2000 以上系统构成的网络,自身不公开文件,就可以关闭这两个端口。这是因为如前所述,该网络只用 445 端口就能够进行文件共享。由于在解决计算机名过程中使用 DNS,所以也可以关闭 137 和 138 端口。而在很多情况下,文件共享和打印机共享在普通的业务中必须使用 139 端口通过 SMB 协议进行通信,因此就无法关闭 139 端口。另外,浏览时还需要 137~139 端口。


Source & Reference

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

posted @ 2022-11-05 14:55  syscallwww  阅读(245)  评论(0编辑  收藏  举报