注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

MS05039分析  

2013-04-22 10:30:03|  分类: 调试记录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

MS05039分析

Hcper @ 2013421星期日

 

1、动态调试找到有问题模块及代码

用网上下载的一个GUI版利用代码,修改成vc的版本后在虚拟机win2000里测试了一下。

cdb附加到services.exe进程,因为UPNP服务在该进程里。

运行利用码后目标中断在如下:

eax=000e10a0 ebx=000007c0 ecx=00000020 edx=0121f8c0 esi=000e1800 edi=01220000

eip=76750199 esp=0121f864 ebp=0121f874 iopl=0         nv up ei pl nz ac pe nc

cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000216

UMPNPMGR!RegisterServiceNotification+0xa58c:

76750199 f3a5 rep movs dword ptr es:[edi],dword ptr [esi] es:0023:01220000=???????? ds:0023:000e1800=90909090

 

在模块UMPNPMGR.DLL76750199这个地方访问冲突!

从上面edi可以看出,该值跟esp的值比较靠近,是堆栈的栈底。esi指向的地方有shellcode

这里把shellcode复制到堆栈,由于源串过长到达堆栈底部,写入了还未分配内存的地址,触发了访问冲突!所以该漏洞是个堆栈溢出。这里就是漏洞所在的地方了。

 

查看堆栈

0:019> kn

 # ChildEBP RetAddr 

WARNING: Stack unwind information not available. Following frames may be wrong.

00 0121f874 76746ecc UMPNPMGR!RegisterServiceNotification+0xa58c

01 0121f908 eb909090 UMPNPMGR!RegisterServiceNotification+0x12bf

02 0121f90c 48909008 0xeb909090

03 0121f910 9088444f 0x48909008

04 0121f914 90909090 0x9088444f

05 0121f918 90909090 0x90909090

06 0121f91c 90909090 0x90909090

07 0121f920 90909090 0x90909090

08 0121f924 e983c929 0x90909090

09 0121f928 d9eed9b0 0xe983c929

0a 0121f92c 5bf42474 0xd9eed9b0

0b 0121f930 19137381 0x5bf42474

0c 0121f934 833704f5 0x19137381

0d 0121f938 f4e2fceb 0x833704f5

0e 0121f93c 7aef9fe5 0xf4e2fceb

0f 0121f940 c8fb0cf1 0x7aef9fe5

10 0121f944 5b8f95e6 0xc8fb0cf1

11 0121f948 728fd13d 0x5b8f95e6

12 0121f94c 32787e25 0x728fd13d

13 0121f950 bcebf461 0x32787e25

0:019> dd esp

0121f864  00000000 00484ae0 00000004 00000000

0121f874  0121f908 76746ecc 000e10a0 0000ffff

0121f884  000007e0 0121f8b0 00000000 0121f90c

0121f894  0121fadc 0121fa00 00000001 ffffffff

0121f8a4  00000000 00000000 00000001 00000005

0121f8b4  000007d0 000007c0 00000000 909008eb

0121f8c4  767a1567 909008eb 767a1567 909008eb

0121f8d4  767a1567 909008eb 767a1567 909008eb

 

附近的代码

0:019> ub .

UMPNPMGR!RegisterServiceNotification+0xa575:

76750182 89510c          mov     dword ptr [ecx+0Ch],edx

76750185 8b7004          mov     esi,dword ptr [eax+4]

76750188 8d5110          lea     edx,[ecx+10h]

7675018b 8b4808          mov     ecx,dword ptr [eax+8]

7675018e 8bd9            mov     ebx,ecx

76750190 8d740620        lea     esi,[esi+eax+20h]

76750194 8bfa            mov     edi,edx

76750196 c1e902          shr     ecx,2

0:019> u

UMPNPMGR!RegisterServiceNotification+0xa58c:

76750199 f3a5            rep movs dword ptr es:[edi],dword ptr [esi] ?这里溢出

7675019b 8bcb            mov     ecx,ebx

7675019d 83e103          and     ecx,3

767501a0 f3a4            rep movs byte ptr es:[edi],byte ptr [esi]

767501a2 8b08            mov     ecx,dword ptr [eax]

767501a4 035008          add     edx,dword ptr [eax+8]

767501a7 8bd9            mov     ebx,ecx

767501a9 8d7020          lea     esi,[eax+20h]

 

2、静态分析全面了解来龙去脉

