nbns协议_利用NetBIOS协议名称解析及WPAD进行内网渗透
nbns协议_利⽤NetBIOS协议名称解析及WPAD进⾏内⽹渗透
0x00 前⾔
WPAD 这项技术已经诞⽣了近⼗年的时间,其最⼤的优势就在于,在⼀个或多个局域⽹中,当需要为内⽹中的⽤户设置不同的代理服务器
计算机科学与技术学什么去连接互联⽹或者企业内⽹时,利⽤ WPAD 就能够灵活⽅便的进⾏配置。由于配置代理服务器的⽅式对于⽤户来说是透明的,⽆需⽤户⼿
动操作的,因此,攻击者就可以利⽤这个特点使⽤ WPAD 进⾏内⽹的渗透。
利⽤ WPAD 进⾏内⽹渗透的技术已经出现了很多年了,⼀直没有变得像 ARP Spoof 等攻击⽅式那么流⾏,可能是由于常规的内⽹渗透
中,如 Windows 域的渗透,攻击者只需拿到域控的权限即可控制域中的任何机器,因此,攻击者往往只关注如何抓到域管理员的
HASH。然⽽即使在⼯作组的渗透中,也有着⽐ WPAD 更有效的攻击⽅式。但是在攻击者“⽆(qian)计(lv)可(ji)施(qiong);)”的时候,也
陕北道情会采⽤⼀些“⾮主流”的⽅式进⾏内⽹渗透。
本⽂将会阐述 WPAD 协议的⼯作原理,实现⽅式以及在内⽹渗透中的应⽤思路,仅仅起⼀个抛砖的作⽤,希望⼤⽜们多多“引⽟”。
PS:本⽂是笔者利⽤⼯作之余的零碎时间所写,难免会有纰漏,还望各位看(da)官(niu)在评论区及时指正 or PM 我。
0x01 WPAD 简介
WPAD(Web Proxy Auto-Discovery Protocol) 是 Web 代理⾃动发现协议的简称,该协议的功能是可以使局域⽹中⽤户的浏览器可以⾃梦见自己站在高处
动发现内⽹中的代理服务器,并使⽤已发现的代理服务器连接互联⽹或者企业内⽹。WPAD ⽀持所有主流的浏览器,从 IE 5.0 开始就已经
新生儿起名⽀持了代理服务器⾃动发现/切换的功能,不过苹果公司考虑到 WPAD 的安全风险,在包括 OSX 10.10 及之后版本的操作系统中的
Safari 浏览器将不再⽀持 PAC ⽂件的解析。
WPAD ⼯作原理
当系统开启了代理⾃动发现功能后,⽤户使⽤浏览器上⽹时,浏览器就会在当前局域⽹中⾃动查代理服务器,如果到了代理服务器,则
会从代理服务器中下载⼀个名为 PAC(Proxy Auto-Config) 的配置⽂件。该⽂件中定义了⽤户在访问⼀个 URL 时所应该使⽤的代理服务
器。浏览器会下载并解析该⽂件,并将相应的代理服务器设置到⽤户的浏览器中。
PAC ⽂件
PAC(Proxy Auto-Config) 配置⽂件使⽤了 Javascript 对 URL 和代理服务器进⾏描述。通常使⽤ proxy.pac 作为⽂件名, WPAD 的规
范则使⽤ wpad.dat 作为 PAC ⽂件的⽂件名。
⼀个 PAC ⽂件⾄少定义了⼀个名为 FindProxyForURL(url, host) 的 JavaScript 函数,该函数的返回值是⼀个字符串,指定了 URL 的
访问⽅式,两个参数分别代表了要指定设置的 URL 和 该 URL 所对应的主机名。
PAC ⽂件内容⽰例如下:
function FindProxyForURL(url, host) { if (url== '/') return 'DIRECT'; if (shExpMatch(host, "*.")) return "DIRECT"; if (host== 'wooyun
本地搭建提供 WPAD 使⽤的 HTTP 代理服务器时,需要监听 80 端⼝,因为客户端浏览器默认会从 80 端⼝下载 PAC ⽂件,同时要将
PAC ⽂件的 MIME 类型设置为 application/x-ns-proxy-autoconfig 或 application/x-javascript-config,不过这不是必须要设置的。
PAC ⽂件的编码问题
FF 和 IE 只⽀持系统默认的编码类型 的 PAC ⽂件,并且不⽀持 Unicode 编码,如 UTF-8。 关于 PAC ⽂件的更多说明,可以在 这⾥ 和
这⾥到。
0x02 Windows 中的 WPAD
在 Windows 系统中,从 IE 5.0 开始就⽀持了 WPAD,并且 Windows 系统默认是开启了 WPAD 功能的。
可以在 IE浏览器的 Internet 选项 — 连接 选项卡 — 局域⽹设置 — ⾃动检测设置 中看到,系统默认是勾选此功能的。
如下图所⽰:
图 1:Windows 中 IE 浏览器的 WPAD 设置另外, Windows 系统从 IE 5.5 开始⽀持“⾃动代理结果缓存”功能,并默认开启了此功能,此功能的机制为每当客户端的浏览器连接成功 HTTP 代理服务器,都会更新 ARP 缓存,所以在客户端浏览器再次连接代理服务器也就是在再次调⽤ FindProxyForURL() 函数时,会先检查 ARP 缓存列表中,是否存在要连接的 HTTP 代理服务器地址。所以此功能的⽬的就是缩减系统获取分配对象的开销。
可以使⽤如下操作关闭此功能:
⽅法 1:修改注册表
可以使⽤下⾯的注册表项禁⽤“⾃动代理结果缓存”:
HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsCurrentVersionInternet Settings
将 EnableAutoproxyResultCache(如果不存在请⼿动创建,类型为 REG_DWORD) 设置为 0 或者 1 。
0 = 禁⽤缓存;1 = 启⽤⾃动代理缓存(这是默认设置)
⽅法 2:修改组策略设置
在组策略对象编辑器中的“⽤户配置” — “管理模板” — “Windows 组件” — “Internet Explorer”中,启⽤ “禁⽤缓存⾃动代理脚本”即可。
WinHTTP 的 WPAD ⽀持
在 Windows 系统中,有⼀个服务名为 WinHTTP Web Proxy Auto-Discovery Service,其描述信息为 “WinHTTP 实现了客户端HTTP 堆栈并向开发⼈员提供 Win32 API 和 COM ⾃动化组件以供发送 HTTP 请求和接收响应。此外,通过执⾏ Web 代理⾃动发现(WPAD)协议,WinHTTP 还提供对⾃动发现代理服务器配置的⽀持。”
PS:为了安全起见,建议禁⽤,因为⼤多数的情况下不会⽤到。
0x03 WPAD 实现⽅式
WPAD 实现的⽅式有两种,DHCP 和 DNS,具体内容如下。
使⽤ DHCP 服务器配置 WPAD
DHCP 是 Dynamic Host Configuration Protocol 的缩写即 动态主机配置协议,它是⼀个⽤于局域⽹的⽹络协议,处于 OSI 的应⽤层,所使⽤的传输协议为 UDP。DHCP 的主要功能是动态分配,当然不
仅仅是 IP 地址,也包括⼀些其他信息,如⼦⽹掩码等,也包括本⽂所讲的 WPAD,这些额外的信息都是在 DHCP 协议中的 “DHCP options” 字段中设置的。
DHCP 的⼯作流程有 4 个步骤:
图 2:DHCP ⼯作流程上图即为客户端与 DHCP 服务器进⾏交互的过程,其中,前两个流程主要是通过客户端发送⼴播包,之后 DHCP 服务器进⾏相应与客户端进⾏单播通讯。后⾯的两个流程即为客户端从 DHCP 服务器获取 IP 地址的过程。当客户端已经成功获取到了 IP 地址后同时该地址在客户端重新登录到⽹络前并未被其他主机占⽤,那么将不会再执⾏前两个流程。关于 DHCP 协议的具体内容不是本⽂的重点内容,不再详述。
当使⽤ DHCP 服务器配置 WPAD 时, DHCP 协议将会有所改变,具体的改变可以在 RFC 2131 中看到,增加了 DHCPINFORM 消息,此消息⽤于客户端请求本地配置参数,所以客户端在请求 WPAD 主机时就会发送 DHCPINFORM 请求消息,之后 DHCP 服务器会应答 DHCPACK 确认消息,此消息中的 DHCP Options 字段⾥就包含 DHCP 的 252 选项即 WPAD 代理服务器的 PAC ⽂件地址。
DHCP 服务器响应的 DHCPACK 数据包对应的 DHCP 结构:
图 3: DHCPACK 消息结构关于 DHCP Options 的其他定义可以查看 DHCP 的 RFC 1531 ⽂档
在⽬前的⼤多数内⽹中已经不再使⽤ DHCP 服务器来进⾏对客户端的 WPAD 的配置了,⽽是采⽤了较为简单的⽅式如 DNS 服务器。
利⽤ DNS 配置 WPAD
利⽤ DNS 配置 WPAD 的⽅式本质上还是利⽤了 Windows 系统的名称解析机制。
利⽤ DNS 配置 WPAD 的原理如下:
客户端主机向 DNS 服务器发起了 WPAD+X 的查询请求。如果客户端主机是处于域环境下时,发起的 WPAD+X 的查询请求为“WPAD.当前域的域名”。DNS 服务器对 WPAD 主机的名称进⾏解析返回 WPAD 主机的 IP 地址,客户端主机通过 WPAD 主机的 IP 的 80 端⼝下载并解析 PAC ⽂件。
利⽤ DNS 进⾏ WPAD 的配置,⽹络管理员只需要在 DNS 服务器中添加 WPAD 主机的解析记录即可。
PS:在⼯作组环境中,客户端主机执⾏ WPAD 功能时,就会遵循 Windows 系统的名称解析顺序,查询的名称均为 “WPAD”,如果 OS 版本为 Vista 之后的(包括 Vista)顺序为:DNS => LLMNR => NBNS,反之则为 DNS => NBNS。
0x04 利⽤ WPAD 进⾏内⽹渗透
前⾯的内容已经说明了 WPAD 的⼯作原理,实现⽅式和 WPAD 在 Windows 系统中的相关内容。接下来就是本⽂要重点阐述的内容,如何
利⽤ WPAD 进⾏内⽹渗透。
调动申请书范文上⾯已经说明,在实际渗透中,⼤多数情况下遇到的内⽹都不再使⽤ DHCP 进⾏ WPAD 的配置,⽽利⽤ DNS 配置 WPAD 或者是内⽹本⾝没有对 WPAD 的配置进⾏设置的情况下,都会默认遵循 Windows 系统的名称解析顺序,因此,可以利⽤ Windows 系统的名称解析顺序的缺陷进⾏ WPAD 的“恶意”配置,从⽽进⾏内⽹的渗透。
关于 Windows 系统的名称解析顺序 及利⽤ Windows 系统的名称解析缺陷渗透的思路可以从我的下⾯两篇⽂章中到。
Windows 名称解析机制探究及缺陷利⽤(下⽂简称 ⽂1)
利⽤ LLMNR 名称解析缺陷劫持内⽹指定主机会话(下⽂简称 ⽂2)
利⽤ NetBIOS 名称解析进⾏基于 WPAD 的中间⼈攻击
在 ⽂2 中已经阐述了 如何利⽤ LLMNR 名称解析进⾏内⽹渗透的思路,并给出了相应的利⽤代码。所以本⽂将不再赘述“如何利⽤LLLMNR 名称解析缺陷进⾏基于 WPAD 的中间⼈攻击”。
五一祝福
NetBIOS 协议名称解析过程
⼀张图看明⽩ NetBIOS 名称解析过程,以受害者访问局域⽹中的 WEBSERVER 为例(受害者主机的 NetBIOS缓存中⽆ WEBSERVER):
图 4:NetBIOS 名称解析过程NetBIOS 协议分析
使⽤ Wireshark 可以快速抓取到 NetBIOS 协议名称查询的数据包,如下图:
图 5:NetBIOS 名称查询数据包格式NetBIOS 的协议结构与 LLMNR 的基本⼀致。但是与 LLMNR 还是有所不同,其中最明显的⼀点为NetBIOS 协议中的主机名称是加密的,通过查阅相关资料,如 dpkt,Wireshark等,可以到其加密和解密的源码:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。