精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CVE-2016-7290: 微軟office word的整數(shù)下溢漏洞分析

安全 漏洞
這個(gè)下溢是當(dāng)word處理特殊的二進(jìn)制文檔文件時(shí),在復(fù)制操作期間越界讀取時(shí)觸發(fā),能夠?qū)е聎inword.exe保護(hù)模式下棧的緩沖區(qū)溢出問(wèn)題。一切聽(tīng)起來(lái)是戲劇性的,但是PoC觸發(fā)只需要越界讀取,然而本文將深入分析漏洞細(xì)節(jié)。

[[182250]]

一、前言

這個(gè)下溢是當(dāng)word處理特殊的二進(jìn)制文檔文件時(shí),在復(fù)制操作期間越界讀取時(shí)觸發(fā),能夠?qū)е聎inword.exe保護(hù)模式下棧的緩沖區(qū)溢出問(wèn)題。

一切聽(tīng)起來(lái)是戲劇性的,但是PoC觸發(fā)只需要越界讀取,然而本文將深入分析漏洞細(xì)節(jié)。

這個(gè)漏洞影響Microsoft Word 2007 Service Pack 3, Microsoft Office 2010 Service Pack 2 (32位版本), Microsoft Office 2010 Service Pack 2 (64位版本) 和 Microsoft Office Compatibility Pack Service Pack 3。更多的細(xì)節(jié)能從SRC-2016-0042獲取。本文所有的分析是基于Microsoft Office 2010 專(zhuān)業(yè)版的winword.exe(v14.0.4734.1000)。

首先,來(lái)看下sample和PoC文件的不同之處。

sample和PoC文件的不同

注意到只有一個(gè)字節(jié)的不同。接下來(lái)看下哪個(gè)結(jié)構(gòu)塊包含了這個(gè)不同。

sample和PoC文件的不同之處

可以看到不同之處在于OneTableDocumentStream數(shù)據(jù)域中。Sample文件的值為0x68,而poc文件使用0xfa來(lái)觸發(fā)下溢。

 

二、觸發(fā)漏洞

 

首先,為了調(diào)試開(kāi)啟頁(yè)堆和用戶(hù)態(tài)棧跟蹤:

  1. c:\Program Files\Debugging Tools for Windows (x86)>gflags.exe -i winword.exe +hpa +ust 
  2. Current Registry Settings for winword.exe executable are: 02001000 
  3.     ust - Create user mode stack trace database 
  4.     hpa - Enable page heap 
  5. c:\Program Files\Debugging Tools for Windows (x86)> 

然后運(yùn)行poc.doc文件導(dǎo)致以下保護(hù)模式外異常訪(fǎng)問(wèn):

  1. (880.ac4): Access violation - code c0000005 (first chance) 
  2. First chance exceptions are reported before any exception handling. 
  3. This exception may be expected and handled. 
  4. eax=00000000 ebx=00000000 ecx=00000033 edx=00000002 esi=22870ffd edi=002513c4 
  5. eip=744fb40c esp=0024c694 ebp=0024c69c iopl=0         nv up ei pl nz ac po nc 
  6. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210212 
  7. MSVCR90!memmove+0xfc: 
  8. 744fb40c f3a5            rep movs dword ptr es:[edi],dword ptr [esi] 
  9. 0:000> kvn 
  10.  # ChildEBP RetAddr  Args to Child               
  11. 00 0024c69c 5e3f9b36 002513bf 22870ff8 000000d3 MSVCR90!memmove+0xfc 
  12. WARNING: Stack unwind information not available. Following frames may be wrong. 
  13. 01 0024c6b0 5e413843 22870ff8 002513bf 000000d3 wwlib!DllGetClassObject+0x455a 
  14. 02 0024c744 5e413223 002513ac 002513a0 00004ab8 wwlib!GetAllocCounters+0xcadb 
  15. 03 00251230 5e4131c6 002513ac 002513a0 00004ab8 wwlib!GetAllocCounters+0xc4bb 
  16. 04 00251264 5e45f414 002513ac 002513a0 00004ab8 wwlib!GetAllocCounters+0xc45e 
  17. 05 00251280 5e8da8a7 002513a0 22872fe4 00000000 wwlib!GetAllocCounters+0x586ac 
  18. 06 002512b8 5e89fdcb 04760520 002513a0 ffffffff wwlib!DllGetLCID+0x2d4521 
  19. 07 002567f4 5e66e957 1b132948 04760098 00000000 wwlib!DllGetLCID+0x299a45 
  20. 08 002580e0 5e671d5b 04760098 00258928 00000001 wwlib!DllGetLCID+0x685d1 
  21. 09 00258584 5e671489 04760098 00258928 1b132948 wwlib!DllGetLCID+0x6b9d5 
  22. 0a 0025894c 5e675c10 04760098 00002490 00000000 wwlib!DllGetLCID+0x6b103 
  23. 0b 00258998 5e4a6ad4 04760098 1b132948 0000056e wwlib!DllGetLCID+0x6f88a 
  24. 0c 002589d4 64270be6 22562f10 0000056e 00000000 wwlib!GetAllocCounters+0x9fd6c 
  25. 0d 002589f8 64270ebd 18bea880 18bea998 00258aa8 MSPTLS!FsTransformBbox+0x279b3 
  26. 0e 00258a4c 64270f2c 22798de8 00258d40 00000000 MSPTLS!FsTransformBbox+0x27c8a 
  27. 0f 00258aec 64271196 00258d40 00000000 00000000 MSPTLS!FsTransformBbox+0x27cf9 
  28. 10 00258ca0 6425736a 22798de8 227f0ca0 00000000 MSPTLS!FsTransformBbox+0x27f63 
  29. 11 00258db4 6428aa6f 22826fd0 00000000 00000000 MSPTLS!FsTransformBbox+0xe137 
  30. 12 00258eac 6426fbb9 22798de8 227f0ca0 00000000 MSPTLS!FsTransformBbox+0x4183c 
  31. 13 00259000 6425684e 22798de8 00000000 00000000 MSPTLS!FsTransformBbox+0x26986 

