基于USB网卡适配器劫持DHCP Server嗅探Windows NTLM Hash密码

catalogue

1. DHCP、WPAD工作过程
2. python Responder
3. USB host/client adapter(USB Armory): 包含DHCP Server
4. USB Ethernet Adapter(Ethernet Shield)
5. NTLM Authentication Protocol and Security Support Provider
6. 实验过程

 

1. DHCP、WPAD工作过程

WPAD 通过让浏览器自动发现代理服务器,使代理服务器对用户来说是透明的,进而轻松访问互联网。WPAD 可以借助 DNS 服务器或 DHCP 服务器来查询代理自动配置(PAC)文件的位置

0x1: 引言

代理服务器大多被用来连接 INTERNET(国际互联网)和 INTRANET(企业内部网)。在多个局域网中需设置不同的代理服务器参数来使浏览器访问网络。在微软 Internet Explorer ( IE )5.0 以上版本中的功能中已经具备了自动切换代理服务器的功能。网络管理员需要事先部署代理服务器配置文件,然而用户方的设置却很简单
在这一功能中使用了被称为"WPAD"(Web Proxy Auto-Discovery protocol)的协议

1. 浏览器具有读入并解析代理服务器的配置文件,并将其配置信息设置到浏览器中的功能。配置文件是使用 JavaScript 描述的,通常具有".js"".jvs"".pac"(proxy auto-configuration)等扩展名的文件
2. 自动代理检测由系统确定,Web代理服务器代表客户端发送请求(中间人)
3. 自动代理检测启用时,系统会尝试定位到代理发送请求后返回的代理配置文件位置。若查找到代理配置文件,那么再使用 Web 代理服务器实例得到代理信息、数据请求或响应信息时,在本地计算机上进行下载,编译并运行 
4. 被部署的大多数配置文件的格式是 Proxy auto-config(PAC)。最初,PAC 是由 Netscape 在 1996 年为 Netscape Navigator 2.0 设计的。WPAD 协议草案由 Inktomi、微软、RealNetworks、Sun Microsystems 几个公司共同提出。WPAD 可支持所有主流浏览器,首次存在于 Internet Explorer 5.05. WPAD 对代理服务器的透明处理使得管理员不再需要去每台客户机上设置代理服务器参数了(只需要借助DHCP把所有机器都配置为同一个代理服务器)。自动检测受动态主机配置协议 (DHCP) 和域名系统 (DNS) 的支持,浏览器通过 DHCP 和 DNS 的查询来搜索 PAC 文件的位置 

0x2: Proxy Auto-Config(PAC)文件

代理自动配置(PAC)文件定义了浏览器和其他用户代理如何自动选择适当的代理服务器来访问一个 URL。要使用 PAC,我们应当在一个网页服务器上发布一个 PAC 文件,并且通过在浏览器的代理链接设置页面输入这个 PAC 文件的 URL 或者通过使用 WPAD 协议告知用户代理去使用这个文件。
一个 PAC 文件是一个至少定义了一个 JavaScript 函数的文本文件(按照惯例,这个文件名字一般是 proxy.pac。 WPAD 标准使用 wpad.dat)。该函数 FindProxyForURL(url, host)有 2 个参数

url 是一个对象的 URL
host 是一个由这个 URL 所衍生的主机名

一个非常简单的 PAC 文件内容如下

function FindProxyForURL(url, host) {
   if (url== 'http://www.baidu.com/') return 'DIRECT';
   if (host== 'twitter.com') return 'SOCKS 127.0.0.10:7070';
   if (dnsResolve(host) == '10.0.0.100') return 'PROXY 127.0.0.1:8086;DIRECT';
   return 'DIRECT';
}

0x3: DHCP的报文格式

1. OP: 消息操作代码
    1) 引导请求(1=BOOTREQUEST)
    2) 引导答复(2=BOOTREPLY)
2. Htype: 硬件地址类别
    1) ethernet 为 1
3. Hlen: 硬件地址长度
    1) ethernet 为 6 
4. Hops
    1) 若数据包需经过 router 传送,每站加 1
    2) 若在同一网内,为 0
