Skip to Content

Concorso LugRoma3: Domanda 12

Ancora sul programma della domanda 11:

Quello che segue è il sorgente del programma, indicate perché il codice termina con un SIGSEGV


void function(int a, int b, int c) {
char buffer1[5];
char buffer2[10];
int *ret;

ret = buffer1 + 12;
(*ret) += 8;
}

void main() {
int x;

x = 0;
function(1,2,3);
x = 1;
printf("%d\n",x);
}

Vi ricordiamo che la classifica viene stabilita in base alla correttezza, completezza e rapidità della risposta.

Rispondete inviando un messaggio di posta elettronica.

Per questa domanda avete tempo fino a venerdì 29 alle ore 24:00.

La risposta corretta è:
- Nel programma viene sovrascritto il valore del puntatore di ritorno (RET) dell funzione function aggiungedo 8 al suo valore. Tale puntatore si trova 12 byte dopo l'inizio della variabile buffer nello stack. Una volta terminata l'esecuzione della funzione viene eseguito il codice che si trova nella posizione 8 byte più avanti.
- L'indirizzo del puntatore di ritorno è fuori dallo spazio di indirizzamento del processo e il programma viene terminato con un SIGSEGV.
- Trovate l'articolo sui buffer overflow da cui è tratto l'esempio all'indirizzo: http://insecure.org/stf/smashstack.html

La classifica per questa domanda è la seguente:

  • alexevil69[AT]gmail[DOT]com: 25
  • daniele.athome[AT]gmail[DOT]com: 20