三、調(diào)查訪(fǎng)問(wèn)的內(nèi)存

 

第一步我們要檢查在崩潰時(shí)訪(fǎng)問(wèn)的內(nèi)存。

  1.     address 22870ffd found in 
  2.     _DPH_HEAP_ROOT @ 61000 
  3.     in busy allocation (  DPH_HEAP_BLOCK:         UserAddr         UserSize -         VirtAddr         VirtSize) 
  4.                                 227a13a8:         22870fe0               19 -         22870000             2000 
  5.     67be8e89 verifier!AVrfDebugPageHeapAllocate+0x00000229 
  6.     77126206 ntdll!RtlDebugAllocateHeap+0x00000030 
  7.     770ea127 ntdll!RtlpAllocateHeap+0x000000c4 
  8.     770b5950 ntdll!RtlAllocateHeap+0x0000023a 
  9.     5de2d804 mso!Ordinal149+0x000074b0 
  10.     5e6a754d wwlib!DllGetLCID+0x000a11c7 
  11.     5e7debc2 wwlib!DllGetLCID+0x001d883c 
  12.     5e41f313 wwlib!GetAllocCounters+0x000185ab 
  13.     5e41ec32 wwlib!GetAllocCounters+0x00017eca 
  14.     5e41eb57 wwlib!GetAllocCounters+0x00017def 
  15.     5e41e72a wwlib!GetAllocCounters+0x000179c2 
  16.     5e423d89 wwlib!GetAllocCounters+0x0001d021 
  17.     5e6acca5 wwlib!DllGetLCID+0x000a691f 
  18.     5e422aa0 wwlib!GetAllocCounters+0x0001bd38 
  19.     5e43ed59 wwlib!GetAllocCounters+0x00037ff1 
  20.     5e43ec61 wwlib!GetAllocCounters+0x00037ef9 
  21.     5e48f0c3 wwlib!GetAllocCounters+0x0008835b 
  22.     5e48f050 wwlib!GetAllocCounters+0x000882e8 
  23.     5e4a6aba wwlib!GetAllocCounters+0x0009fd52 
  24.     64270be6 MSPTLS!FsTransformBbox+0x000279b3 
  25.     64270ebd MSPTLS!FsTransformBbox+0x00027c8a 
  26.     64270f2c MSPTLS!FsTransformBbox+0x00027cf9 
  27.     64271196 MSPTLS!FsTransformBbox+0x00027f63 
  28.     6425736a MSPTLS!FsTransformBbox+0x0000e137 
  29.     6428aa6f MSPTLS!FsTransformBbox+0x0004183c 
  30.     6426fbb9 MSPTLS!FsTransformBbox+0x00026986 
  31.     6425684e MSPTLS!FsTransformBbox+0x0000d61b 
  32.     6426ad48 MSPTLS!FsTransformBbox+0x00021b15 
  33.     6428573e MSPTLS!FsTransformBbox+0x0003c50b 
  34.     64285910 MSPTLS!FsTransformBbox+0x0003c6dd 
  35.     64285c7b MSPTLS!FsTransformBbox+0x0003ca48 
  36.     6426b17a MSPTLS!FsTransformBbox+0x00021f47 
  37. 0:000> !address @edi 
  38.  ProcessParametrs 00069738 in range 00069000 0006a000 
  39.  Environment 02b233d8 in range 02b23000 02b24000 
  40.     00160000 : 0023d000 - 00023000 
  41.                     Type     00020000 MEM_PRIVATE 
  42.                     Protect  00000004 PAGE_READWRITE 
  43.                     State    00001000 MEM_COMMIT 
  44.                     Usage    RegionUsageStack 
  45.                     Pid.Tid  880.ac4     
  46. 0:000> dd @esi 
  47. 22870ffd  ???????? ???????? ???????? ???????? 
  48. 2287100d  ???????? ???????? ???????? ???????? 
  49. 2287101d  ???????? ???????? ???????? ???????? 
  50. 2287102d  ???????? ???????? ???????? ???????? 
  51. 2287103d  ???????? ???????? ???????? ???????? 
  52. 2287104d  ???????? ???????? ???????? ???????? 
  53. 2287105d  ???????? ???????? ???????? ???????? 
  54. 2287106d  ???????? ???????? ???????? ???????? 
  55. 0:000> ?@ecx*4 
  56. Evaluate expression: 204 = 000000cc 

可以看到越界讀取了一個(gè)0x19字節(jié)的堆內(nèi)存,試著將另外的204個(gè)字節(jié)復(fù)制到edi中。

