[HACKING] Buffer Overflow 1

Publicado: febrero 8, 2012 en Hacking

Buffer Overflow I

Eso es una de las cosas que aún son vistas en la escena hacker. El buffer overflow o desbordamiento de buffer es básicamente un error en el programa producido cuando hay una cantidad de datos muy grande en un área que no tiene espacio suficiente para contenerlos.
Buffers son pequeñas porciones de memoria, con tamaño definido, usados para almacenar algún dato. Cuando los campos de un formulario son llenados, los datos son guardados en un buffer hasta que el programa diga lo que hacer con ellos. El buffer overflow básicamente es llenar con una cantidad de datos que no se pueda guardar, así, los datos son escritos en áreas de memorias que no pertenecen. Con un poco de conocimiento de programación, sistema operativo y hardware es posible manejar esas “explosiones” y hacerlos ejecutar una parte de un programa. Haciendo eso, es posible obligar un acceso a puntos de entrada en sistemas remotos no imaginados por el creador del sistema. Vamos a un pequeño ejemplo que hice:

(malandro.c)

#include <stdio.h>

void malandro(void)
{
char yoyo[5];
gets (yoyo);
printf(“%s\n”,yoyo);
return;
}

main()
{
malandro();
return 0;
}

Él progama malandro.c tiene sólo una función que se llama “malandro()” y por el programa principal main(). La función main() habilita la función malandro(), que declara un pequeño buffer, cuyo tamaño es de 5 bytes. La función malandro() también usa la función gets(), de el lenguaje C, usada para leer datos del teclado y ponerlos en el buffer yoyo.

escribindo el codigo y compilando
el fuente y el ejecutable
ejecutando el programa y probando
Las imágenes muestran que al ejecutar el programa y escribiendo los 5 caracteres que corresponden a la cantidad cierta el programa funciona perfectamente, exactamente para lo que fue diseñado. ¿Pero que pasará se añadir uno (1) caractere más? Vamos a escribir selva underground y ver lo que ocurre:
¿¿¿¿¿ no pasa nada ???????
Ya es conocido que el buffer tiene 5 bytes pero la frase tiene mucho más que 5 bytes, entonces, ¿cuál es el tamaño necesario (en datos) para empezar algún cambio en el programa?.
En verdad, el buffer ocupa mucho más espacio que el definido. Si tu buffer tiene 5 bytes, él puede ocupar, al máximo, entre 8 y 12 bytes en la pila. A parte de eso , en el área de la pila reservada a la función malandro(), puede haber otros datos de la misma función. Sólo después de pasarnos por todo el camino, llegamos al puntero de regreso. Determinar esa distancia es importante para hallar la falla. Hay muchos métodos de hacerlo uno de ellos es: intentar y fallar.
JAQUE MATE…..LO TENGO
En la imagen arriba llené de numero 1 y hallé mi buffer overflow, tu también puedes intentar en tu compu.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s