Blast's Security Lab
10 Aug 2009
目标: SWF (任意代码执行) (Shellcode部分)
版本: SWF Various Versions
来源: hxxp://securescanpc-win.com/swf.php
工具: Redoce 2.026 / OllyDebug / Sothink SWF Decomplier
语言: Flash Action Script
SAC#09004
www.sacour.cn 转载保留此行
文件信息:
文件: swf.swf
MD5 : ADEA0F58B140B67089CC0091318A7E91
大小: 10,746 字节
时间: 2009-8-10 19:32:04
文件结构:
Frame 1 - Action: Flash\\Lib (Exploited) , @Main , Asdfghkl , Boot_822757 , Intlter , Myclasses , Std.
AS:
在模块MyClass中可以轻易看到恶意代码所在,
var _loc_13:* = null as String; //首先是定义了一个String类变量
var _loc_1:* = "46575....." //ShellCode
var _loc_14:* = Capabilities.playerType; //获取播放器类型
var _loc_15:* = Capabilities.version; //获取版本
if (_loc_14 == "PlugIn") //检测类型
{if (_loc_15 == "WIN 9,0,16,0")
{ _loc_13 = _loc_3;} // 检测版本
if (_loc_15 == "WIN 9,0,28,0")
{_loc_13 = _loc_6;}
......
else{ ..... }
SHELLCODE:
习惯性的我直接拿出了Shellcode来调试,不过,OD给出的前几行代码是:
00405000 > 46 inc esi
00405001 57 push edi
00405002 53 push ebx
00405003 0825 06000030 or byte ptr [30000006], ah
00405009 0A00 or al, byte ptr [eax]
0040500B A0 000C0303 mov al, byte ptr [3030C00]
00405010 44 inc esp
00405011 1108 adc dword ptr [eax], ecx
00405013 0000 add byte ptr [eax], al
00405015 0043 02 add byte ptr [ebx+2], al
00405018 FFFF ??? ; Unknown command
明显的出了问题,重新看看AS部分,
_loc_17 = _loc_13.split("");
var _loc_19:int;
while (_loc_19 < _loc_17.length)
{_loc_18.push(Std.parseInt("0x" + _loc_17[_loc_19] + _loc_17[_loc_19 + 1]));
_loc_19 = _loc_19 + 2;}
这是什么?.parseInt又是什么?搜索了一下:
public static int parseInt(String s,int radix) throws NumberFormatException
使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 是否返回一个负值确定)。返回得到的整数值。
那么,这么看,这段应该是被16进制加密的SHELLCODE啊,为什么执行不了?继续看,
......
ldr = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.loadBytes(_loc_16);
return;
}
public function completeHandler(param1:Event) : void
{Lib.current.stage.addChild(ldr);return;}
等等,为什么会是addChild的方式……看看上面的“ShellCode”前几个字:
46 57 53
'F' 'W' 'S'
原来是这样……嵌套了一个SWF,怪不得会有这个情况出现了,那么我们就提取出它嵌套的SWF,导出资源(图片682),为什么导出这个?因为他没其他什么可导出的了,其实ShellCode就在这个里面,不过我没有找到它的起始位置,但是使用XorKey枚举可以轻易发现0x3D的xorkey匹配了:hxxp://securescanpc-win.com/load.php?id=7?07002da639a9a060000000002c1503193000104090000000017。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。