(c) teso. all rights reversed. | ||
exploiting format string vulnerabilities - short write | ||
Es kann auch "abgekürzt" werden, indem man jeweils zwei Bytes auf einmal schreibt: "%hn" erwartet einen (short int *). Dies funktioniert zwar meisten, man sollte jedoch darauf verzichten, da es (ausser bei extrem kurzem Format-Strings) keine Vorteile bringt, und auf alten GNU C Libraries (libc5) nicht funktioniert. Ob es funktioniert hängt nämlich davon ab, ob der format-Funktion-interne Zähler der ausgegebenen Zeichen auch dann noch mitzählt, wenn er bereits die Buffergröße überschritten hat. Für RISC-Systeme ist der "%hn" Funktionalität wesentlich mehr Beachtung zu schenken, da man damit short int's schreiben kann, und so indirekt die align-limitierung umgehen kann, die auf diesen Plattformen existiert. Ein Byte-weises schreiben ist dort oft ganz unmöglich. Das Schreiben sieht dann so aus: printf ("%.29010u%hn%.32010u%hn", 1, (short int *) &foo[0], 1, (short int *) &foo[2]);Es funktioniert sonst analog zur 4-byte Technik. Zusätzliche Schwierigkeiten können auftreten, wenn man mit 64bit big-endian Architekturen arbeitet, da hier oft NUL Bytes in den Adressen vorhanden sind, die man beschreiben will. | ||
<< - < - > - >> |