静态分析能够从全局角度看问题,所以可以用IDA或者OD反汇编分析UMPNPMGR.DLL这个模块。我是两者都用的。在IDA或者OD里直接到地址76750199就可以了。这时你在往上回溯就可以找到有问题的rpc函数了。

找到的如下:

接口:Interface:8D9F4E40-A03D-11CE-8F-69-08-00-3E-30-05-1B 1.0

RPC函数36:0x76746E07 <----ms05039

 

相关代码如下:

76746E07  /.  55            push    ebp

76746E08  |.  8BEC          mov     ebp, esp

76746E0A  |.  6A FF         push    -1

76746E0C  |.  68 585E7476   push    76745E58

76746E11  |.  68 E4277576   push    <jmp.&MSVCRT._except_handler3>   ;  SE 处理程序安装

76746E16  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]

76746E1C  |.  50            push    eax

76746E1D  |.  64:8925 00000>mov     dword ptr fs:[0], esp

76746E24  |.  51            push    ecx

76746E25  |.  51            push    ecx

76746E26  |.  83EC 54       sub     esp, 54 ?被溢出的缓冲区

76746E29  |.  53            push    ebx

76746E2A  |.  56            push    esi

76746E2B  |.  57            push    edi

76746E2C  |.  8965 E8       mov     dword ptr [ebp-18], esp

76746E2F  |.  33FF          xor     edi, edi

76746E31  |.  897D FC       mov     dword ptr [ebp-4], edi

76746E34  |.  FF75 10       push    dword ptr [ebp+10]

76746E37  |.  E8 658F0000   call    7674FDA1

76746E3C  |.  3945 18       cmp     dword ptr [ebp+18], eax

76746E3F  |.  73 1F         jnb     short 76746E60 ;跳走

 

76746E41  |.  C745 DC 1F000>mov     dword ptr [ebp-24], 1F

76746E48  |>  834D FC FF    or      dword ptr [ebp-4], FFFFFFFF

76746E4C  |.  8B45 DC       mov     eax, dword ptr [ebp-24]

76746E4F  |.  8B4D F0       mov     ecx, dword ptr [ebp-10]

76746E52  |.  64:890D 00000>mov     dword ptr fs:[0], ecx

76746E59  |.  5F            pop     edi

76746E5A  |.  5E            pop     esi

76746E5B  |.  5B            pop     ebx

76746E5C  |.  C9            leave

76746E5D  |.  C2 2000       retn    20

 

76746E60  |>  FF75 0C       push    dword ptr [ebp+C]

76746E63  |.  E8 D5D5FFFF   call    7674443D

76746E68  |.  85C0          test    eax, eax

76746E6A  |.  75 09         jnz     short 76746E75 ;跳走

76746E6C  |.  C745 DC 05000>mov     dword ptr [ebp-24], 5

76746E73  |.^ EB D3         jmp     short 76746E48

 

76746E75  |>  FF75 0C       push    dword ptr [ebp+C]

76746E78  |.  E8 4DCDFFFF   call    76743BCA

76746E7D  |.  85C0          test    eax, eax

76746E7F  |.  74 09         je      short 76746E8A ;跳走

76746E81  |.  C745 DC 07000>mov     dword ptr [ebp-24], 7

76746E88  |.^ EB BE         jmp     short 76746E48

 

76746E8A  |>  8B5D 20       mov     ebx, dword ptr [ebp+20]

76746E8D  |.  83FB 04       cmp     ebx, 4

76746E90  |.  73 09         jnb     short 76746E9B ;跳走

76746E92  |.  C745 DC 3B000>mov     dword ptr [ebp-24], 3B

76746E99  |.^ EB AD         jmp     short 76746E48

 

76746E9B  |>  8B75 1C       mov     esi, dword ptr [ebp+1C]

76746E9E  |.  8975 D8       mov     dword ptr [ebp-28], esi

76746EA1  |.  6A 01         push    1

76746EA3  |.  58            pop     eax

76746EA4  |.  8945 94       mov     dword ptr [ebp-6C], eax

76746EA7  |.  834D 98 FF    or      dword ptr [ebp-68], FFFFFFFF

76746EAB  |.  897D 9C       mov     dword ptr [ebp-64], edi

76746EAE  |.  66:897D A0    mov     word ptr [ebp-60], di

76746EB2  |.  66:897D A2    mov     word ptr [ebp-5E], di

