0x01 NBNS和WDAP
NBNS:
在 Windows 系统中的另外一种名称就是 NetBIOS 名称,准确的说 NetBIOS 名称并非是一种名字系统,而是 Windows 操作系统网络的一个编程接口,允许主机之间使用 NetBIOS 名称进行通信,通信过程是建立在 NetBIOS 协议之上的。在安装完 Windows 系统后系统会默认使用计算机的名字做为当前主机的 NetBIOS 名称。它的最大长度为 16 个字符,其中最后一位是不可配置的,用于指定 NetBIOS 的服务类型。如果计算机名称不足 15 位则使用空格补全到 15 位,反之,如果计算机名称超过 15 位 则会截取前 15 位。常见的 NetBIOS 后缀有 0x20(文件和打印服务)、0x00(工作站服务)、0x03(报信者服务)等。
使用nbtstat -n命令查看本机的 NetBIOS 名称。
使用nbtstat -A ipaddress命令查看指定 IP 主机的 NetBIOS 名称。
Windows做DNS解析时有如下步骤:
1.local hosts file - C:WindowsSystem32driversetchosts
2.DNS
3.NBNS
那么当访问者输入一个不存在的域名,而LOCAL HOST FILE、DNS服务器均无法给出解析时,我们可爱又人性化的Windows就会发送NBNS请求进行查询。
如图所示,我们可以看到NBNS请求的地址是172.16.0.255,是一个广播包。
即任何人可以回复并重定向流量。
WPAD:
WPAD(Web Proxy Auto-Discovery Protocol) 是 Web 代理自动发现协议的简称,该协议的功能是可以使局域网中用户的浏览器可以自动发现内网中的代理服务器,并使用已发现的代理服务器连接互联网或者企业内网。WPAD 支持所有主流的浏览器,从 IE 5.0 开始就已经支持了代理服务器自动发现/切换的功能,不过苹果公司考虑到 WPAD 的安全风险,在包括 OSX 10.10 及之后版本的操作系统中的 Safari 浏览器将不再支持 PAC 文件的解析。
WPAD 工作原理
当系统开启了代理自动发现功能后,用户使用浏览器上网时,浏览器就会在当前局域网中自动查找代理服务器,如果找到了代理服务器,则会从代理服务器中下载一个名为 PAC(Proxy Auto-Config) 的配置文件。该文件中定义了用户在访问一个 URL 时所应该使用的代理服务器。浏览器会下载并解析该文件,并将相应的代理服务器设置到用户的浏览器中。
讲到现在大家一定思路清晰了:当下我们的目的是回复NBNS响应,从而转移流量进行欺骗。
0x02 攻击准备
凭借欺骗NBNS响应的能力,我们可以针对我们的NBNS欺骗攻击的127.0.0.1。我们淹没在目标机器(我们自己的机器)与NBNS响应数据包的主机”WPAD”,或”WPAD.DOMAIN.TLD”间,我们设定WPAD主机的IP地址为127.0.0.1。默认配置如下
同时,我们在127.0.0.1上运行一个HTTP服务器本地。当它接收到一个请求”HTTP://wpad/wpad.dat“,它类似如下回应:
这将导致目标上的所有HTTP流量将通过我们的服务器上运行127.0.0.1重定向。
有趣的是,当即使是低权限的用户进行这种攻击也会影响到所有用户。这包括管理员和系统帐户。
0x03 HTTP – > SMB NTLM中继
与所有的HTTP流量,现在流经我们控制的服务器上,我们可以用来要求NTLM身份验证!
在Potato的exploit中,所有的请求都以302重定向到的”http://localhost/GETHASHESxxxxx“,其中xxxxx是一些独特的标识符。请求”http://localhost/GETHASHESxxxxx“会401响应要求NTLM身份验证。
在NTLM凭据传递到本地的SMB监听器,会创建一个新的系统服务,运行你定义的命令,此命令将以”NT AUTHORITY SYSTEM”权限运行。
0x04 使用漏洞
1.Windows 7
https://www.youtube.com/watch?v=Nd6f5P3LSNM
Potato.exe -ip <local ip> -cmd <command to run> -disable_exhaust true
这将执行NBNS欺骗攻击,欺骗”WPAD”解析到127.0.0.1,然后检查Windows Defender更新。
2.Windows Server 2008
https://www.youtube.com/watch?v=z_IGPWgL5SY
Potato.exe -ip <local ip> -cmd <command to run> -disable_exhaust true -disable_defender true --spoof_host WPAD.EMC.LOCAL
比较好使
3.Windows 8/10, Server 201
https://www.youtube.com/watch?v=Kan58VeYpb8
Potato.exe -ip <local ip> -cmd <cmd to run> -disable_exhaust true -disable_defender true
当然msf中也内置了nbns攻击的模块
Nbns应答模块:
设置相关参数,运行 这里的ip为你响应恶意nbns请求的ip,这里为我的kali的ip。
SMB中继模块:
HTTP模块:
此时目标访问一个不存在域名或者一个不存在的smb通信主机名时,会向NBNS请求解析名称
我们就可以捕获到hash凭据, 此演示中密码为空。
相关拓展地址
https://github.com/foxglovesec/Potato
https://github.com/foxglovesec/RottenPotato