基于網絡代理自動發現協議WPAD的中間人攻擊
0x00 前言
學習@Her0in《Windows名稱解析機制探究及缺陷利用》很受啟發,于是對其實際利用做了進一步研究,發現基于WPAD的中間人攻擊很是有趣,現將收獲分享給大家。

0x01 簡介
WPAD:
全稱網絡代理自動發現協議(Web Proxy Autodiscovery Protocol),通過讓瀏覽器自動發現代理服務器,定位代理配置文件,下載編譯并運行,最終自動使用代理訪問網絡。
PAC:
全稱代理自動配置文件(Proxy Auto-Config),定義了瀏覽器和其他用戶代理如何自動選擇適當的代理服務器來訪問一個URL。
要使用 PAC,我們應當在一個網頁服務器上發布一個PAC文件,并且通過在瀏覽器的代理鏈接設置頁面輸入這個PAC文件的URL或者通過使用WPAD協議告知用戶代理去使用這個文件。
WPAD標準使用 wpad.dat,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';
- }
0x02 WPAD原理
如圖
用戶在訪問網頁時,首先會查詢PAC文件的位置,具體方式如下:
1、通過DHCP服務器
如圖
web瀏覽器向DHCP服務器發送DHCP INFORM查詢PAC文件位置
DHCP服務器返回DHCP ACK數據包,包含PAC文件位置
2、通過DNS查詢
web瀏覽器向DNS服務器發起 WPAD+X 的查詢
DNS服務器返回提供WPAD主機的IP地址
web瀏覽器通過該IP的80端口下載wpad.dat
3、通過NBNS查詢
Tips:
Windows 2K , XP , 2K3 只支持 DNS 和 NetBIOS
Windows Vista 之后(包括 2K8 , Win7,Win8.x,Win 10)支持DNS、NBNS、LLMNR
如果DHCP和DNS服務器均沒有響應,同時當前緩存沒有所請求的主機名,就會發起如下名稱解析:
如果當前系統支持LLMNR(Link-Local Multicast Name Resolution),先發起廣播LLMNR查詢,如果沒有響應再發起廣播NBNS查詢
如果有主機回應PAC文件位置
web瀏覽器通過該IP的80端口下載wpad.dat#p#
0x03 WPAD漏洞
對照WPAD的原理,不難發現其中存在的漏洞,如圖
如果在被攻擊用戶發起NBNS查詢時偽造NBNS響應,那么就能控制其通過偽造的代理服務器上網,達到會話劫持的目的。
0x04 WPAD漏洞測試
測試環境:
被攻擊用戶:
win7 x86
192.168.16.191
攻擊用戶:
kali linux
192.168.16.245
測試過程:
1、監聽NBNS查詢
use auxiliary/spoof/nbns/nbns_response set regex WPAD set spoofip 192.168.16.245 run
如圖

2、設置WPAD服務器
use auxiliary/server/wpad
set proxy 192.168.16.245
run
如圖

3、被攻擊用戶發起查詢
構造廣播NBNS查詢
需要使當前dbcp和dns服務器均無法提供的PAC文件位置
4、響應被攻擊機用戶的廣播NBNS查詢
如圖

攻擊主機響應廣播NBNS查詢并指定PAC文件位置
被攻擊主機訪問指定的PAC位置請求下載
wireshark抓包如圖
廣播NBNS查詢包,如圖
NBNS查詢響應包,如圖
被攻擊主機請求PAC文件位置,如圖
攻擊主機回復PAC文件信息,如圖
Tips:
虛擬機環境下使用wireshark只抓本地數據包,需要取消混雜模式
如圖
5、被攻擊機用戶使用偽造的代理配置上網
可在偽造的代理上面抓取被攻擊用戶的數據包,中間人攻擊成功。#p#
0x05 WPAD實際利用
基于WPAD的中間人攻擊有多大威力,超級電腦病毒Flame給了我們很好的示范。
其工作模式如下:
1、SNACK: NBNS spoofing
監聽當前網絡,如果收到了NBNS查詢包含WPAD字符,立即偽造NBNS響應
2、MUNCH: Spoofing proxy detection and Windows Update request
提供WPAD服務,用來更改被攻擊主機的WPAD設置
當其成功作為被攻擊主機的代理后,會劫持特定的Windows更新請求,提供帶有后門的windows更新文件給用戶下載
如圖為測試環境下抓到的windows更新請求包
Burp suite抓到的數據包:
Flame最終成功實現了基于WPAD實施中間人攻擊,篡改windows更新數據,最終感染了內網其他主機。
0x06 防護
可通過如下設置關閉WPAD應用來避免此種攻擊:
Internet Explorer-Internet Options-Connections-LAN settings
取消選中Automatically detect settings
如圖
如果已被NBNS中間人攻擊,可通過查看netbios緩存檢查
nbtstat -c
如圖
0x07 補充
Responder:
Responder is a LLMNR, NBT-NS and MDNS poisoner, with built-in HTTP/SMB/MSSQL/FTP/LDAP rogue authentication server supporting NTLMv1/NTLMv2/LMv2, Extended Security NTLMSSP and Basic HTTP authentication.
Responder可以說是內網中間人攻擊神器,很值得嘗試
簡單使用命令如下:
git clone https://github.com/SpiderLabs/Responder.git
cd Responder/
python Responder.py -I eth0 -i 192.168.16.245 -b
當被攻擊主機訪問主機共享時就能抓到其hash,如圖
0x08 小結
雖然WPAD不是很新的技術,但是對其了解的都不太多,在內網滲透中應該被重視。
參考資料:
http://drops.wooyun.org/papers/10887#comments
http://www.netresec.com/?page=Blog&month=2012-07&post=WPAD-Man-in-the-Middle
http://wenku.baidu.com/link?url=KFoXTvqgxnNR1lxM_2dHCCRlJXp0D2GXa80fI7BCjR7XSoDqv2jmLJ8WJoSaew9MFSpKmTDV9lxNF2XKhTaJ1T8rSghDrhZ71OqlQ1yqx-a
http://www.ibm.com/developerworks/cn/linux/1309_quwei_wpad/
https://securelist.com/blog/incidents/33002/flame-replication-via-windows-update-mitm-proxy-server-18/
https://github.com/SpiderLabs/Responder
https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/spoof/nbns/nbns_response.rb
https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/server/wpad.rb
https://www.trustwave.com/Resources/SpiderLabs-Blog/Responder-2-0---|||||Owning-Windows-Networks-part-3/
https://github.com/lgandx/Responder-Windows
http://www.censornet.com/pdf/WPAD-Configuration-Guide.pdf
http://findproxyforurl.com/wpad-introduction/