76746EB6  |.  8945 A4       mov     dword ptr [ebp-5C], eax

76746EB9  |.  57            push    edi

76746EBA  |.  8D45 A8       lea     eax, dword ptr [ebp-58]

76746EBD  |.  50            push    eax

76746EBE  |.  FF75 18       push    dword ptr [ebp+18]

76746EC1  |.  FF75 10       push    dword ptr [ebp+10]

76746EC4  |.  FF75 14       push    dword ptr [ebp+14]

76746EC7  |.  E8 8F900000   call    7674FF5B <----------------进入

76746ECC  |.  8945 DC       mov     dword ptr [ebp-24], eax

76746ECF  |.  3BC7          cmp     eax, edi

76746ED1  |.^ 0F85 71FFFFFF jnz     76746E48

76746ED7  |.  FF75 0C       push    dword ptr [ebp+C]

76746EDA  |.  8D45 B8       lea     eax, dword ptr [ebp-48]

76746EDD  |.  50            push    eax

76746EDE  |.  FF15 20107476 call    dword ptr [<&NTDLL.RtlInitUnicod>;  ntdll.RtlInitUnicodeString

76746EE4  |.  8D45 94       lea     eax, dword ptr [ebp-6C]

76746EE7  |.  8945 C0       mov     dword ptr [ebp-40], eax

76746EEA  |.  C745 C4 24000>mov     dword ptr [ebp-3C], 24

76746EF1  |.  8975 C8       mov     dword ptr [ebp-38], esi

76746EF4  |.  895D CC       mov     dword ptr [ebp-34], ebx

76746EF7  |.  8B45 24       mov     eax, dword ptr [ebp+24]

76746EFA  |.  8945 D0       mov     dword ptr [ebp-30], eax

76746EFD  |.  897D D4       mov     dword ptr [ebp-2C], edi

76746F00  |.  6A 20         push    20

76746F02  |.  8D45 B8       lea     eax, dword ptr [ebp-48]

76746F05  |.  50            push    eax

76746F06  |.  6A 14         push    14

76746F08  |.  FF15 1C107476 call    dword ptr [<&NTDLL.NtPlugPlayCon>;  ntdll.ZwPlugPlayControl

76746F0E  |.  8945 E0       mov     dword ptr [ebp-20], eax

76746F11  |.  3BC7          cmp     eax, edi

76746F13  |.  74 0E         je      short 76746F23

76746F15  |.  50            push    eax

76746F16  |.  E8 11EFFFFF   call    76745E2C

76746F1B  |.  8945 DC       mov     dword ptr [ebp-24], eax

76746F1E  |.^ E9 25FFFFFF   jmp     76746E48

76746F23  |>  897D DC       mov     dword ptr [ebp-24], edi

76746F26  \.^ E9 1DFFFFFF   jmp     76746E48

 

 

 

 

7674FF5B  /$  55            push    ebp

7674FF5C  |.  8BEC          mov     ebp, esp

7674FF5E  |.  51            push    ecx

7674FF5F  |.  8B4D 0C       mov     ecx, dword ptr [ebp+C]

7674FF62  |.  53            push    ebx

7674FF63  |.  B8 01800000   mov     eax, 8001

7674FF68  |.  33DB          xor     ebx, ebx

7674FF6A  |.  56            push    esi

7674FF6B  |.  3BC8          cmp     ecx, eax

7674FF6D  |.  57            push    edi

7674FF6E  |.  895D FC       mov     dword ptr [ebp-4], ebx

7674FF71  |.  0F87 AA010000 ja      76750121 ;跳走

7674FF77  |.  0F84 65010000 je      767500E2

7674FF7D  |.  8BC1          mov     eax, ecx

7674FF7F  |.  48            dec     eax                              ;  Switch (cases 1..6)

7674FF80  |.  0F84 32010000 je      767500B8

7674FF86  |.  48            dec     eax

7674FF87  |.  0F84 D8000000 je      76750065

7674FF8D  |.  48            dec     eax

7674FF8E  |.  0F84 94000000 je      76750028

7674FF94  |.  48            dec     eax

7674FF95  |.  74 49         je      short 7674FFE0

7674FF97  |.  48            dec     eax

7674FF98  |.  48            dec     eax

7674FF99  |.  0F85 9D010000 jnz     7675013C

7674FF9F  |.  837D 10 24    cmp     dword ptr [ebp+10], 24           ;  Case 6 of switch 7674FF7F

7674FFA3  |.  0F82 73020000 jb      7675021C

7674FFA9  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]

7674FFAC  |.  8379 04 10    cmp     dword ptr [ecx+4], 10

7674FFB0  |.  0F85 66020000 jnz     7675021C

7674FFB6  |.  8B45 14       mov     eax, dword ptr [ebp+14]

7674FFB9  |.  C600 06       mov     byte ptr [eax], 6

7674FFBC  |.  8858 01       mov     byte ptr [eax+1], bl

7674FFBF  |.  66:8B51 08    mov     dx, word ptr [ecx+8]

7674FFC3  |.  66:8950 02    mov     word ptr [eax+2], dx

7674FFC7  |.  8B51 0C       mov     edx, dword ptr [ecx+C]

7674FFCA  |.  8950 04       mov     dword ptr [eax+4], edx

7674FFCD  |.  8B49 10       mov     ecx, dword ptr [ecx+10]

7674FFD0  |.  8948 08       mov     dword ptr [eax+8], ecx

7674FFD3  |.  8958 0C       mov     dword ptr [eax+C], ebx

7674FFD6  |>  8B45 FC       mov     eax, dword ptr [ebp-4]

7674FFD9  |.  5F            pop     edi

7674FFDA  |.  5E            pop     esi

7674FFDB  |.  5B            pop     ebx

7674FFDC  |.  C9            leave

7674FFDD  |.  C2 1400       retn    14

7674FFE0  |>  837D 10 20    cmp     dword ptr [ebp+10], 20           ;  Case 4 of switch 7674FF7F

7674FFE4  |.  0F82 64010000 jb      7675014E

7674FFEA  |.  8B7D 08       mov     edi, dword ptr [ebp+8]

7674FFED  |.  837F 04 0C    cmp     dword ptr [edi+4], 0C

7674FFF1  |.  0F85 25020000 jnz     7675021C

7674FFF7  |.  8B75 14       mov     esi, dword ptr [ebp+14]

7674FFFA  |.  C606 02       mov     byte ptr [esi], 2

7674FFFD  |.  FF77 08       push    dword ptr [edi+8]

76750000  |.  E8 C6110000   call    767511CB

76750005  |.  8846 01       mov     byte ptr [esi+1], al

76750008  |.  FF77 08       push    dword ptr [edi+8]

7675000B  |.  E8 9C110000   call    767511AC

76750010  |.  66:8946 02    mov     word ptr [esi+2], ax

76750014  |.  8B47 0C       mov     eax, dword ptr [edi+C]

76750017  |.  8946 04       mov     dword ptr [esi+4], eax

7675001A  |.  8B47 0C       mov     eax, dword ptr [edi+C]

7675001D  |.  8946 08       mov     dword ptr [esi+8], eax

76750020  |.  8B47 10       mov     eax, dword ptr [edi+10]

76750023  |.  8946 0C       mov     dword ptr [esi+C], eax

76750026  |.^ EB AE         jmp     short 7674FFD6

76750028  |>  837D 10 1C    cmp     dword ptr [ebp+10], 1C           ;  Case 3 of switch 7674FF7F

7675002C  |.  0F82 1C010000 jb      7675014E

76750032  |.  8B7D 08       mov     edi, dword ptr [ebp+8]

76750035  |.  837F 04 0C    cmp     dword ptr [edi+4], 0C

76750039  |.  0F85 DD010000 jnz     7675021C

7675003F  |.  8B75 14       mov     esi, dword ptr [ebp+14]

76750042  |.  C606 04       mov     byte ptr [esi], 4

76750045  |.  885E 01       mov     byte ptr [esi+1], bl

76750048  |.  FF77 08       push    dword ptr [edi+8]

7675004B  |.  E8 CE100000   call    7675111E

76750050  |.  66:8946 02    mov     word ptr [esi+2], ax

76750054  |.  8B47 0C       mov     eax, dword ptr [edi+C]

76750057  |.  8946 04       mov     dword ptr [esi+4], eax

7675005A  |.  895E 08       mov     dword ptr [esi+8], ebx

7675005D  |.  895E 0C       mov     dword ptr [esi+C], ebx

76750060  |.^ E9 71FFFFFF   jmp     7674FFD6

76750065  |>  837D 10 44    cmp     dword ptr [ebp+10], 44           ;  Case 2 of switch 7674FF7F

76750069  |.  0F82 DF000000 jb      7675014E

7675006F  |.  8B75 08       mov     esi, dword ptr [ebp+8]

76750072  |.  837E 04 28    cmp     dword ptr [esi+4], 28

76750076  |.  0F85 A0010000 jnz     7675021C

7675007C  |.  8B7D 14       mov     edi, dword ptr [ebp+14]

7675007F  |.  53            push    ebx

76750080  |.  C607 01       mov     byte ptr [edi], 1

76750083  |.  885F 01       mov     byte ptr [edi+1], bl

76750086  |.  FF76 18       push    dword ptr [esi+18]

76750089  |.  E8 B30F0000   call    76751041

7675008E  |>  6A 20         push    20

76750090  |.  66:8947 02    mov     word ptr [edi+2], ax

76750094  |.  8B46 08       mov     eax, dword ptr [esi+8]

76750097  |.  8B56 0C       mov     edx, dword ptr [esi+C]

7675009A  |.  59            pop     ecx

7675009B  |.  E8 4A270000   call    767527EA

767500A0  |.  8947 08       mov     dword ptr [edi+8], eax

767500A3  |.  8B46 08       mov     eax, dword ptr [esi+8]

767500A6  |.  8947 04       mov     dword ptr [edi+4], eax

767500A9  |.  8B46 10       mov     eax, dword ptr [esi+10]

767500AC  |.  2B46 08       sub     eax, dword ptr [esi+8]

767500AF  |.  40            inc     eax

767500B0  |.  8947 0C       mov     dword ptr [edi+C], eax

767500B3  |.^ E9 1EFFFFFF   jmp     7674FFD6

767500B8  |>  837D 10 44    cmp     dword ptr [ebp+10], 44           ;  Case 1 of switch 7674FF7F

767500BC  |.  0F82 5A010000 jb      7675021C

767500C2  |.  8B75 08       mov     esi, dword ptr [ebp+8]

767500C5  |.  837E 04 24    cmp     dword ptr [esi+4], 24

767500C9  |.  0F85 4D010000 jnz     7675021C

767500CF  |.  8B7D 14       mov     edi, dword ptr [ebp+14]

767500D2  |.  C607 03       mov     byte ptr [edi], 3

767500D5  |.  885F 01       mov     byte ptr [edi+1], bl

767500D8  |.  FF76 18       push    dword ptr [esi+18]

767500DB  |.  E8 D80E0000   call    76750FB8

767500E0  |.^ EB AC         jmp     short 7675008E

767500E2  |>  837D 10 24    cmp     dword ptr [ebp+10], 24

767500E6  |.  0F82 30010000 jb      7675021C

767500EC  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]

