Protezione da distruzione dello stack, riordinamento delle variabili

2

Pochi giorni fa ho iniziato a leggere un articolo sull'esclusione di SSP / ProPolice e, dopo averlo letto, ho provato i bypass, ma non hanno funzionato. Questo è il codice che ho usato:

   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"); }

E il comando di compilazione è: gcc -fstack-protector -z execstack -o f f.c Quindi in pratica il mio problema è la variabile di riordino che pone & p e & a sopra il loro buffer in modo che non possa sovrascrivere l'indirizzo di p inviando un buffer di grandi dimensioni. Come potrei bypassare questo?

    
posta AnonITA 06.06.2013 - 17:52
fonte

1 risposta

1

Se le variabili sono state riordinate in modo che p arrivi prima di a[30] in memoria e l'unica opzione di attacco è sovrascrivere p facendo traboccare il buffer in a , non puoi farlo.

(Almeno non in modo ragionevole. Puoi provare per un overflow aritmetico in strcpy() passando una stringa da 4 GB, ma è quasi certo che potresti clobberare qualcosa di importante prima di essere avvolto abbastanza lontano da sovrascrivere p .)

    
risposta data 17.06.2014 - 10:48
fonte

Leggi altre domande sui tag