5. Transaction ID: 事务 ID,是个随机数,用于客户和服务器之间匹配请求和相应消息
6. Seconds: 由用户指定的时间,指开始地址获取和更新进行后的时间 
7. Flags: 从 0-15bits
    1) 最左 一 bit 为 1 时表示 server 将以广播方式传送封包给 client
    2) 其余尚未使用
8. Ciaddr: 用户 IP 地址
9. Yiaddr: 服务器分配给客户的 IP 地址
10. Siaddr: 用于 bootstrap 过程中的 IP 地址(服务器的 IP 地址)
11. Giaddr: 转发代理(网关)IP 地址
12. Chaddr: 客户机的硬件地址
13. Sname: 可选 server 的名称,以 0x00 结尾
14. File: 启动文件名
15. Options: 厂商标识,可选的参数字段。此参数是 WPAD 实现过程中的关键参数,即相关了 PAC 文件的 URL 

0x4: WPAD的原理

1. DHCP 的自动检测

通过 DHCP 服务器,管理员可以集中指定全局 TCP/IP 参数和子网特定的 TCP/IP 参数,并可使用保留地址定义客户端的参数。如果客户端计算机在子网之间发生了移动,则在启动该计算机时,会自动重新配置 TCP/IP。通过 DHCP 服务器部署 WPAD 的原理如下

1. 首先确保 DHCP 服务器有效,然后为每个包含客户的子网建立了作用域
2. DHCP 服务器中的 252 选项通常被当作查询或注册用的指针,我们可以通过 252 项发现打印机、时间服务器、WPAD 主机以及其他的网络服务器
3. 在 DHCP 服务器中添加一个用于查找 WPAD 主机的 252 项,252 项是一个字符串值,内容是部署在 WPAD 主机上 PAC 文件的 URL。为适当的作用域配置 252 项,就算只有一个作用域 
4. 因此 DHCP 客户机便可获得 PAC 文件的 URL,当客户机需要对浏览器或防火墙客户端进行自动配置时,就可以下载该 PAC 文件并得到代理服务器的地址(这个下载过程请求包中会携带NTLM HASH)

用户访问 laptop01.us.division.company.com 时,web 浏览器发送 DHCP INFORM 包于 DHCP 服务器来请求配置文件的位置,DHCP ACK 为 DHCP 服务器返回的数据包,其中 252 选项即为代理自动配置文件的位置

2. DNS 的自动检测

DNS 是 TCP/IP 网络上的一组协议和服务,通过 DNS,用户可以使用分层的用户友好名称(主机)代替数字 IP 地址来搜索其他计算机。用 DNS 来实现 WPAD,原理如下

1. WPAD 工作原理是客户机向 DNS 服务器发起 WPAD+X 的查询,客户机向 DNS 发起的 WPAD 查询的后缀是根据 WPAD 主机所处的环境决定的
    1) 如果客户机是在一个域环境下时,发起的查询便是一个"WPAD.所在域的域名"的标准域名查询,这种情况下配合 DNS 里添加 WPAD 主机的 A 或别名记录便可轻松在域环境中对 WPAD 主机的定位
    2) 如果在工作组环境下时,客户机发起的查询可能是一个标准的域名查询(如果计算机名有加域名后缀)也可能只是个没有后缀的 WPAD 查询,这时就要通过创建 DNS 私有根域查询或是通过创建单标签域的方式进行 WPAD 主机查询
2. DNS 返回提供 WPAD 主机 IP 地址
3. 客户机通过该 IP 的 80 端口去 WPAD 主机下载 WPAD.DAT(浏览器配置用文件)和 WSPAD.DAT(防火墙配置用文件)两个文件以实现自动配置 

从以上的原理分析,首先 WPAD 主机要在 80 端口提供 wpad.dat 和 wspad.dat,有了这两个文件,客户机上的浏览器或防火墙客户端才能实现自动配置。其次,DNS 服务器要创建相关记录,当客户机来查询时,将解析结果指向 WPAD 主机

0x5: WPAD 的实现