767500EF  |.  8379 04 0C    cmp     dword ptr [ecx+4], 0C

767500F3  |.  0F85 23010000 jnz     7675021C

767500F9  |.  8B45 14       mov     eax, dword ptr [ebp+14]

767500FC  |.  C600 81       mov     byte ptr [eax], 81

767500FF  |.  8858 01       mov     byte ptr [eax+1], bl

76750102  |.  66:8B51 14    mov     dx, word ptr [ecx+14]

76750106  |.  66:8950 02    mov     word ptr [eax+2], dx

7675010A  |.  8B51 08       mov     edx, dword ptr [ecx+8]

7675010D  |.  8950 04       mov     dword ptr [eax+4], edx

76750110  |.  8B51 0C       mov     edx, dword ptr [ecx+C]

76750113  |.  8950 08       mov     dword ptr [eax+8], edx

76750116  |.  8B49 10       mov     ecx, dword ptr [ecx+10]

76750119  |.  8948 0C       mov     dword ptr [eax+C], ecx

7675011C  |.^ E9 B5FEFFFF   jmp     7674FFD6

76750121  |>  81E9 02800000 sub     ecx, 8002                        ;  Switch (cases 8002..FFFF)

76750127  |.  0F84 E9000000 je      76750216 ;不跳

7675012D  |.  49            dec     ecx

