ITPub博客

首页 > IT基础架构 > 网络安全 > IEIFRAM漏洞的简单分析和临时补丁(转)

IEIFRAM漏洞的简单分析和临时补丁(转)

原创 网络安全 作者:worldblog 时间:2007-09-18 14:14:55 0 删除 编辑
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

  这里没有深入研究, 不知道为什么会出现这种情况.

  

本文来自:http://www.linuxpk.com/30505.html

-->linux电子图书免费下载和技术讨论基地

·上一篇:SYMANTEC防火墙内核溢出利用之非安全返回法二

·下一篇:不用模板只用ASP+FSO生成静态HTML页的一个方法
 
     最新更新
·注册表备份和恢复

·低级格式化的主要作用

·如何防范恶意网站

·常见文件扩展名和它们的说明

·专家:警惕骇客骗局,严守企业信息

·PGPforWindows介紹基本设定(2)

·解剖安全帐号管理器(SAM)结构

·“恶作剧之王”揭秘

·绿色警戒

·黑客反击战

·网络四大攻击方法及安全现状描述

·可攻击3种浏览器代码流于互联网

·黑客最新的兴趣点,下个目标会是谁?

·“僵尸”——垃圾邮件的主要传播源

·Lebreat蠕虫惊现3变种

·POSTFIX反病毒反垃圾Ų…

·在FreeBSD上用PHP实现在线添加FTP用户

·简单让你在FreeBSDADSL上…

·安全版本:OpenBSD入门技巧解析

·Internet连接共享上网完全攻略

·关于ADSL上网网速常识

·静态缓存和动态缓存的比较

·最友好的SQL注入防御方法

·令网站提速的7大秘方

·网络基础知识大全

·路由基本知识

·端口映射的几种实现方法

·VLAN经典诠释

·问题分析与解决——ADSL错误代码

·问题分析——关于2条E1的线路绑定


关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 网址大全 | 友情链接 | 免费注册

Copyright © 2004 - 2007 All Rights Reserved

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-969906/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论