通过 DNS 服务器部署 WPAD 在域的环境下比较适宜,但在工作组环境下就需要做一些改变。通过 DHCP 服务器部署 WPAD 还是更加方便,既不限制端口,又不受客户机计算机名影响,无论是工作组还是域都能很好地工。之前的浏览器通常使用手动代理配置和代理自动配置等,而 WPAD 协议的出现更高级别地实现了自动化。使用 DHCP 来实现 WPAD 的思想较简单,是较好的解决方案

常规的DHCP服务器没有252这个配置选项,即WPAD url配置,我们需要自己实现一个DHCP服务器

Relevant Link:

http://blog.163.com/hlz_2599/blog/static/14237847420134139541993/
http://www.ibm.com/developerworks/cn/linux/1309_quwei_wpad/
http://yuelei.blog.51cto.com/202879/84047/
http://blog.csdn.net/swanabin/article/details/52065005

 

2. python Responder

0x1: Intro

Responder an LLMNR, NBT-NS and MDNS poisoner. It will answer to specific NBT-NS (NetBIOS Name Service) queries based on their name suffix. By default, the tool will only answer to File Server Service request, which is for SMB.
The concept behind this is to target our answers, and be stealthier on the network. This also helps to ensure that we don't break legitimate NBT-NS behavior. You can set the -r option via command line if you want to answer to the Workstation Service request name suffix.

0x2: Features

1. Built-in SMB Auth server(This functionality is enabled by default when the tool is launched)
    1) Supports NTLMv1, NTLMv2 hashes with Extended Security NTLMSSP by default. 
    2) Successfully tested from Windows 95 to Server 2012 RC, Samba and Mac OSX Lion. 
    3) Clear text password is supported for NT4
    4) and LM hashing downgrade when the --lm option is set. 

2. Built-in MSSQL Auth server.
In order to redirect SQL Authentication to this tool, you will need to set the option -r (NBT-NS queries for SQL Server lookup are using the Workstation Service name suffix) for systems older than windows Vista (LLMNR will be used for Vista and higher). This server supports NTLMv1, LMv2 hashes. This functionality was successfully tested on Windows SQL Server 2005 & 2008.

3. Built-in HTTP Auth server.
In order to redirect HTTP Authentication to this tool, you will need to set the option -r for Windows version older than Vista (NBT-NS queries for HTTP server lookup are sent using the Workstation Service name suffix). For Vista and higher, LLMNR will be used. This server supports NTLMv1, NTLMv2 hashes and Basic Authentication. This server was successfully tested on IE 6 to IE 10, Firefox, Chrome, Safari.
//Note: This module also works for WebDav NTLM authentication issued from Windows WebDav clients (WebClient). You can now send your custom files to a victim.

4. Built-in HTTPS Auth server.
Same as above. The folder certs/ contains 2 default keys, including a dummy private key. This is intentional, the purpose is to have Responder working out of the box. A script was added in case you need to generate your own self signed key pair.

5. Built-in LDAP Auth server.
In order to redirect LDAP Authentication to this tool, you will need to set the option -r for Windows version older than Vista (NBT-NS queries for HTTP server lookup are sent using the Workstation Service name suffix). For Vista and higher, LLMNR will be used. This server supports NTLMSSP hashes and Simple Authentication (clear text authentication). This server was successfully tested on Windows Support tool "ldp" and LdapAdmin.

6. Built-in FTP, POP3, IMAP, SMTP Auth servers.
This modules will collect clear text credentials.

7. Built-in DNS server.
This server will answer type A queries. This is really handy when it's combined with ARP spoofing.

8. Built-in WPAD Proxy Server.
This module will capture all HTTP requests from anyone launching Internet Explorer on the network if they have "Auto-detect settings" enabled. This module is highly effective. You can configure your custom PAC script in Responder.conf and inject HTML into the server's responses. See Responder.conf.

9. Browser Listener
This module allows to find the PDC in stealth mode.

10. Fingerprinting
When the option -f is used, Responder will fingerprint every host who issued an LLMNR/NBT-NS query. All capture modules still work while in fingerprint mode.