7675012E  |.  0F84 96000000 je      767501CA ;不跳

76750134  |.  81E9 FC7F0000 sub     ecx, 7FFC

7675013A  |.  74 0C         je      short 76750148 ;跳走

7675013C  |>  C745 FC 0B000>mov     dword ptr [ebp-4], 0B            ;  Default case of switch 76750121

76750143  |.^ E9 8EFEFFFF   jmp     7674FFD6

76750148  |>  837D 10 21    cmp     dword ptr [ebp+10], 21           ;  Case FFFF of switch 76750121

7675014C  |.  73 0C         jnb     short 7675015A ;跳走

7675014E  |>  C745 FC 13000>mov     dword ptr [ebp-4], 13

76750155  |.^ E9 7CFEFFFF   jmp     7674FFD6

7675015A  |>  8B4D 14       mov     ecx, dword ptr [ebp+14]

7675015D  |.  8B45 08       mov     eax, dword ptr [ebp+8]

76750160  |.  C601 05       mov     byte ptr [ecx], 5

76750163  |.  8859 01       mov     byte ptr [ecx+1], bl

76750166  |.  66:8B50 0C    mov     dx, word ptr [eax+C]

7675016A  |.  66:8951 02    mov     word ptr [ecx+2], dx

7675016E  |.  8B10          mov     edx, dword ptr [eax]

