Loading
1

暴风影音AviIndexChunk字段堆溢出漏洞分析实战

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 2 3 4 5 6 7 8 9 10
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。