IEIFRAM漏洞的簡單分析和臨時補丁(轉)

worldblog發表於2007-09-18
IEIFRAM漏洞的簡單分析和臨時補丁(轉)[@more@]

  1. 漏洞的由來

  bugtraq上有人釋出了一個針對IE iframe的exploit, 用的方法非常巧妙,針對2K IE6能做到基本通用了. 牛人就是牛人.

  2. 漏洞的分析.

  IE 在處理iframe 標籤的時候,會呼叫SHDOCVW!CBaseBrowser2::SetFrameName函式來進行unicode copy(wcscpy):

  .text:71754F67 ; public: virtual long __stdcall CBaseBrowser2::SetFrameName(unsigned short *)

  .text:71754F67 ?SetFrameName@CBaseBrowser2@@UAGJPAG@Z proc near ; DATA XREF: .text:717233B8o

  .text:71754F67

  ; .text:71739900o

  .text:71754F67

  .text:71754F67 arg_0

  = dword ptr

  4

  .text:71754F67 arg_4

  = dword ptr

  8

  .text:71754F67

  .text:71754F67

  mov

  eax, [esp+arg_0]

  .text:71754F6B

  push

  [esp+arg_4]

  ; wchar_t *

  .text:71754F6F

  add

  eax, 368h

  .text:71754F74

  push

  eax

  ; wchar_t *

  .text:71754F75

  call

  ds:__imp__wcscpy

  .text:71754F7B

  pop

  ecx

  .text:71754F7C

  pop

  ecx

  .text:71754F7D

  xor

  eax, eax

  .text:71754F7F

  retn

  8

  .text:71754F7F ?SetFrameName@CBaseBrowser2@@UAGJPAG@Z endp

  在複製iframe的name時候,沒有進行邊界檢查,導致了溢位.

  3. 能覆蓋的東西

  這裡沒有進行深入研究,大部分引用exp的原文.

  這個exp覆蓋了一個結構,什麼結構目前未知, 按照作者的說法,是在

  7178EC02

  8B08

  MOV

  ECX, DWORD PTR [EAX]

  //[0x0D0D0D0D] == 0x0D0D0D0D, so ecx = 0x0D0D0D0D.

  7178EC04

  68 847B7071

  PUSH

  71707B84

  7178EC09

  50

  PUSH

  EAX

  7178EC0A

  FF11

  CALL

  NEAR DWORD PTR [ECX]

  這裡的時候,因為其中的一個指標被覆蓋,最後當程式執行到

  7178EC0A 的時候,會跳轉到ecx.而ecx是一個受控制的區域.(其實

  是透過暴力擴大記憶體區域,使0d0d0d0d總能指向我們的javascript請求的記憶體塊) 這個從他的exp上能很好的看出來,這裡就不多說了.

  4. 補丁.

  目前microsoft官方還沒有釋出補丁, 但是未了避免遭受毒害, 我還是想簡單的patch一下. 思想是用msvcrt!wcsncpy來代替wcscpy.

  因為要保證位元組一至,就沒有嚴格做到程式的輸入/返回一樣.

  下面是做的簡單補丁:

  text:71754F67 sub_71754F67

  proc near

  ; DATA XREF: .text:717233B8o

  .text:71754F67

  ; .text:71739900o

  .text:71754F67

  .text:71754F67 arg_0

  = dword ptr

  4

  .text:71754F67

  .text:71754F67

  mov

  eax, [esp+arg_0]

  .text:71754F6B

  push

  20h

  .text:71754F6D

  push

  esi

  .text:71754F6E

  add

  eax, 368h

  .text:71754F73

  push

  eax

  .text:71754F74

  mov

  eax, 780104FCh

  .text:71754F79

  call

  eax

  .text:71754F7B

  pop

  ecx

  .text:71754F7C

  pop

  ecx

  .text:71754F7D

  pop

  eax

  .text:71754F7E

  nop

  .text:71754F7F

  retn

  8

  .text:71754F7F sub_71754F67

  endp

  因為在前面呼叫的時候就是push esi來做arg 2的,所以這裡直接用push esi 節省了幾個位元組的指令. 後面本來是要返回0的,但

  因為call 一個8位元組的地址在6位元組內沒有解決(不知道大家有沒有好方法?) 所以只好犧牲eax了, 其實呼叫返回後eax本身也沒用.

  [root@DUMPLOGIN C:WINNTsystem32dllcache]#fc /b shdocvw.dll shdocvw.dll.org

  正在比較檔案 shdocvw.dll 和 SHDOCVW.DLL.ORG

  0005436B: 6A FF

  0005436C: 20 74

  0005436D: 56 24

  0005436E: 05 08

  0005436F: 68 05

  00054370: 03 68

  00054371: 00 03

  00054373: 50 00

  00054374: B8 50

  00054375: FC FF

  00054376: 04 15

  00054377: 01 6C

  00054378: 78 12

  00054379: FF 70

  0005437A: D0 71

  0005437D: 58 33

  0005437E: 90 C0

  5. 使用.

  patch補丁後, 用zap 刪除掉shdocvw.dll,然後將這個copy過去,開啟IE, 再來瀏覽exploit頁,發現已經攻擊無效了.

  6. 鬱悶:

  很奇怪的是,在explorer中載入我修改後的shdocvw.dll和IE中載入的不一樣,

  具體在:

  explorer中:

  0:015> uf SHDOCVW!CBaseBrowser2::SetFrameName

  SHDOCVW!CBaseBrowser2::SetFrameName:

  00dd4f67 8b442404

  mov

  eax,[esp+0x4]

  00dd4f6b 6a20

  push

  0x20

  00dd4f6d 56

  push

  esi

  00dd4f6e 0568030000

  add

  eax,0x368

  00dd4f73 50

  push

  eax

  00dd4f74 b8fc040178

  mov

  eax,0x780104fc

  00dd4f79 6760

  pushad

  00dd4f7b 59

  pop

  ecx

  00dd4f7c 59

  pop

  ecx

  00dd4f7d 58

  pop

  eax

  00dd4f7e 90

  nop

  00dd4f7f c20800

  ret

  0x8

  IE中:

  SHDOCVW!CBaseBrowser2::SetFrameName:

  71754f67 8b442404

  mov

  eax,[esp+0x4]

  71754f6b 6a20

  push

  0x20

  71754f6d 56

  push

  esi

  71754f6e 0568030000

  add

  eax,0x368

  71754f73 50

  push

  eax

  71754f74 b8fc040178

  mov

  eax,0x780104fc

  71754f79 ffd0

  call

  eax

  71754f7b 59

  pop

  ecx

  71754f7c 59

  pop

  ecx

  71754f7d 58

  pop

  eax

  71754f7e 90

  nop

  71754f7f c20800

  ret

  0x8

  注意到了嗎?

  00dd4f79 6760

  pushad

  vs

  71754f79 ffd0

  call

  eax

  這裡沒有深入研究, 不知道為什麼會出現這種情況.

  

·上一篇:

·下一篇:
 
     最新更新
·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·


| | | | | | |

Copyright © 2004 - 2007 All Rights Reserved

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-969906/,如需轉載,請註明出處,否則將追究法律責任。

IEIFRAM漏洞的簡單分析和臨時補丁(轉)
請登入後發表評論 登入
全部評論

相關文章