Ähnlich wie bei Buffer-Overflow zeichnet schlechter Programmierstil für diese Angriffsart verantwortlich.
Folgender Programmcode zur Verdeutlichung:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {char (buf[2048] = {0};
strncpy(buf,argv[1],sizeof(buf)-1);
printf(buf);
putchar('\n');
return(0);}
Folgendes passiert:
# ./code DDDD%x%x
DDDDbffffaa44444444
Der zweite Parameter '%x' gibt in
Hex die Speicheradresse bekannt, wo der String abgelegt ist. Wenn Nun das zweite
'%x' gegen '%n' getauscht wird, so stützt das betreffende Programm mit
einem Seg-Fault ab. BINGO ;-)
Adresse wird überschrieben und das Programm führt den Code aus den
der Angreifer ab diesem Speicherbereich abgelegt hat.