Apilamiento de protección, reordenar variables

2

Hace unos días, empecé a leer un artículo sobre eludir SSP / ProPolice y, después de leer todo, probé los bypass, pero no funcionaron. Este es el código que utilicé:

   int f (char ** argv){
         int pipa;  // useless variable
         char *p;
         char a[30];

         p=a;

         printf ("p=%x\t -- before 1st strcpy\n",p);
         strcpy(p,argv[1]);        // <== vulnerable strcpy()
         printf ("p=%x\t -- after 1st  strcpy\n",p);
         strncpy(p,argv[2],16);
         printf("After second strcpy ;)\n"); }

 void main (int argc, char ** argv){
         f(argv);
         execl("back_to_vul","",0);  //<-- The exec that fails
         printf("End of program\n"); }

Y el comando de compilación es: gcc -fstack-protector -z execstack -o f f.c Básicamente, mi problema es la variable de reordenación que coloca & p y & a sobre su búfer, de modo que no puedo sobrescribir la dirección de p mediante el envío de un búfer grande. ¿Cómo podría evitar esto?

    
pregunta AnonITA 06.06.2013 - 17:52
fuente

1 respuesta

1

Si las variables se han reordenado para que p aparezca antes de a[30] en la memoria, y su única opción de ataque es sobrescribir p desbordando el búfer en a , no puede hacerlo.

(Al menos no con sensatez. Puedes intentar un desbordamiento aritmético en strcpy() pasando una cadena de 4GB, pero es casi seguro que deberías explotar algo importante antes de envolver lo suficiente como para sobrescribir a p ).

    
respondido por el Mark 17.06.2014 - 10:48
fuente

Lea otras preguntas en las etiquetas