Senden von Binärdaten an gets()

Senden von Binärdaten an gets()

Ich habe ein betroffenes Programm (mit einer Pufferüberlauf-Sicherheitslücke): Es verwendet gets(), um in einen Puffer mit fester Größe zu schreiben.

Angenommen, ich füge Shellcode in eine Datei SC ein. Dann führe ich aus

$ ./victim < SC
Input your data: 
$

Der Grund, warum der Shellcode nicht zu funktionieren scheint, ist folgender: SC wird zum Opfer umgeleitet, fügt den Shellcode ein, veranlasst das Erzeugen einer Shell, doch die erzeugte Shell stellt fest, dass ihre Standardeingabe geschlossen ist, und wird daher sofort beendet.

Ich habe es expectmit der Injektion versucht, aber expectdie Bomben erscheinen erst, nachdem die Granate aufgetaucht ist.

Der einzige praktische Weg scheint zu sein, den Shellcode in den Einfügepuffer meiner Maus zu bekommen, damit ich ihn einfügen kann, während ich die Tastatur als Eingabegerät behalte. Aber ich habe keine Ahnung, wie ich binäre Daten in meinen Einfügepuffer bekomme.

Irgendwelche Ideen, wie man dieses Problem umgehen kann?

Antwort1

Eine Lösung für dieses Problem (auf das jemand im gleichen Zusammenhang gestoßen ist) finden Sie hier: https://stackoverflow.com/questions/8509045/execve-bin-sh-0-0-in-a-pipe

Antwort2

Sie könnten das mit einem einfachen Skript tun, in dem Sie Ihre Sonderzeichen drucken.

In Perl können Sie beispielsweise jedes Zeichen drucken, indem Sie seinen Hexadezimalcode angeben. Beispiel: perl -e 'print "\x54\x0A"'druckt ein „T“, gefolgt von einer neuen Zeile.

Sie können dann den gedruckten Text kopieren, auch wenn er nicht sichtbar ist. Natürlich muss Ihr Terminal im Raw-Modus sein.

verwandte Informationen