76750170  |.  8B70 08       mov     esi, dword ptr [eax+8]

76750173  |.  8D5432 10     lea     edx, dword ptr [edx+esi+10]

76750177  |.  8951 04       mov     dword ptr [ecx+4], edx

7675017A  |.  8B50 08       mov     edx, dword ptr [eax+8]

7675017D  |.  8951 08       mov     dword ptr [ecx+8], edx

76750180  |.  8B10          mov     edx, dword ptr [eax]

76750182  |.  8951 0C       mov     dword ptr [ecx+C], edx

76750185  |.  8B70 04       mov     esi, dword ptr [eax+4]

76750188  |.  8D51 10       lea     edx, dword ptr [ecx+10]

7675018B  |.  8B48 08       mov     ecx, dword ptr [eax+8]

7675018E  |.  8BD9          mov     ebx, ecx

76750190  |.  8D7406 20     lea     esi, dword ptr [esi+eax+20]

76750194  |.  8BFA          mov     edi, edx

76750196  |.  C1E9 02       shr     ecx, 2

76750199  |.  F3:A5         rep     movs dword ptr es:[edi], dword p> <--------这里溢出到堆栈底,触发异常

7675019B  |.  8BCB          mov     ecx, ebx

7675019D  |.  83E1 03       and     ecx, 3

767501A0  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>

767501A2  |.  8B08          mov     ecx, dword ptr [eax]

767501A4  |.  0350 08       add     edx, dword ptr [eax+8]

767501A7  |.  8BD9          mov     ebx, ecx

767501A9  |.  8D70 20       lea     esi, dword ptr [eax+20]

767501AC  |.  8BFA          mov     edi, edx

767501AE  |.  C1E9 02       shr     ecx, 2

767501B1  |.  F3:A5         rep     movs dword ptr es:[edi], dword p>

767501B3  |.  8BCB          mov     ecx, ebx

767501B5  |.  83E1 03       and     ecx, 3

767501B8  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>

767501BA  |.  8B38          mov     edi, dword ptr [eax]

767501BC  |.  8D70 10       lea     esi, dword ptr [eax+10]

767501BF  |.  03FA          add     edi, edx