正如結(jié)果,棧變量在頂上6個(gè)棧楨傳遞,下面的是通過(guò)其他變量和偏移動(dòng)態(tài)計(jì)算的。沒(méi)有符號(hào)直接加大了跟蹤的難度。

四、寫(xiě)內(nèi)存

 

如果我們繼續(xù)從esi讀,那么可以假定繼續(xù)寫(xiě)是安全的。我知道這是一個(gè)大的猜測(cè),但是利用ole堆噴射或者得到使用eps的的堆,是有可能控制那個(gè)偏移的數(shù)據(jù)的。但是如何覆寫(xiě)?我們看下目標(biāo)棧地址:

  1. 0:000> !py mona do -a 002513c4 -s 0xcc 
  2. Hold on... 
  3. [+] Command used: 
  4. !py mona.py do -a 002513c4 -s 0xcc 
  5. ---------------------------------------------------- 
  6. [+] Dumping object at 0x002513c4, 0xcc bytes 
  7. [+] Preparing output file 'dumpobj.txt' 
  8.     - (Re)setting logfile dumpobj.txt 
  9. [+] Generating module info table, hang on... 
  10.     - Processing modules 
  11.     - Done. Let's rock 'n roll. 
  12. >> Object at 0x002513c4 (0xcc bytes): 
  13. Offset  Address      Contents    Info 
  14. ------  -------      --------    ----- 
  15. +00     0x002513c4 | 0x00000000   
  16. +04     0x002513c8 | 0x000bd62f   
  17. +08     0x002513cc | 0x00002001   
  18. +0c     0x002513d0 | 0x0000ff00   
  19. +10     0x002513d4 | 0xd63b0000   
  20. +14     0x002513d8 | 0x8001000c   
  21. +18     0x002513dc | 0xff000000   
  22. +1c     0x002513e0 | 0x0100ffff   
  23. +20     0x002513e4 | 0x00000000   
  24. +24     0x002513e8 | 0x00000000   
  25. +28     0x002513ec | 0xffffffff   
  26. +2c     0x002513f0 | 0x00000000   
  27. +30     0x002513f4 | 0x00000000   
  28. +34     0x002513f8 | 0x00000000   
  29. +38     0x002513fc | 0x00000000   
  30. +3c     0x00251400 | 0x00000000   
  31. +40     0x00251404 | 0xff000000   
  32. +44     0x00251408 | 0x00000000   
  33. +48     0x0025140c | 0xff000000   
  34. +4c     0x00251410 | 0x00000000   
  35. +50     0x00251414 | 0xff000000   
  36. +54     0x00251418 | 0x00000c48   
  37. +58     0x0025141c | 0xffffffff   
  38. +5c     0x00251420 | 0x00000000   
  39. +60     0x00251424 | 0xff000000   
  40. +64     0x00251428 | 0x00000000   
  41. +68     0x0025142c | 0xff000000   
  42. +6c     0x00251430 | 0x00000000   
  43. +70     0x00251434 | 0x1b132948  ptr to 0x5e52ee80 : wwlib!GetAllocCounters+0x128118 
  44. +74     0x00251438 | 0xff000000   
  45. +78     0x0025143c | 0x00000000   
  46. +7c     0x00251440 | 0x00000000   
  47. +80     0x00251444 | 0x00000000   
  48. +84     0x00251448 | 0x00000000   
  49. +88     0x0025144c | 0x00000000   
  50. +8c     0x00251450 | 0xff000000   
  51. +90     0x00251454 | 0x00000000   
  52. +94     0x00251458 | 0x00000000   
  53. +98     0x0025145c | 0x00000000   
  54. +9c     0x00251460 | 0x00000000   
  55. +a0     0x00251464 | 0x00000000   
  56. +a4     0x00251468 | 0x00000000   
  57. +a8     0x0025146c | 0x00000000   
  58. +ac     0x00251470 | 0x00000000   
  59. +b0     0x00251474 | 0x00000000   
  60. +b4     0x00251478 | 0x00000000   
  61. +b8     0x0025147c | 0x00000000   
  62. +bc     0x00251480 | 0x00000000   
  63. +c0     0x00251484 | 0x00000000   
  64. +c4     0x00251488 | 0x00000000   
  65. +c8     0x0025148c | 0x00000000 

使用mona插件,能夠?qū)⒖截愂S啻笮〉臈5刂忿D(zhuǎn)儲(chǔ),可以看見(jiàn)有個(gè)指針指向.text (wwlib!GetAllocCounters+0x128118)。如果沒(méi)猜錯(cuò),我們不應(yīng)該覆寫(xiě)這個(gè)值。

 