11. Icmp Redirect
python tools/Icmp-Redirect.py
 
12. Rogue DHCP
python tools/DHCP.py
//DHCP Inform Spoofing. Allows you to let the real DHCP Server issue IP addresses, and then send a DHCP Inform answer to set your IP address as a primary DNS server, and your own WPAD URL.

13. Analyze mode.
This module allows you to see NBT-NS, BROWSER, LLMNR, DNS requests on the network without poisoning any responses. Also, you can map domains, MSSQL servers, workstations passively, see if ICMP Redirects attacks are plausible on your subnet.

0x3: Hashes

All hashes are printed to stdout and dumped in an unique file John Jumbo compliant, using this format:

(MODULE_NAME)-(HASH_TYPE)-(CLIENT_IP).txt

Log files are located in the "logs/" folder. Hashes will be logged and printed only once per user per hash type, unless you are using the Verbose mode (-v).

1. Responder will logs all its activity to Responder-Session.log
2. Analyze mode will be logged to Analyze-Session.log
3. Poisoning will be logged to Poisoners-Session.log

Additionally, all captured hashed are logged into an SQLite database which you can configure in Responder.conf

0x4: Considerations

1. This tool listens on several ports: 
    1) UDP 137
    2) UDP 138
    3) UDP 53
    4) UDP/TCP 389
    5) TCP 1433
    6) TCP 80
    7) TCP 139
    8) TCP 445
    9) TCP 21
    10) TCP 3141
    11) TCP 25
    12) TCP 110
    13) TCP 587
    14) Multicast UDP 5553.
2. If you run Samba on your system, stop smbd and nmbd and all other services listening on these ports.
3. For Ubuntu users: Edit this file /etc/NetworkManager/NetworkManager.conf and comment the line: dns=dnsmasq. Then kill dnsmasq with this command (as root): killall dnsmasq -9
4. Any rogue server can be turned off in Responder.conf.
5. This tool is not meant to work on Windows.
6. For OSX, please note: Responder must be launched with an IP address for the -i flag (e.g. -i YOUR_IP_ADDR). There is no native support in OSX for custom interface binding. Using -i en1 will not work. Also to run Responder with the best experience, run the following as root: 
    1) launchctl unload /System/Library/LaunchDaemons/com.apple.Kerberos.kdc.plist 
    2) launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist 
    3) launchctl unload /System/Library/LaunchDaemons/com.apple.smbd.plist 
    4) launchctl unload /System/Library/LaunchDaemons/com.apple.netbiosd.plist

0x5: Usage

Typical Usage Example:

./Responder.py -I eth0 -wrf

Options:

--version             show program's version number and exit
  -h, --help            show this help message and exit
  -A, --analyze         Analyze mode. This option allows you to see NBT-NS,
                        BROWSER, LLMNR requests without responding.
  -I eth0, --interface=eth0
                        Network interface to use
  -b, --basic           Return a Basic HTTP authentication. Default: NTLM
  -r, --wredir          Enable answers for netbios wredir suffix queries.
                        Answering to wredir will likely break stuff on the
                        network. Default: False
  -d, --NBTNSdomain     Enable answers for netbios domain suffix queries.
                        Answering to domain suffixes will likely break stuff
                        on the network. Default: False
  -f, --fingerprint     This option allows you to fingerprint a host that
                        issued an NBT-NS or LLMNR query.
  -w, --wpad            Start the WPAD rogue proxy server. Default value is
                        False
  -u UPSTREAM_PROXY, --upstream-proxy=UPSTREAM_PROXY
                        Upstream HTTP proxy used by the rogue WPAD Proxy for
                        outgoing requests (format: host:port)
  -F, --ForceWpadAuth   Force NTLM/Basic authentication on wpad.dat file
                        retrieval. This may cause a login prompt. Default:
                        False
  --lm                  Force LM hashing downgrade for Windows XP/2003 and
                        earlier. Default: False
  -v, --verbose         Increase verbosity.

smbclient -L \\192.168.18.1\ipc$ -U zhenghan.zh  

被攻击机器在发起IPC连接的时候,会带上NTLM HASH