基于網(wǎng)絡(luò)代理自動(dòng)發(fā)現(xiàn)協(xié)議WPAD的中間人攻擊
0x00 前言
學(xué)習(xí)@Her0in《Windows名稱解析機(jī)制探究及缺陷利用》很受啟發(fā),于是對(duì)其實(shí)際利用做了進(jìn)一步研究,發(fā)現(xiàn)基于WPAD的中間人攻擊很是有趣,現(xiàn)將收獲分享給大家。

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

2、設(shè)置WPAD服務(wù)器
use auxiliary/server/wpad
set proxy 192.168.16.245
run
如圖

3、被攻擊用戶發(fā)起查詢
構(gòu)造廣播NBNS查詢
需要使當(dāng)前dbcp和dns服務(wù)器均無(wú)法提供的PAC文件位置
4、響應(yīng)被攻擊機(jī)用戶的廣播NBNS查詢
如圖

攻擊主機(jī)響應(yīng)廣播NBNS查詢并指定PAC文件位置
被攻擊主機(jī)訪問(wèn)指定的PAC位置請(qǐng)求下載
wireshark抓包如圖
廣播NBNS查詢包,如圖
NBNS查詢響應(yīng)包,如圖
被攻擊主機(jī)請(qǐng)求PAC文件位置,如圖
攻擊主機(jī)回復(fù)PAC文件信息,如圖
Tips:
虛擬機(jī)環(huán)境下使用wireshark只抓本地?cái)?shù)據(jù)包,需要取消混雜模式
如圖
5、被攻擊機(jī)用戶使用偽造的代理配置上網(wǎng)
可在偽造的代理上面抓取被攻擊用戶的數(shù)據(jù)包,中間人攻擊成功。#p#
0x05 WPAD實(shí)際利用
基于WPAD的中間人攻擊有多大威力,超級(jí)電腦病毒Flame給了我們很好的示范。
其工作模式如下:
1、SNACK: NBNS spoofing
監(jiān)聽(tīng)當(dāng)前網(wǎng)絡(luò),如果收到了NBNS查詢包含WPAD字符,立即偽造NBNS響應(yīng)
2、MUNCH: Spoofing proxy detection and Windows Update request
提供WPAD服務(wù),用來(lái)更改被攻擊主機(jī)的WPAD設(shè)置
當(dāng)其成功作為被攻擊主機(jī)的代理后,會(huì)劫持特定的Windows更新請(qǐng)求,提供帶有后門的windows更新文件給用戶下載
如圖為測(cè)試環(huán)境下抓到的windows更新請(qǐng)求包
Burp suite抓到的數(shù)據(jù)包:
Flame最終成功實(shí)現(xiàn)了基于WPAD實(shí)施中間人攻擊,篡改windows更新數(shù)據(jù),最終感染了內(nèi)網(wǎng)其他主機(jī)。
0x06 防護(hù)
可通過(guò)如下設(shè)置關(guān)閉WPAD應(yīng)用來(lái)避免此種攻擊:
Internet Explorer-Internet Options-Connections-LAN settings
取消選中Automatically detect settings
如圖
如果已被NBNS中間人攻擊,可通過(guò)查看netbios緩存檢查
nbtstat -c
如圖
0x07 補(bǔ)充
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可以說(shuō)是內(nèi)網(wǎng)中間人攻擊神器,很值得嘗試
簡(jiǎn)單使用命令如下:
git clone https://github.com/SpiderLabs/Responder.git
cd Responder/
python Responder.py -I eth0 -i 192.168.16.245 -b
當(dāng)被攻擊主機(jī)訪問(wèn)主機(jī)共享時(shí)就能抓到其hash,如圖
0x08 小結(jié)
雖然WPAD不是很新的技術(shù),但是對(duì)其了解的都不太多,在內(nèi)網(wǎng)滲透中應(yīng)該被重視。
參考資料:
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/