Region Size: 00011000
State: 00001000 MEM_COMMIT
Protect: 00000004 PAGE_READWRITE
Type: 00020000 MEM_PRIVATE
Allocation Base: 23120000
Allocation Protect: 00000001 PAGE_NOACCESS
可以发现esi位于一个堆区内:
0:034> !heap -p -a 0x231f726e
address 231f726e found in _DPH_HEAP_ROOT @ 6ff1000
in busy allocation ( DPH_HEAP_BLOCK: UserAddr UserSize - VirtAddr VirtSize)
22c21444: 231f7000 10000 - 231f6000 12000
74c08e89 verifier!AVrfDebugPageHeapAllocate+0x00000229
77451d4e ntdll!RtlDebugAllocateHeap+0x00000030
7740b586 ntdll!RtlpAllocateHeap+0x000000c4
773b3541 ntdll!RtlAllocateHeap+0x0000023a
74b10269 MSVCR100!malloc+0x0000004b
61bbb327 mfc100u+0x000bb327
67b87080 AviSplitter!DllRegisterServer+0x000003c0
可以得知,esi所在堆的用户起始地址为231f7000,查看内存内容:
0:034> db 231f7000
231f7000 52 49 46 46 68 02 00 00-41 56 49 20 4c 49 53 54 RIFFh...AVI LIST
231f7010 2a 02 00 00 68 64 72 6c-fe 80 80 80 80 80 ad c1 *...hdrl........
231f7020 b0 44 6a f8 80 80 81 ab-fc 80 80 80 81 94 02 fe .Dj.............
231f7030 80 80 80 80 81 b9 f8 80-80 81 87 e0 81 87 e0 81 ................
231f7040 9b e0 81 96 fe 80 80 80-80 81 b2 e0 80 a3 fc 80 ................
231f7050 80 80 81 85 fc 80 80 80-81 b5 fe 80 80 80 80 81 ................
231f7060 91 e0 80 ba f8 80 80 81-b1 e0 80 a2 f8 80 80 81 ................
231f7070 82 f0 80 81 9e fe 80 80-80 80 81 b8 fe 80 80 80 ................
对比poc.avi样本内容:
00000000h: 52 49 46 46 68 02 00 00 41 56 49 20 4C 49 53 54 ; RIFFh...AVI LIST
00000010h: 2A 02 00 00 68 64 72 6C FE 80 80 80 80 80 AD C1 ; *...hdrl€€€€
00000020h: B0 44 6A F8 80 80 81 AB FC 80 80 80 81 94 02 FE ; 癉j鴢€伀鼆€€仈.?
00000030h: 80 80 80 80 81 B9 F8 80 80 81 87 E0 81 87 E0 81 ; €€€€伖鴢€亣鄟囙?
00000040h: 9B E0 81 96 FE 80 80 80 80 81 B2 E0 80 A3 FC 80 ; 涏仏€€€伈鄝|€
00000050h: 80 80 81 85 FC 80 80 80 81 B5 FE 80 80 80 80 81 ; €€亝鼆€€伒€€€?
00000060h: 91 E0 80 BA F8 80 80 81 B1 E0 80 A2 F8 80 80 81 ; 戉€壶€€伇鄝Ⅷ€€?
可以发现,堆中存储的内容就是poc.avi样本内容,漏洞现场的al来自于esi= 231f726e位置:
0:034> db 231f7250
231f7250 00 00 4c 49 53 54 0c 00-00 00 6d 6f 76 69 30 30 ..LIST....movi00
231f7260 64 62 00 00 00 00 69 64-78 31 02 00 00 00 00 00 db....idx1......
对比poc.avi文件的末尾内容:
00000250h: 00 00 4C 49 53 54 0C 00 00 00 6D 6F 76 69 30 30 ; ..LIST....movi00
00000260h: 64 62 00 00 00 00 69 64 78 31 02 00 00 00 00 00 ; db....idx1......
由此可知,al来自于poc.avi样本中倒数第二个字节。
关心漏洞能否利用的童鞋可能比较喜欢这个结论,为什么呢?因为al可控,结合漏洞现场的mov指令,如果edi也可控的话,就能达到任意内存写的目的。当然,这只是分析过程中的YY,具体还要看后面的分析情况。
2. EDI来自于哪里
从漏洞现场可知,edi无法写入,查看其地址信息:
0:006> !address edi
Usage: PageHeap
Base Address: 225ff000
End Address: 22600000
Region Size: 00001000
State: 00002000 MEM_RESERVE
Protect:

◆◆1
发表评论