(c) teso. all rights reversed.
exploiting format string vulnerabilities - Der Stack und seine Rolle bei Format Strings

Der Stack und seine Rolle bei Format Strings

Das Verhalten der Format-Funktionen wird vom Format-String gesteuert. Sie holt sich dabei die vom Format String gewünschten Parameter vom Stack.

printf ("Zahl %d hat keine Adresse, Zahl %d schon: %08x\n", i, a, &a);
Stack:
  • (hohe Adressen)
  • . . .
  • <&a>
  • <a>
  • <i>
  • A
  • . . .
  • (niedrige Adressen)
wobei
  • A = Adresse des Format Strings
  • i = value von der Variable i
  • a = value von der Variable a
  • &a = Adresse der Variable a
Die format Funktion parsed den String bei A nun Zeichen für Zeichen, und prüft ob das Zeichen ein '%' ist. Ist dies nicht der Fall, so wird es einfach kopiert (in die Ausgabe oder den String), sonst wird geprüft welches Zeichen hinter dem '%' steht, und der Parameter dementsprechend ausgewertet. Jeder Parameter ausser "%%" bezieht sich dabei auf einen Wert aus dem Stack.

<< - < - > - >>