设为主页 | 加入收藏 | 繁體中文

IE6sp1 showModalDialog方法远程文件下载执行漏洞分析

  作者:czy  http://czy82.mblogger.cn/
  最近泰半年IE一连出了好几个漏洞,其中最严重也是如今网页木马利用最多
  的一个当属IE Object Data的漏洞了.可这已经是客岁8月份就公布的.只需打了
  Q822925就能补上了,所以我一直在找一个能敷衍Q822925的新洞洞并好好分析一下.
  终于机会来了,几天前我去绿盟(nsfocus.com)看贴子,注意到IE又出了个新洞
  洞,文章标题是Microsoft Internet Explorer Modal Dialog区域绕过漏洞,绿盟对这个
  洞洞的形貌大意是:Microsoft Internet Explorer存在漏洞允许跨区域拜访,长途攻击
  者可以利用这个漏洞在当地电脑区域中执行恶意脚本。攻击者可以构建通报一个动态创建的
  IFrame给Modal Dialog对象,并且这个对象调用通过Windows Script Encoder (screnc.exe)
  编码,诱利用户翻开时,可造成以客户权限在当地区上下文执行恶意脚本,包罗下载安装恶意程序。
  这个漏洞也可招致拜访内部域属性,允许其他范例的攻击如获得攻击者选择的敏感或私有信息。
  看来这简直是一个大洞洞哦,还好没有多少人注意到这个洞洞,而文章中又给出了一篇老
  外写的分析名字叫:对Ilookup木马的分析(An analysis of the Ilookup Trojan)(http://62.131.86.111/analysis.htm)
  代码都在这儿了还不分析做什么呢?本来以为分析会比力简单的因为代码都是现成的,但详细
  分析后才发现不少题目.所以下面的分析基于我自已的代码.
  测试体系:win2000 pro sp4+ie6 sp1+Q822925
  下面我就根据漏洞的利用思绪一步步介绍:
  第一步:
  在网页中产生一个IFRAME并且内容为当地文件看到这句大概各人会想到:
 
  把如下代码存在iframe.htm中在当地欣赏显示如下:(图iframe1.bmp)
  这阐明当地html文件可以通过IFRAME仿问当地的别的文件因为他们都属于"当地电脑区域".
  把这个iframe.htm存放在办事器上试试:(图iframe2.bmp)
  这阐明网页文件通过IFRAME不能仿问当地的文件因为他们一个属于"当地电脑区域"一个是"internet区域",而IE的安全设置为
  不能对不同区域的文件进行仿问.
  怎样办呢这儿有一个最新的跨域仿问洞洞:老外的代码如下:
 
  下面是redir.php的代码
  <% Thread.sleep(1500);
  response.setStatus(302);
  response.setHeader("Location", "URL:ms-its:C:\\WINNT\\Help\\iexplore.chm::/iegetsrt.htm");
  %>
  看看老外是怎样发现这个洞洞的:
  2002年9月有个老外发现了一个洞洞通过
  response.setHeader("Location", "ms-its:C:\\WINNT\\Help\\iexplore.chm::/iegetsrt.htm");
  如许的代码就可以在网页中仿问当地资源了,但是IE6SP1补上了这个洞洞.不过在ms-its:后面加上个URL标识就又可以仿问了.
  我把代码改成ASP的如下:
  ----------------re.asp------------
  <%
  TimeIt(4)
  Response.Status = "302"
  Response.AddHeader "Location","URL:ms-its:C:\WINNT\Help\iexplore.chm::/iegetsrt.htm"
  Function TimeIt(N)
  StartTime = Timer
  do while endtime-starttime   EndTime = Timer
  loop
  End Function
  %>
  -------------------end-------------
  其中Response.Status是设置办事器要相应的状态行的值。Response.status="状态形貌字符串",
  字符串可以为一个三位整数或一串阐明笔墨构成,但必需防在之前。这儿只能是302
  Response.AddHeader是设置HTTP的头字段.
  重新写一个叫iframe2.htm的文件内容如下:
 
  执行后如图iframe3.bmp怎样样如今我们就跳过了IE6SP1的安全限制.乐成的在internet区域的文件中参加了一个
  "我的电脑区域"的文件.
  第二步:
  众所周之我的电脑区域中的网页代码的安全限定要小得多,如今我们要做的就是怎样把我们的代码"注入"到我的电脑区域中
  并且执行它们.这儿老外利用了第二个洞洞就是标题中的showModalDialog方法长途文件下载执行漏洞.
  先来看看下面的代码:(代码较为复杂请细细阅读)
  -------------------------show.htm-------------
 
 
  -------------------------end------------------
  ---------------------mdold.htm-----------------
 
  ---------------------end-----------------------
  注意包罗当地电脑区域文件的IFRAME叫myiframe.
  起首网页利用document.write 成生这个IFrame,然后调用setTimeout隔0.1秒在myiframe中执行execScript方法.
  这儿要注意的是如果我们把show.htm和modold.htm放在当地执即将出现两处提示说回绝仿问.不过我们把setTimeout
  的值改大点就行了.但是如许在网站上又将出现"回绝仿问"的提示.所以后面我所有的测试均在网站上测试当地不再考虑了.
  另外还要阐明的是:re.asp刚开始执行的时候必需有一个延时,否则仍旧会提示"回绝仿问"!!!
  ----------------begin--------
  TimeIt(4)          '调用自定义函数延时4秒
  Function TimeIt(N)
  StartTime = Timer          '得到函数开始执行时的时间
  do while endtime-starttime   EndTime = Timer
  loop
  End Function
  -----------------end---------
  适才说到在myiframe中调用execScript第一次调用时参数是InjectedDuringRedirection.toString()即是是在iegetsrt.htm中生成
  如下代码:
  function InjectedDuringRedirection(){
  var bbb="i am czy";
  aaa= {h : bbb};
  showModalDialog('modold.htm',aaa,"dialogTop:500\;dialogLeft:200\;dialogHeight:1\;dialogWidth:1\;")
  }
  第二次调用参数为InjectedDuringRedirection()就即是调用了适才生成的代码.
  (toString的详细介绍请参见MSDN)
  把下面的代码放在网站中测试.我们会看到一个模态网页框弹了出来.图mod1.bmp
  这儿好象能阐明我们的代码在当地文件iegetsrt.htm中注入乐成.不过注意模态网页的状态栏显示的区域仍旧是internet失望了吧.
  看来IE的洞洞还不是那么好找的.究竟是怎样回事呢?我是如许料想的?
  老师成了myiframe它的src是由re.asp生成的而且存心延时了4秒.然后在src中的当地文件还没有加载的时候代码被注入到了其中.
  这时IE将做安全查抄因为src还没有被加载所以myiframe的属性还是internet区域,当然我们的代码一定就能被注入.这也就能解释
  为什么把setTimeout设为5秒后为什么会提示"回绝仿问"了.
  所以到如今为止我们在modold.htm中的代码的执行权限还是在"internet区域"中,我们还没有打破ie的执行限制.换句话说就是
  我们试图在modold.htm中加载一些恶意代码是没有用的.但为什么老外末了解决了这个题目呢?逐步看吧,it's a very acumen code.   
  先来看看showModalDialog方法的的第二个参数.MSDN中阐明如下:
  利用这个参数可以传输任何款式的值给对话框,对话框通过window.dialogArguments可以得到传过去的值
  老外传了一个window过去.这个window也就是myiframe
  showModalDialog('md.htm',window,"resizab.......................).location=".............."
  新的模态对话框代码如下:
  -------------------md.htm--------------------
 
  ---------------------end---------------------
  再来看看模态对话框的一个专有属性window.returnValue MSDN中阐明如下:
  当模态对话框关闭的时候通过设置returnValue如许翻开这个模态对话框的主窗口得
  就能得到返回的值.下面我举个简单的例子:
  ---------------------fa.htm----------------
 
  -----------------------end------------------------
  -----------------------abc.htm-------------------
 
  -----------------------end-----------------------
  执行fa.htm后翻开abc.htm,关闭abc.htm后在fa.htm中将打出"i am return"
  如今就好理解些了.再来看老外的代码吧:
  window.returnValue = window.dialogArguments;
  把showmodaldialog的返回值也设为window,同时在设置location为一个新的值.
  大概说
  showModalDialog('md.htm',window,"resizab.......................).location=".............."
  也可以改成:
  showModalDialog('md.htm',window,"resizab.......................)
  然后md.htm中的returnvalue改为下面的代码:
  window.returnValue = window.dialogArguments.location="................";
  另有一个题目就是对话框什么时候关闭呢?老外代码如下:
  function CheckStatus(){
  try{tempVar=window.dialogArguments.location.href;}catch(e){window.close();}
  setTimeout("CheckStatus()",100);
  }
  CheckStatus();
  每隔0.1秒查抄一下myiframe的location.href的值,当当地文件加载乐成后myiframe的域将改变这时将发生一个
  安全非常,这时就会执行到catch里的代码window.close
  好了当模态对话框架关闭后myiframe的安全属性也就是"我的电脑区域"!由于我们的返回值是改变这个myiframe
  的location属性那么这儿就可以注入我们的代码啦.
  为什么?实在改变myiframe的location属性也就即是在IE的地点栏输出代码一样好比说我们可以在IE的地点栏
  输出javascript:'i am czy'
  聪明的你大概想到了如今myiframe的安全属性是"我的电脑区域"那么在内里执行代码应该也就能打破IE的安全限制了
  真的能行吗?我试了不行哈.为什么不行呢?我想大概是因为IE对在location内里执行的代码做了专门的限制,但是我们可以
  先通过location内里的脚本语句再注入一个iframe到myiframe中心去,然后再注入恶意代码.
  为什么通过location可以注入代码到myiframe中去呢?因为locatoin是myiframe中的一个属性嘛.
  location中的语句怎样写呢?代码如下:
  location="javascript:'
  --------------------------------end----------------------
  完整代码如下:
  -----------------------------------------instal.htm--------------------
 
 
 
 
 
 
 


  #--------------------#      #
  #    IE6sp1 new bug      #  #
  #        2004.06.10         #
  #        by czy         #  #
  #--------------------#     #
 

 
  ----------------------------------end-----------------------------
  第四步:遇到的一些题目:
  1)怎样找一个当地一定存在的帮助文件:
  C:\WINDOWS\Help\iexplore.chm::/iegetsrt.htm
  这是XP中,2000中为
  C:\WINNT\Help\iexplore.chm::/iegetsrt.htm
  2)木马可以放在什么中央呢?
  如果不用顿时执行的话也可以试试启动目次啊.
  3)洞洞对98有用吗?98中没有adodb.stram对象所以没有用.
  4)加密?
  是啊如今杀毒的东东越来越多,可以利用wse对脚本加一下密.
  5)要执行程序只能调用mms吗?
  通过location.href的办法来执行程序真是一个奇妙的办法啊,不过老外
  最早是通过覆盖wmplayer.exe然后location.href设为mms://来调用的
  这儿有一个题目是如果体系中装了别的的插放软件或是media player装的
  版本不一样的话大概失败,所以我想到了覆盖programe files下的msimn.exe然后
  location.href设为news,当然另有一些别的的变通办法.
  测试地点:www.chinansl.com/czy/instal.htm
  (只对2k有效)
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: