一.LLMNR协议
1.LLMNR简介
链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,使用此协议可以解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6,是仅次于DNS解析的名称解析协议。
2.LLMNR解析过程
LLMNR解析前提是本地hosts和DNS解析失败时,会使用LLMNR解析。LLMNR解析过程如图1-1所示。
1)主机在本地NetBIOS缓存名称中进行查询。
2)如果缓存名称中没有查询到,则以此向配置的主备DNS服务器发送解析请求。
3)如果主备DNS服务器没有回复,则向当前子网域发送多播,获取对应的IP地址。
4)本地子网域的其他主机收到并检查多播包,如果没有响应则请求失败。
从以上工作过程可以明白LLMNR是以多播形式进行查询的,类似于ARP通过MAC寻找IP地址。这样就存在一个欺骗攻击问题。
绘图2
3.LLMNR欺骗攻击
假设用户访问一个域名xxx,如图1-2所示,在hosts文件和DNS解析失败,此时会通过LLMNR协议进行广播请求,攻击者利用该广播请求时间向请求用户回复响应IP地址,这时xxx映射的IP就是攻击者IP,当用户访问xxx域名就会解析到攻击IP,进而攻击者便可以拿到net-ntlm hash。
绘图2_backup_311867
4.LLMNR防御措施
1)点击开始——运行——输入命令——打开本地组策略管理器,如图1-3所示。
gpedit.msc
图1-3 打开本地组策略管理器
2)打开计算机配置——管理模版——网络——DNS客户端,如图1-4所示。
图1-4 打开配置DNS客户端
3)双击打开“关闭多播名称解析”,如图1-5所示。
图1-5 打开“关闭多播名称解析”
4)将关闭多播名称解析中的状态改为“已禁用”,如图1-6所示。
图1-6 将关闭多播名称解析中的状态改为“已禁用”
二.NETBIOS协议
1. NETBIOS简介
NetBIOS是Network Basic Input/Output System(网上基本输入输出系统)的缩写,它是一种接入服务网络的接口标准,主机系统通过WINS服务、广播及Lmhost文件等多种模式,把NetBIOS名解析成对应的IP地址,实现信息通讯。因其占用资源小、传输快的特点,广泛应用于局域网内部消息通信及资源的共享。
2.NETBIOS服务类型
NetBIOS支持面向连接(TCP)和无连接(UDP)通信。它提供三个分开的服务:命名(NetBIOS names)、会话(NetBIOS sessions)、数据报(NetBIOS datagrams)。NetBIOS names为其他两个服务的基础。
NetBIOS服务类型在TCP/IP上的基本架构如图1-7所示。
IMG_295
下面我们针对三种常见的NetBIOS服务类型进行详细说明,如表1-1所示。
表1-1 三种常见的NetBIOS报文类型
服务类型 | 端口 | 具体描述 |
---|---|---|
Net BIOS names(NetBIOS名称服务) | UDP 137 | 鉴别资源。程序、主机都有独特的NetBIOS名称 |
Net BIOS datagrams(Net BIOS数据报) | UDP 138 | 无连接的将数据报发送到特定的地点、组、整个局域网。 |
Net BIOS sessions(Net BIOS会话服务) | TCP 139 | 提供给面向连接,可靠的,完全双重的信息服务。 |
3. NETBIOS解析过程
NetBIOS 协议进行名称解析的过程如下。
1)首先主机先检查本地NetBIOS缓存。
2)如果缓存中没有请求的名称,但是配置类WINS服务器,则向WINS服务器发送请求。
3)如果没有配置WINS服务器或WINS服务器无响应时,则和LLMNR一样向当前子网域发送广播。
4)如果子网域其他主机无响应,则读取本地的lmhosts(C:\Windows\System32\drivers\etc\)文件。
NetBIOS协议是发送UDP广播包进行解析,如果不配置WINS服务器,则和LLMNR一样会有欺骗攻击问题。
4. NETBIOS防御措施
1)输入命令ncpa.cpl,打开网络连接,如图1-33所示。
图1-8 输入命令ncpa.cpl打开网络连接
2)通过“本地连接——属性—Internet协议版本4——属性——高级”来配置,如图1-9、图1-10、图1-11所示。
图1-9 打开网络连接属性
图1-10 配置TCP/IPV4
图1-11 配置IP地址
3)在WINS标签栏的NetBIOS设置中禁用NetBIOS,如图1-12所示。
图1-12 在WINS标签栏中的NetBIOS设置中禁用NetBIOS
三.WPAD协议
1.Windows WPAD 简介
WPAD全称Web Proxy Auto-Discovery Protocol,也就是WEB代理自动发现协议(这里的代理就是我们在渗透中常用BURP的时候修改的代理设置)。它的作用是让局域网浏览器自动发现内网中的代理服务器,并且自动设置成该代理进行连接企业内网或者互联网。若系统开启了WPAD,那么主机就会在当前连接的局域网中去寻找代理服务器,找到之后会在代理服务器中下载PAC(Proxy Auto-Config)的配置文件(其实我们在日常中经常能看见当我们使用SSR的时候就会看见PAC自动模式),这个PAC文件会定义用户在访问什么地址的时候,使用什么代理进行访问,举一个常见易懂的例子,有些公司会对访问谷歌浏览器有一定的需求,那么他们就会搭建一个代理服务器,里面的PAC文件就会配置当访问谷歌浏览器的时候web代理自动使用到那个代理服务器上,同时浏览器将下载并解析该文件,将相应的代理服务器设置到浏览器中。
2.WPAD实现方式
我们前面说过主机会在当前连接的局域网中自动寻找代理服务器,它的实现方式主要分为两种。
(1)DHCP
在DHCP服务器中,DHCP服务器的252选项是被当作查询或者注册使用的指针,我们可以在DHCP服务器中添加一个用于查找WPAD主机的252项,内容是部署在WPAD主机上的PAC文件的URL,当客户端Web浏览器要访问某个地址时,Web浏览器会向DHCP服务器发送DHCP INFORM数据包来查询PAC文件的位置,DHCP服务器收到请求以后会返回DHCP ACK数据包进行响应,其中包含了选项和配置列表,在这些返回选项中的252选项就是代理自动配置文件的位置,Web浏览器就可以执行下载PAC文件请求。如图1-1所示,这是以DHCP的方式获取PAC示意图。
IMG_310
目前大多数内网中已经不再使用DHCP服务器对客户端的WPAD进行配置,而是逐渐采用较为简单的DNS服务器方式。
(2)DNS
第二种是目前使用最广泛的方式,通过DNS方式实现WPAD的原理是:先由Web浏览器向DNS服务器发起WPAD+X查询,DNS服务器接收到查询请求后返回提供WPAD主机的IP地址,Web浏览器通过该IP的80端口下载wpad.dat(浏览器配置用文件)和wspad.dat(防火墙配置用文件)以实现自动配置。例如:用户的计算机网络名称为test.xx.example.com,浏览器将依次尝试下列URL,以期成功在客户端的域中找到一个代理配置文件。如图1-2所示。
IMG_311
3.PAC文件内容
PAC文件最主要的作用是可以控制浏览器如何处理使用HTTP/HTTPS的流量,其实在每个PAC文件中都会包含一个FindProxyForURL函数,用来定义Web浏览器是直接将流量发送到Internet,还是将流量发送到代理服务器的规则,以下是PAC文件的具体配置内容。
代码语言:bash
复制
function FindProxyForURL(url, host) { if (shExpMatch(host, "*.example.com")){return "DIRECT";}if (isInNet(host, "10.0.0.0", "255.255.248.0")){return "PROXY fastproxy.example.com:8080";}return "PROXY proxy.example.com:8080; DIRECT";
}
1)shExpMatch将尝试将主机名或URL与指定的shell表达式匹配,如果匹配则返回true。
2)isInNet 此函数判断主机名的IP地址,如果在指定的子网内则返回true。如果传递了主机名,该函数会将主机名解析为IP地址。
代码语言:bash
复制
if (shExpMatch(host, "*.example.com")){return "DIRECT";}
3)如果在host中匹配到了.example.com,就会返回true,DIRECT的意思是直连,那么这句话就是:如果访问了.example.com的URL那么就会直接连接,不走代理。
代码语言:bash
复制
if (isInNet(host, "10.0.0.0", "255.255.248.0")){return "PROXY fastproxy.example.com:8080";}
4)如果host在指定的IP范围内,那么就会通过代理fastproxy.example.com:8080进行访问。
作者:一只特立独行的兔先生
原文:Windows安全认证机制之Windows常见协议-腾讯云开发者社区-腾讯云