Wie kopiere ich das BS-Zeichen (0x08) zur Eingabe für den Pufferüberlauf in GDB?

553
Post Self

Ich muss einen Puffer mit einem bestimmten Wert überlaufen, der 0x08 enthält. Wenn ich benutze echo -ne "AA\x08A", ist die AusgabeAA als Backspace-Zeichen und ein A entfernt.

Wie kopiere ich diesen Wert in die Eingabe meines anfälligen Programms? Ich möchte, dass es in GBD ist, damit ich den Stapel anschließend überprüfen kann.

0
Beachten Sie, dass dies keine Sicherheitsfrage ist, da Sie nur einige Zeichen ausgeben müssen. Für Ihre Frage spielt es überhaupt keine Rolle, dass Sie diese Zeichen in ein anfälliges Programm einspeisen möchten. Steffen Ullrich vor 6 Jahren 0
@SteffenUllrich Ja, ich weiß. Ich wusste keine bessere Seite dafür. Ich dachte, die Leute hier wissen das, so wie sie es früher benutzt haben Post Self vor 6 Jahren 0

1 Antwort auf die Frage

1
Steffen Ullrich

Wenn ich echo -ne "AA \ x08A" verwende, ist die Ausgabe AA, da das Rückschrittzeichen und ein A entfernt werden.

Es sieht nur so aus, weil Sie die Ausgabe auf das Terminal drucken und Rücktaste in diesem Fall eine besondere Bedeutung hat: Löschen Sie das vorherige Zeichen ähnlich dem, was Sie durch Drücken der Rücktaste auf dem Tastenfeld erzielen. Das heißt, es wird das erste A, das zweite A angezeigt, das zweite A gelöscht und nach dem ersten A zurück und das 4. Zeichen angezeigt, dh A:

 $ echo -ne "AA\x08A" AA 

In der Realität werden jedoch alle 4 Oktette gedruckt - als Anzeige mit hd(oder hexdumpoder xxd...) wird Folgendes angezeigt :

 $ echo -ne "AA\x08A" | hd 00000000 41 41 08 41 |AA.A| 

Die gleichen 4 Zeichen werden auch in einem anderen Programm gedruckt, beispielsweise in Ihrem verwundbaren oder einem Perl-Skript:

$ echo -ne "AA\x08A" | perl -e 'print unpack("H*",<STDIN>),"\n"' 41410841 
Vielen Dank, ich werde versuchen, die Eingabe in einer Sekunde aus einer Datei zu laden. Das könnte das Problem lösen Post Self vor 6 Jahren 0