因此,我們可能溢出了一個(gè)棧緩沖區(qū)(可能性不大)。如果我們想命中返回地址,需要知道目的地址+0x1e8處才能出現(xiàn)。好奇之下能夠定位到這里:

  1. ... 
  2. +cc     0x00251490 | 0xff700000   
  3. +d0     0x00251494 | 0x00ffffff   
  4. +d4     0x00251498 | 0x00000000   
  5. +d8     0x0025149c | 0x00000000   
  6. ...  
  7. +1dc    0x002515a0 | 0x1b132be0   
  8. +1e0    0x002515a4 | 0x0000005e   
  9. +1e4    0x002515a8 | 0x002515c4  ptr to self+0x00000200 
  10. +1e8    0x002515ac | 0x5e415bc1  wwlib!GetAllocCounters+0xee59 
  11. [+] This mona.py action took 0:00:01.669000 
  12. 0:000> ub 0x5e415bc1   
  13. wwlib!GetAllocCounters+0xee41: 
  14. 5e415ba9 5e              pop     esi 
  15. 5e415baa 81fbffffff7f    cmp     ebx,7FFFFFFFh 
  16. 5e415bb0 0f873e393c00    ja      wwlib!DllGetLCID+0x1d316e (5e7d94f4) 
  17. 5e415bb6 8b5508          mov     edx,dword ptr [ebp+8] 
  18. 5e415bb9 53              push    ebx 
  19. 5e415bba 50              push    eax 
  20. 5e415bbb 52              push    edx 
  21. 5e415bbc e8b9e9fdff      call    wwlib+0x457a (5e3f457a) 

我們無(wú)法看見(jiàn)調(diào)用棧,因?yàn)闂O蛏仙煺故×耍?/p>

  1. 0:000> ?0x002515ac-@esp 
  2.  
  3. Evaluate expression: 20248 = 00004f18 

接下來(lái)的問(wèn)題是,怎么模擬繼續(xù)執(zhí)行?

 

Bannedit編寫(xiě)了一個(gè)很好的插件counterfeit,可以在windbg中看到用VirtualAlloc分配的塊并且用標(biāo)記的數(shù)據(jù)填充它。我們能繼續(xù)并替換esi的值,繼續(xù)復(fù)制操作。

  1. 0:000> !py cf -a 2000 -f 
  2.                            __                 _____      .__  __    
  3.   ____  ____  __ __  _____/  |_  ____________/ ____\____ |__|/  |_  
  4. _/ ___\/  _ \|  |  \/    \   __\/ __ \_  __ \   __\/ __ \|  \   __\ 
  5. \  \__(  <_> )  |  /   |  \  | \  ___/|  | \/|  | \  ___/|  ||  |   
  6.  \___  >____/|____/|___|  /__|  \___  >__|   |__|  \___  >__||__|   
  7.      \/                 \/          \/                 \/ 
  8.             version 1.0 - bannedit 
  9. Allocated memory @ 0x14130000 with RWX permissions. 
  10. Filling memory... 
  11. Finished filling memory. 
  12. 0:000> dd 0x14130000 
  13. 14130000  41414141 41414142 41414143 41414144 
  14. 14130010  41414145 41414146 41414147 41414148 
  15. 14130020  41414149 4141414a 4141414b 4141414c 
  16. 14130030  4141414d 4141414e 4141414f 41414150 
  17. 14130040  41414151 41414152 41414153 41414154 
  18. 14130050  41414155 41414156 41414157 41414158 
  19. 14130060  41414159 4141415a 4141415b 4141415c 
  20. 14130070  4141415d 4141415e 4141415f 41414160 

現(xiàn)在我們看到esi位于0x14130000:

  1. 0:000> g 
  2. (880.ac4): Access violation - code c0000005 (!!! second chance !!!) 
  3. eax=00000000 ebx=00000000 ecx=00000033 edx=00000002 esi=22870ffd edi=002513c4 
  4. eip=744fb40c esp=0024c694 ebp=0024c69c iopl=0         nv up ei pl nz ac po nc 
  5. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210212 
  6. MSVCR90!memmove+0xfc: 
  7. 744fb40c f3a5            rep movs dword ptr es:[edi],dword ptr [esi] 
  8. 0:000> r @esi=0x14130000 
  9. ... 
  10. 0:000> t 
  11. eax=00000000 ebx=00000000 ecx=00000017 edx=00000002 esi=14130070 edi=00251434 
  12. eip=744fb40c esp=0024c694 ebp=0024c69c iopl=0         nv up ei pl nz ac po nc 
  13. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210212 
  14. MSVCR90!memmove+0xfc: 
  15. 744fb40c f3a5            rep movs dword ptr es:[edi],dword ptr [esi] 
  16. 0:000> dd @edi L1 
  17. 00251434  1b132948 
  18. 0:000> dds poi(@edi) L1 
  19. 1b132948  5e52ee80 wwlib!GetAllocCounters+0x128118 
  20. 0:000> u poi(poi(@edi)) 
  21. wwlib!GetAllocCounters+0x6e3b0: 
  22. 5e475118 55              push    ebp 
  23. 5e475119 8bec            mov     ebp,esp 
  24. 5e47511b 56              push    esi 
  25. 5e47511c 8bf1            mov     esi,ecx 
  26. 5e47511e e814000000      call    wwlib!GetAllocCounters+0x6e3cf (5e475137) 
  27. 5e475123 f6450801        test    byte ptr [ebp+8],1 
  28. 5e475127 7407            je      wwlib!GetAllocCounters+0x6e3c8 (5e475130) 
  29. 5e475129 56              push    esi 
  30. 0:000> t 
  31. eax=00000000 ebx=00000000 ecx=00000016 edx=00000002 esi=14130074 edi=00251438 
  32. eip=744fb40c esp=0024c694 ebp=0024c69c iopl=0         nv up ei pl nz ac po nc 
  33. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210212 
  34. MSVCR90!memmove+0xfc: 
  35. 744fb40c f3a5            rep movs dword ptr es:[edi],dword ptr [esi] 
  36. 0:000> dds poi(@edi-4) L1 
  37. 4141415d  ???????? 

