记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

MS05039分析

2013-04-24 13:35

 
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.DLL的76750199这个地方访问冲突!
从上面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       ;  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用多了,职业习惯吧!
代码里面的那些符号,调用等用直线来指示是多么的直观方便,鼠标一点就能找到。
 
每个数据的输入输出操作模型如下图所示,
控制流代表代码能够运行到这里,即使有数据的操作如果控制流到达不了这里也是无用的。
例如死循环包围的数据输入输出,无权访问的代码等。
输入数据代表我们输入的数据。没有输入数据就没法控制了!这是最主要的。
缓冲区代表堆栈或者堆上的空间。在它们的生命期,可以全面的找到相关代码!
操作就是一些数据搬运了,如strcpy、rep movsd等。从操作方面入手,可能会有遗漏,因为并不是所有的操作都是api,rep movsd等,有些是就是一些mov指令。
条件这是每个操作前要判断的,如果没有条件就是有溢出了,或者条件判断错误等都有问题了。从编程者的角度看,要保证输入数据的长度要小于剩余空间的大小。
 
 

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

从上面可以看到数据的大小是来自RPC函数76746E07的结构指针[ebp+14]偏移+8的地方
从外层到内层都没见到该值与缓冲区大小的比较,所以漏洞原因就在于此!
 
输入数据如下:(图片左半部分为内层函数7674FF5B,右半部为外层函数76746E07)

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

 
 
各函数参数的条件
这个就用IDA的WinGraph来看就很容易了,从问题代码往上各个条件都要满足就可以了。
 
函数7674FF5B参数满足条件:

 
 
76746E07参数满足条件:

 
 
在OD中载入该dll,改eip为76746E07,参照上面单步运行。
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中构造参数:

 
 
指向的数据构造:
所构造的数据偏移为10h,大小为20h。

 
 
单步运行模拟这个过程到下图,可以看到来源确实是跟前面所述,是一个结构里的数据,
目的是上层的ebp-48h的地方。

 
 
单步过后,目标缓冲区被我们的数据填充。
如果大小设置成很大的数的话,那就会访问冲突了。

 
 
知识来源: www.2cto.com/Article/201304/205544.html

阅读:95371 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“MS05039分析”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

九层之台,起于累土;黑客之术,始于阅读

推广

工具

标签云