767501C1  |.  A5            movs    dword ptr es:[edi], dword ptr [e>

767501C2  |.  A5            movs    dword ptr es:[edi], dword ptr [e>

767501C3  |.  A5            movs    dword ptr es:[edi], dword ptr [e>

767501C4  |.  A5            movs    dword ptr es:[edi], dword ptr [e>

767501C5  |.^ E9 0CFEFFFF   jmp     7674FFD6

767501CA  |>  837D 10 14    cmp     dword ptr [ebp+10], 14           ;  Case 8003 of switch 76750121

767501CE  |.  72 4C         jb      short 7675021C

767501D0  |.  8B45 14       mov     eax, dword ptr [ebp+14]

767501D3  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]

767501D6  |.  BE 00000200   mov     esi, 20000

767501DB  |.  8958 08       mov     dword ptr [eax+8], ebx

767501DE  |.  8958 0C       mov     dword ptr [eax+C], ebx

767501E1  |.  8970 04       mov     dword ptr [eax+4], esi

767501E4  |.  0FB651 0C     movzx   edx, byte ptr [ecx+C]

767501E8  |.  0BD6          or      edx, esi

767501EA  |.  8950 04       mov     dword ptr [eax+4], edx

767501ED  |.  0FB671 0D     movzx   esi, byte ptr [ecx+D]

767501F1  |.  C1E6 18       shl     esi, 18

767501F4  |.  0BF2          or      esi, edx

767501F6  |.  8970 04       mov     dword ptr [eax+4], esi

767501F9  |.  8B51 10       mov     edx, dword ptr [ecx+10]

767501FC  |.  8950 08       mov     dword ptr [eax+8], edx

767501FF  |.  8B49 08       mov     ecx, dword ptr [ecx+8]

76750202  |.  83E1 08       and     ecx, 8

76750205  |.  80F9 08       cmp     cl, 8

76750208  |.^ 0F85 C8FDFFFF jnz     7674FFD6

7675020E  |.  0848 05       or      byte ptr [eax+5], cl

76750211  |.^ E9 C0FDFFFF   jmp     7674FFD6

76750216  |>  837D 10 18    cmp     dword ptr [ebp+10], 18           ;  Case 8002 of switch 76750121

7675021A  |.  73 0C         jnb     short 76750228

7675021C  |>  C745 FC 06000>mov     dword ptr [ebp-4], 6

76750223  |.^ E9 AEFDFFFF   jmp     7674FFD6

76750228  |>  8B45 14       mov     eax, dword ptr [ebp+14]

7675022B  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]

7675022E  |.  8958 04       mov     dword ptr [eax+4], ebx

76750231  |.  8048 06 01    or      byte ptr [eax+6], 1

76750235  |.  8B50 04       mov     edx, dword ptr [eax+4]

76750238  |.  8958 08       mov     dword ptr [eax+8], ebx

7675023B  |.  8958 0C       mov     dword ptr [eax+C], ebx

7675023E  |.  0FB671 0C     movzx   esi, byte ptr [ecx+C]

76750242  |.  0BF2          or      esi, edx

76750244  |.  8970 04       mov     dword ptr [eax+4], esi

76750247  |.  8B51 10       mov     edx, dword ptr [ecx+10]

7675024A  |.  8950 08       mov     dword ptr [eax+8], edx

7675024D  |.  8B51 14       mov     edx, dword ptr [ecx+14]

76750250  |.  8950 0C       mov     dword ptr [eax+C], edx

76750253  |.  8B51 08       mov     edx, dword ptr [ecx+8]

76750256  |.  83E2 01       and     edx, 1

76750259  |.  BE 00010000   mov     esi, 100

7675025E  |.  80FA 01       cmp     dl, 1

76750261  |.  75 5F         jnz     short 767502C2

76750263  |.  0970 04       or      dword ptr [eax+4], esi

76750266  |>  8B51 08       mov     edx, dword ptr [ecx+8]

76750269  |.  BF 00020000   mov     edi, 200

7675026E  |.  83E2 02       and     edx, 2

76750271  |.  80FA 02       cmp     dl, 2

76750274  |.  75 52         jnz     short 767502C8

76750276  |.  0978 04       or      dword ptr [eax+4], edi

76750279  |>  F641 08 04    test    byte ptr [ecx+8], 4

7675027D  |.  74 04         je      short 76750283

7675027F  |.  8048 05 04    or      byte ptr [eax+5], 4

76750283  |>  F641 08 08    test    byte ptr [ecx+8], 8

76750287  |.  74 04         je      short 7675028D

76750289  |.  8048 05 08    or      byte ptr [eax+5], 8

7675028D  |>  F641 08 10    test    byte ptr [ecx+8], 10

76750291  |.  74 04         je      short 76750297

76750293  |.  8048 05 10    or      byte ptr [eax+5], 10

76750297  |>  F641 08 20    test    byte ptr [ecx+8], 20

7675029B  |.  74 04         je      short 767502A1

7675029D  |.  8048 05 20    or      byte ptr [eax+5], 20

767502A1  |>  F641 08 40    test    byte ptr [ecx+8], 40

767502A5  |.  74 04         je      short 767502AB

767502A7  |.  8048 05 40    or      byte ptr [eax+5], 40

767502AB  |>  8B49 08       mov     ecx, dword ptr [ecx+8]

767502AE  |.  BA 00030000   mov     edx, 300

767502B3  |.  23CA          and     ecx, edx

767502B5  |.  3BCE          cmp     ecx, esi

767502B7  |.  75 15         jnz     short 767502CE

767502B9  |.  8048 07 01    or      byte ptr [eax+7], 1

767502BD  |.^ E9 14FDFFFF   jmp     7674FFD6

767502C2  |>  8060 05 FE    and     byte ptr [eax+5], 0FE

767502C6  |.^ EB 9E         jmp     short 76750266

767502C8  |>  8060 05 FD    and     byte ptr [eax+5], 0FD

767502CC  |.^ EB AB         jmp     short 76750279

767502CE  |>  3BCF          cmp     ecx, edi

767502D0  |.  75 09         jnz     short 767502DB

767502D2  |.  8048 07 02    or      byte ptr [eax+7], 2

767502D6  |.^ E9 FBFCFFFF   jmp     7674FFD6

767502DB  |>  3BCA          cmp     ecx, edx

767502DD  |.^ 0F85 F3FCFFFF jnz     7674FFD6

767502E3  |.  8048 07 03    or      byte ptr [eax+7], 3

767502E7  \.^ E9 EAFCFFFF   jmp     7674FFD6

 

 

 

 

3、图形化分析更直观

上面的一大坨代码是不是看的眼花?反正我是没看,因为我更喜欢图形化的分析。

IDA有代码分块流程图,这个用来确定条件的跳转不错!但是它不能编辑有点遗憾。

我是喜欢用一些图线、文本做一些标记的,可能是因为CAD用多了,职业习惯吧!

代码里面的那些符号,调用等用直线来指示是多么的直观方便,鼠标一点就能找到。

 

每个数据的输入输出操作模型如下图所示,

控制流代表代码能够运行到这里,即使有数据的操作如果控制流到达不了这里也是无用的。

例如死循环包围的数据输入输出,无权访问的代码等。

输入数据代表我们输入的数据。没有输入数据就没法控制了!这是最主要的。

缓冲区代表堆栈或者堆上的空间。在它们的生命期,可以全面的找到相关代码!

操作就是一些数据搬运了,如strcpyrep movsd等。从操作方面入手,可能会有遗漏,因为并不是所有的操作都是apirep movsd等,有些是就是一些mov指令。

条件这是每个操作前要判断的,如果没有条件就是有溢出了,或者条件判断错误等都有问题了。从编程者的角度看,要保证输入数据的长度要小于剩余空间的大小。

 

MS05039分析 - appall - 且行且记录

 

 

 

对于MS05039

数据操作的参考如下:(图片上半部分为内层函数7674FF5B,下半部为外层函数76746E07

MS05039分析 - appall - 且行且记录

 

从上面可以看到数据的大小是来自RPC函数76746E07的结构指针[ebp+14]偏移+8的地方

从外层到内层都没见到该值与缓冲区大小的比较,所以漏洞原因就在于此!

 

输入数据如下:(图片左半部分为内层函数7674FF5B,右半部为外层函数76746E07

 

MS05039分析 - appall - 且行且记录

 

缓冲区如下:(图片右半部分为内层函数7674FF5B,左半部为外层函数76746E07

 

MS05039分析 - appall - 且行且记录

 

各函数参数的条件

这个就用IDAWinGraph来看就很容易了,从问题代码往上各个条件都要满足就可以了。

 

函数7674FF5B参数满足条件:

 

MS05039分析 - appall - 且行且记录

 

76746E07参数满足条件:

 

MS05039分析 - appall - 且行且记录

 

OD中载入该dll,改eip76746E07,参照上面单步运行。

sub_7674fda1(arg_8)=sub_7674fda1(ffffh)=21h

所以arg_10>=21h

sub_7674443d(arg_4)=sub_7674443d(0)=1

sub_76743bca(arg_4)= sub_76743bca(0)=0

所以设arg_4=0即可

主要的参数就按照上图构造即可。

 

按照下图在OD中构造参数:

 

MS05039分析 - appall - 且行且记录

 

指向的数据构造:

所构造的数据偏移为10h,大小为20h

 

MS05039分析 - appall - 且行且记录

 

单步运行模拟这个过程到下图,可以看到来源确实是跟前面所述,是一个结构里的数据,

目的是上层的ebp-48h的地方。

 

MS05039分析 - appall - 且行且记录

 

单步过后,目标缓冲区被我们的数据填充。

如果大小设置成很大的数的话,那就会访问冲突了。

 

 

MS05039分析 - appall - 且行且记录

 

  评论这张
 
阅读(675)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017