我們能看到我們覆寫(xiě)數(shù)據(jù)的指針,指向了來(lái)自esi中值對(duì)應(yīng)的函數(shù)。因?yàn)閑si中的數(shù)據(jù)是標(biāo)記過(guò)的,我們能知道用來(lái)覆寫(xiě)指針的偏移。

五、曝光

 

再次觀(guān)察調(diào)用棧,注意到memmove()的調(diào)用。

  1. 0:000> kvn L2 
  2.  # ChildEBP RetAddr  Args to Child               
  3. 00 0024c69c 5e3f9b36 002513bf 22870ff8 000000d3 MSVCR90!memmove+0xfc 
  4. WARNING: Stack unwind information not available. Following frames may be wrong. 
  5. 01 0024c6b0 5e413843 22870ff8 002513bf 000000d3 wwlib!DllGetClassObject+0x455a 

用Hex-Rays反編譯器,可以看到這個(gè)函數(shù)只是memmove()的一個(gè)封裝,并在wwlib庫(kù)中調(diào)用。可以重命名sub_316d9b16函數(shù)為memmove_wrapper_1。

  1. int __stdcall memmove_wrapper_1(void *Src, void *Dst, size_t Size) 
  2.   int result; // eax@2 
  3.   if ( Size > 0x7FFFFFFF ) 
  4.     result = MSO_1511(1647603307, 0); 
  5.   else 
  6.     result = (int)memmove(Dst, Src, Size); 
  7.   return result; 

如果大小大于MAX_INT,一個(gè)整形溢出異常被觸發(fā)。另外也沒(méi)有合理的校驗(yàn)小雨目的緩沖區(qū)的情況。

為了利用,我們得知道m(xù)emmove()如何訪(fǎng)問(wèn)和被調(diào)用。

 

所以設(shè)置一個(gè)斷點(diǎn)bp wwlib!DllGetClassObject+0x4554 ".printf \"calling memmove(%x, %x, %x);\\n\", poi(@esp), poi(@esp+4), poi(@esp+8); gc"并重新運(yùn)行PoC。

  1. calling memmove(271164, 26fb3c, e); 
  2. calling memmove(271172, 26fb4a, f); 
  3. calling memmove(271148, 2266efe0, 3); 
  4. calling memmove(27114b, 2266efe3, 3); 
  5. calling memmove(27114e, 2266efe6, 3); 
  6. calling memmove(271151, 2266efe9, 3); 
  7. calling memmove(271154, 2266efec, 3); 
  8. calling memmove(271157, 2266efef, 4); 
  9. calling memmove(27115b, 2266eff3, 5); 
  10. calling memmove(27122e, 27115b, 5); 
  11. calling memmove(27115b, 2266eff8, d3); 
  12. (5f0.59c): Access violation - code c0000005 (first chance) 
  13. First chance exceptions are reported before any exception handling. 
  14. This exception may be expected and handled. 
  15. eax=00000000 ebx=00000000 ecx=00000033 edx=00000002 esi=2266effd edi=00271160 
  16. eip=744fb40c esp=0026c430 ebp=0026c438 iopl=0         nv up ei pl nz ac po nc 
  17. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210212 
  18. MSVCR90!memmove+0xfc: 
  19. 744fb40c f3a5            rep movs dword ptr es:[edi],dword ptr [esi] 

有一系列的源緩沖區(qū)是0x2266efXX開(kāi)頭的,并且目的緩沖區(qū)是0x002711YY。懷疑這是在一個(gè)錯(cuò)誤的循環(huán)中多次調(diào)用memmove()。

 

我決定分析每個(gè)調(diào)用來(lái)判斷是否是獨(dú)特的。在windbg中執(zhí)行‘k’命令不能繼續(xù)分割它,我們已經(jīng)準(zhǔn)備在上述斷點(diǎn)減緩執(zhí)行。我決定用一個(gè)輕量的windbg插件來(lái)收集返回地址:

  1. from pykd import * 
  2. mashed = 0 
  3. for frame in getStack(): 
  4.     mashed += frame.returnOffset 
  5. print "stack hash: 0x%x" % mashed 
  1. 0:000> !py sh 
  2. stack hash: 0x199a6804c9 

