miércoles, 10 de octubre de 2012

Buffer overflow


Un Buffer Overflow es un error de programación que tiene lugar al copiar una cantidad de datos sobre un área que no es lo suficientemente grande como para contener dichos datos, produciendose así la sobreescritura de zonas de memoria.
Aqui vemos un programa vulnerable a un ataque por buffer overflow:


#include <stdio.h>
int vulnerable()
{
    char buf[100]
    printf("Introduce tu nombre:");
    fflush(stdout);
    gets(buf);
    printf("Hola \"%s\"\n", buf);
}
int main(int argc, char** argv)
{
    vulnerable();
}


En este caso si le diesemos una entrada a este programa más larga que la capacidad de "buf" estaríamos escribiendo directamente en la memoria, pudiendo introducir codigo que el sistema ejecutaría al no devolver el control al programa atacado, como por ejemplo:

\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh

Este código pretende ejecutar /bin/sh y por tanto devolvernos una terminal que podríamos usar.

No hay comentarios:

Publicar un comentario