Foro de elhacker.net

Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: R007h en 15 Abril 2010, 05:32 am



Título: Duda Buffer Overflow
Publicado por: R007h en 15 Abril 2010, 05:32 am
Hola,

resulta que estoy auditando un programa en busqueda de buffer overflows,
este programa se pone a la escucha de comandos en un puerto determinado,
cuando a uno de esos comandos le paso como parametro mas de 2048 bytes el programa se cierra,
pero se cierra sin mostrar esa tipica ventana de enviar error...

en conclusion, el programa es explotable?

por que se cierra sin mostrar la ventana de error?

que se puede hacer para explotar un BoF?

me debo conformar solo con el DoS?

Gracias de antemano,

Salu2


Título: Re: Duda Buffer Overflow
Publicado por: AlbertoBSD en 21 Abril 2010, 23:48 pm
Podrías mostrar el código del programa, o en su defecto mencionar que programa es.


Saludos


Título: Re: Duda Buffer Overflow
Publicado por: dark_hat en 17 Mayo 2010, 00:52 am
Puede que se deba a lo siguiente.
Si en un programa con un stack overflow llegas a sobreescribir la dirección de retorno, el programa intenta ejecutar la dirección sobreescrita y fallará si no está definida esa zona de memoria como zona con permisos de ejecución.
Por ejemplo con este programa pasaría eso:
Código:
#include <stdio.h>

int main()
{
  char x[4];
  strcpy(x, "xxxxAAAAAAAAAAAAAAA");
  printf("OK");
  return 0;
}
Con este programa después del strcpy la dirección de retorno se cambiaría por las AAAAAA y después del printf al hacer el return fallaría al intentar ejecutar la dirección 0x41414141.

Sin embargo si nos pasamos de datos y llegamos a escribir tanto en el stack overflow que nos salimos del área de stack y intentamos escribir fuerra de ella en una zona de memoria sin definir el programa en el strcpy se cerraría y no llegaría ni a hacer el printf, como por ejemplo aquí:
Código:
#include <stdio.h>

int main()
{
  char x[4];
  strcpy(x, "xxxxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa");
  printf("OK");
  return 0;
}

Eso sería en caso de que tu programa fuera un stack overflow lo que tuviera, que lo mismo tiene un heap overflow o cualquier otra cosa...