現(xiàn)在將它添加到我們的斷點(diǎn),換一行并在末尾增加空格,最后重新運(yùn)行:

  1. 0:010> bu wwlib!DllGetClassObject+0x4554 ".printf \"calling memmove(%x, %x, %x); \", poi(@esp), poi(@esp+4), poi(@esp+8); !py sh; gc" 
  2. 0:010> g 
  3. ... 
  4. calling memmove(190fa4, 18f97c, e); stack hash: 0x18a96a3a98 
  5. calling memmove(190fb2, 18f98a, f); stack hash: 0x18a96a3a98 
  6. calling memmove(190f88, 49d7fe0, 3); stack hash: 0x1847ab6993 
  7. calling memmove(190f8b, 49d7fe3, 3); stack hash: 0x1847ab6993 
  8. calling memmove(190f8e, 49d7fe6, 3); stack hash: 0x1847ab6993 
  9. calling memmove(190f91, 49d7fe9, 3); stack hash: 0x1847ab6993 
  10. calling memmove(190f94, 49d7fec, 3); stack hash: 0x1847ab6993 
  11. calling memmove(190f97, 49d7fef, 4); stack hash: 0x1847ab6993 
  12. calling memmove(190f9b, 49d7ff3, 5); stack hash: 0x1847ab6993 
  13. calling memmove(19106e, 190f9b, 5); stack hash: 0x1847ad8b4c 
  14. calling memmove(190f9b, 49d7ff8, d3); stack hash: 0x1847ab6993 
  15. (7dc.71c): Access violation - code c0000005 (first chance) 
  16. First chance exceptions are reported before any exception handling. 
  17. This exception may be expected and handled. 
  18. eax=00000000 ebx=00000000 ecx=00000033 edx=00000002 esi=049d7ffd edi=00190fa0 
  19. eip=744fb40c esp=0018c270 ebp=0018c278 iopl=0         nv up ei pl nz ac po nc 
  20. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210212 
  21. MSVCR90!memmove+0xfc: 
  22. 744fb40c f3a5            rep movs dword ptr es:[edi],dword ptr [esi] 

現(xiàn)在可以判斷memmove() 在一個(gè)循環(huán)中被調(diào)用,因?yàn)樵谕粋€(gè)棧哈希值0x1847ab6993。

六、影響

因?yàn)椴荒芤绯龇祷氐刂泛椭笤趯?xiě)或復(fù)制操作中會(huì)訪(fǎng)問(wèn)和用到的一些值,這個(gè)漏洞的影響非常小。

Microsoft將此漏洞修補(bǔ)為“Microsoft Office信息泄露漏洞”,這在本文中介紹的上下文中說(shuō)的通。然而,如果我們能夠在溢出覆蓋棧中.text中的一個(gè)指針,這個(gè)漏洞將影響更大。

在sub_316f3232函數(shù)中,有525處調(diào)用memmove_wrapper_1(),意味著有有多種途徑可以觸發(fā)這個(gè)漏洞。

另外在棧中沒(méi)有一個(gè)函數(shù)使用了/GS保護(hù),意味著如果返回地址被覆蓋,沒(méi)有系統(tǒng)級(jí)別的緩解措施能夠緩解它。

七、總結(jié)

 

許多復(fù)雜的漏洞在office代碼中一直存在,只是難以被發(fā)現(xiàn)。甚至更難去調(diào)查根因并開(kāi)發(fā)利用,如果微軟開(kāi)放了符號(hào)表,將能更好的發(fā)現(xiàn)漏洞。

責(zé)任編輯:趙寧寧 來(lái)源: 安全客
相關(guān)推薦

2021-09-23 15:20:18

微軟漏洞代碼

2020-10-25 09:39:49

漏洞分析

2022-06-14 09:00:21

漏洞補(bǔ)丁

2016-01-27 14:30:20

2021-06-15 10:58:17

微軟officeMSGraph安全漏洞

2021-10-26 11:47:22

微軟office漏洞黑客

2016-03-21 14:47:45

微軟桌面版Office 2

2015-03-13 18:08:49

2025-01-22 12:47:06

2016-10-18 14:22:41

2017-05-25 22:20:05

2020-10-09 08:00:00

漏洞

2013-11-29 11:01:44

2023-12-08 09:00:00

漏洞攻擊

2025-09-24 13:49:44

2015-08-14 13:53:24

2013-11-06 15:09:27

2021-09-09 06:32:28

零日漏洞網(wǎng)絡(luò)攻擊微軟

2024-08-12 15:26:42

