PDA

Ver la versión completa : Integer Buffer Overflow



__BoKeN__
06-05-2005, 12:57
Hola a todos.

En el siguiente codigo:

#define MAX_SIZE 80

int main(int argc, char **argv) {
char buf[MAX_SIZE],*pbuf=buf;
int count = atoi(argv[1]);

if (count >= MAX_SIZE) count = MAX_SIZE-1;

while (count--) *pbuf++=getchar();
*pbuf=0;
}

Se puede explotar dando como argumento un valor superior a 2147483647, de
este modo el count se desborda y se convierte en un numero negativo. Despues comenzara a restarle 1 consecutivamente hasta que valga 0.

Desbordando la variable count, el numero minimo de bytes sobreescritos es de 2147483648 (-2147483648,2147483647,2147483646,...,1), la cuestion es que yo no quiero sobreescribir tantas direcciones de memoria, solo querria escribir cerca de 100 bytes. (buf,80 bytes;ESP,4 bytes; EBP, 4 bytes;EIP 4 bytes) sin tener en cuenta la alineacion y demas detalles.

¿Que puedo hacer para controlar el numero de bytes sobreescritos y poder
parar una vez alcanzado el EIP?

Saludos y gracias a todos de antemano.

DreAM_KS
06-05-2005, 21:39
si el exploit es para linux, raise invento una forma muy buena, a traves de la cual encontravas la direccion de memoria a hardcodear in situ, se trata de ir metiendo argumentos (en caso de que se encuentre en argv, te estoy poniendo el ejemplo de que el buffer a desboradar te en argv) hasta desbordar, entonces se comprueba en qeu momento se ha desbordado se guarda la direccion y pum, ya esta la direccion hardcodeada, te recomiendo su tutorial, ahora mismo no te puedo dejar la pagina, lo siento.