2025-07-01 09:32:36

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品视频第一页| 激情av中文字幕| 国产一二三区在线视频| 九九久久精品视频| 欧美精品成人在线| 久久精品国产亚洲AV熟女| 欧美一区二区三区婷婷| 亚洲国产精品尤物yw在线观看| 麻豆成人av| 国产一区二区麻豆| 国产精品入口| 久久天天躁日日躁| 日本aaa视频| 国产精品一区三区在线观看| 欧美日韩在线视频一区| 欧美野外wwwxxx| 国产在线精品视频| 香蕉久久久久久久av网站| 亚洲精品理论电影| 99re精彩视频| 色综合桃花网| 亚洲乱码精品一二三四区日韩在线| 国产一区二区在线网站| 国产有码在线观看| 亚洲欧美大片| 久久久久久久国产| 国产一区二区三区视频播放| 久久1电影院| 欧美精品高清视频| 亚洲视频在线a| 午夜裸体女人视频网站在线观看| 亚洲狼人国产精品| 在线视频91| av在线收看| 久久精品一区二区三区不卡牛牛| 国产另类第一区| 精品国产999久久久免费| 久久99精品久久久久久国产越南| 国产999精品| 在线观看中文字幕视频| 激情久久婷婷| 九九热精品视频国产| 人与动物性xxxx| 久久视频在线| 中文字幕亚洲在线| 人妻无码一区二区三区免费| 怕怕欧美视频免费大全| 国产视频久久网| 亚洲乱码国产乱码精品精大量| av日韩在线播放| 欧美α欧美αv大片| 91丨porny丨九色| 国产亚洲精aa在线看| 欧美精品乱码久久久久久按摩| 三级a在线观看| www.久久.com| 欧美日韩你懂的| 九九精品久久久| 成人噜噜噜噜| 精品国产百合女同互慰| 久久久久亚洲无码| 亚洲国产网址| 在线电影中文日韩| 久久久精品少妇| 综合精品久久| 久久噜噜噜精品国产亚洲综合 | 欧美黄色成人网| 欧美日韩一级大片| 亚洲无线一线二线三线区别av| 欧美精品激情blacked18| 精品在线视频观看| 销魂美女一区二区三区视频在线| 欧美又大粗又爽又黄大片视频| 91在线视频在线观看| 日本亚洲一区二区| 91久色国产| 日韩亚洲视频在线观看| 中文字幕国产一区| 大桥未久一区二区| 97久久人人超碰caoprom| 岛国av一区二区| 中文字幕永久有效| 第一区第二区在线| 亚洲色图美腿丝袜| 三级在线观看免费大全| 亚洲精品综合网| av中文字幕一区| 秋霞在线观看一区二区三区| 福利视频在线播放| |精品福利一区二区三区| 91午夜精品| 台湾佬中文娱乐久久久| 欧美专区日韩专区| 99精品视频免费版的特色功能| 18国产精品| 中文在线资源观看视频网站免费不卡| 国产精品麻豆免费版现看视频| 欧美福利专区| 国产91色在线| av免费在线观看不卡| 99在线视频精品| 中文字幕一区二区三区在线乱码| 性直播体位视频在线观看| 欧美性xxxx| 亚洲区 欧美区| 国产亚洲第一伦理第一区| 不卡av在线网站| 高潮毛片又色又爽免费 | 国产在线播放精品| 在线视频一区二区| 亚洲精品国产精品乱码| 韩国欧美一区二区| 鲁丝片一区二区三区| 四虎亚洲成人| 91精品在线免费| 91激情视频在线观看| 精品91在线| 成人写真视频福利网| 欧美精品a∨在线观看不卡| 一区二区三区小说| 日本中文字幕精品—区二区| 免费观看不卡av| 久久久久亚洲精品| 国产欧美第一页| 亚洲国产岛国毛片在线| 高清在线观看免费| 红杏视频成人| 欧美黑人xxx| 91禁在线观看| 成人免费毛片app| 日本a在线天堂| 国产精品一区二区精品| 精品国内自产拍在线观看| 一级片免费在线播放| 91亚洲精品乱码久久久久久蜜桃| 9色porny| 国产伦乱精品| 性色av一区二区三区| 国产综合在线播放| 亚洲黄一区二区三区| 亚洲在线观看网站| 欧美日韩国产一区二区三区不卡| 欧美伊久线香蕉线新在线| 污污视频在线免费看| 亚洲成人黄色影院| av无码av天天av天天爽| 一本色道久久综合亚洲精品高清| 国产一区精品视频| 激情黄产视频在线免费观看| 日韩高清免费在线| 国产午夜性春猛交ⅹxxx| 69国产精品视频免费观看| 国产一区二区三区在线观看免费视频| 99久久99精品久久久久久| 国产精品久久久久久超碰| 日本a一级在线免费播放| 欧美日韩在线免费观看| 91中文字幕永久在线| 日韩中文字幕区一区有砖一区 | 亚洲国产精品国自产拍久久| 一区二区三区日本| 人妻换人妻a片爽麻豆| 一本久久综合| 日韩欧美99| 青青久久精品| 欧美老少配视频| 四虎永久在线观看| 色又黄又爽网站www久久| 国产黄色大片免费看| 狠狠色伊人亚洲综合成人| 青青青在线观看视频| 日韩中文av| 麻豆一区二区三| 一本一道久久a久久综合精品| 日本www在线观看视频| 欧美电影精品一区二区| 国产 日韩 欧美 在线| 久久色.com| 美女被艹视频网站| 国产精品视频| 男同互操gay射视频在线看| 成功精品影院| 国产精品久久不能| 丝袜美腿av在线| 亚洲色图50p| 国产v在线观看| 欧美性猛交xxxx富婆| 中文字幕求饶的少妇| 成人自拍视频在线观看| 欧美日韩在线成人| 国产一区激情| 亚洲国产成人不卡| 精品国产导航| 成人久久一区二区| 涩涩涩在线视频| 久久精品中文字幕电影| 欧美孕妇性xxxⅹ精品hd| 91精品国产高清一区二区三区蜜臀 | 日本一二三区视频在线| ccyy激情综合| 国产精品人人做人人爽| 美女91在线| 中文字幕视频一区二区在线有码| 亚洲国产精品久久人人爱潘金莲| 欧美性感一类影片在线播放| 精品在线免费观看视频| 国产网红主播福利一区二区| 久久黄色一级视频| 久久久久久一区二区| 久久久久久久香蕉| 天天综合亚洲| 亚洲国产精品综合| 国产精品三p一区二区| 国产一区二区香蕉| 欧美成人app| 国产91|九色| 日本欧美电影在线观看| 日韩中文字幕欧美| 国产大学生校花援交在线播放| 精品美女一区二区| 国产色片在线观看| 欧美日韩免费观看一区三区| 亚洲s码欧洲m码国产av| 香蕉成人伊视频在线观看| fc2ppv在线播放| 国产精品系列在线| 欧美人与性囗牲恔配| 久久日韩精品一区二区五区| 小毛片在线观看| 国产成人一区二区精品非洲| 五月天婷婷亚洲| 久久成人免费网| 一道本视频在线观看| 日韩高清国产一区在线| 欧在线一二三四区| 日韩中文字幕麻豆| 日本a√在线观看| 麻豆成人av在线| 色悠悠久久综合网| 久久99久久99| 日本高清免费在线视频| 国产精品18久久久| 97免费公开视频| 国产成人激情av| 亚洲婷婷在线观看| 99在线视频精品| 亚洲永久精品ww.7491进入| 2023国产精品视频| 无码人妻aⅴ一区二区三区69岛| 久久久久久久久99精品| 国产精品成人无码免费| 欧美激情在线一区二区三区| 一区二区三区久久久久| 中文字幕av一区二区三区| av片在线免费看| 亚洲欧美另类在线| 久操免费在线视频| 精品国产乱码久久久久酒店| 五月激情六月丁香| 在线看国产一区| 亚洲视频在线观看一区二区| 91精品黄色片免费大全| www.xxxx国产| 亚洲精品久久在线| 粉嫩一区二区三区国产精品| 日韩亚洲欧美成人| 中文字幕在线观看网站| 97精品免费视频| 免费观看成人性生生活片| 成人精品视频久久久久| 99a精品视频在线观看| 蜜桃av久久久亚洲精品| 久久免费大视频| 国产xxxx振车| 久久精品中文| 中文字幕剧情在线观看| 99久久精品免费看国产免费软件| 欧美性猛交xxxx乱| 亚洲欧美国产高清| 97久久久久久久| 51精品视频一区二区三区| 黄色片网站免费在线观看| 亚洲天堂2020| 亚洲综合图区| 99久久伊人久久99| 欧美午夜精品久久久久久蜜| 97色伦图片97综合影院| 国产毛片视频网站| 日日噜噜夜夜狠狠视频欧美人 | av在线一区二区| 丁香激情五月少妇| 一区二区日韩电影| 日韩不卡高清视频| 欧美tickling网站挠脚心| 国产午夜视频在线观看| 久久91精品国产| 视频在线日韩| 国产在线资源一区| 国产精品99久久| www.玖玖玖| 国产精品一二三四| av黄色在线免费观看| 亚洲自拍欧美精品| 一本一道精品欧美中文字幕| 亚洲第一区第一页| 国产1区在线| 日韩男女性生活视频| 欧美成a人免费观看久久| 日本成人性视频| 久久综合婷婷| 艳妇乳肉亭妇荡乳av| 亚洲精品国产a| 中文字幕 欧美激情| 日韩电影网在线| 在线xxxx| 91视频国产高清| 日韩一区欧美| 国内自拍视频一区| 91免费视频网址| 特级特黄刘亦菲aaa级| 欧美日韩电影免费看| 91美女片黄在线观看游戏| 亚洲精品亚洲人成在线| 超级碰在线观看| 麻豆国产精品官网| 亚洲AV无码国产成人久久| 亚洲国产精品久久人人爱蜜臀| 国产精品久久久久久久久毛片| 亚洲美女在线看| 精品众筹模特私拍视频| 国产在线视频2019最新视频| 国产一区二区精品福利地址| 国产av天堂无码一区二区三区| 国产乱子伦视频一区二区三区 | 狠狠色狠狠色综合系列| 三年中国中文观看免费播放| 欧美日韩久久久久| 少妇高潮一区二区三区99小说| 欧美日本中文字幕| 亚洲网一区二区三区| 亚洲色婷婷久久精品av蜜桃| 国产精品资源站在线| 日韩成人短视频| 欧美一级久久久久久久大片| 国产精品无码网站| 亚洲精品美腿丝袜| 国产手机av在线| 久久躁日日躁aaaaxxxx| 国产精品一区免费在线| 色一情一乱一乱一区91| 国产精品亚洲第一区在线暖暖韩国| 手机av在线看| 日韩一区和二区| av在线看片| 国产精品国产三级国产专区53 | 亚洲狠狠婷婷综合久久久| 国产精品久久久久9999高清| 精品人妻一区二区免费视频| 欧美日韩视频在线| 国产区视频在线| 国产精品一区专区欧美日韩| 外国成人激情视频| 欧美一级片在线免费观看| 亚洲国产成人av网| 精品亚洲综合| 国产欧美在线观看| 欧美日韩国产高清| 国产精品一区二区入口九绯色| 色综合久久中文综合久久97| 北条麻妃在线| 久久精品72免费观看| 蜜桃传媒一区二区亚洲| 欧美日韩精品欧美日韩精品 | 欧美激情精品久久久久久变态| 国产96在线亚洲| 欧美激情国产精品日韩| 欧美激情一区二区在线| 97人妻精品一区二区三区| 久久免费精品视频| 国产一区二区三区网| 亚洲av无日韩毛片久久| 午夜影院久久久| 国产人成在线观看| 99re国产在线播放| 国产精品美女| 国产第一页浮力| 日韩精品在线观看一区| 九七影院97影院理论片久久 | 久久久水蜜桃| 国产在线观看一区二区| 日产精品久久久| 欧美另类在线观看| 国产精品欧美在线观看| 中文字幕在线播放一区二区| 日本乱人伦aⅴ精品| 青春草免费在线视频| 日韩久久精品一区二区三区| 国产成人精品亚洲日本在线桃色| 青青艹在线观看| 97视频国产在线|