Schreibe Hex in GDB

8

Ich bin in einer Software-Sicherheitsklasse und wir lernen gerade über Pufferüberläufe und wie sie ausgenutzt werden. Ich habe ein Programm, das ich ausnutzen kann, aber anscheinend kann ich das nicht, weil ich hex schreiben muss, dass es mir nicht erlaubt zu schreiben.

Ich muss die generierten Daten schreiben von:

%Vor%

Ich kann diese Ausgabe jedoch nicht in die Befehlszeilenargumente umleiten, da das Programm interaktiv ausgeführt wird. Historisch habe ich xclip verwendet, um es in die Zwischenablage zu kopieren und es dann in die laufende Anwendung einzufügen, aber aus irgendeinem Grund erlaubt mir diese Sequenz von hex nicht, xclip zu verwenden, um es zu kopieren (es zeigt, dass nichts kopiert wurde).

Zum Beispiel:

%Vor%

Wenn ich danach Strg + V, wird nichts eingefügt. Wenn ich einfach die Ausgabe aus dem Terminalfenster kopiere und einfüge, wird das falsche Hex eingefügt (ich nehme an, das liegt daran, dass das Hex nicht sichtbar ist).

Meine Frage ist: Hat GDB eine Möglichkeit für mich, generierten Text wie dieses in ein interaktives, laufendes Programm einzufügen?

Ich bin mir bewusst, dass ich, wenn das auswertbare Programm Befehlszeilenargumente nahm, folgendes tun könnte:

%Vor%

Da es jedoch nicht über CLI-Argumente läuft, ist dies nicht verwendbar.

Jede Hilfe wäre großartig!

    
Chris 25.03.2013, 22:33
quelle

1 Antwort

19
  

Meine Frage ist: Hat GDB eine Möglichkeit für mich, generierten Text wie dieses in ein interaktives, laufendes Programm einzufügen?

Ihre Frage basiert auf einem Missverständnis: Sie scheinen unter dem Eindruck zu stehen, dass GDB den "Einfügevorgang", den Sie ausführen, abfangen und die Zeichen nicht vom Zielprogramm lesen lassen.

GDB ist jedoch nicht , das eine Eingabe abfängt, bis Sie an einem Haltepunkt (oder aufgrund eines Signals) gestoppt werden. Während also Ihr Programm läuft (und die Eingabe liest), wird GDB selbst blockiert (in waitpid Systemaufruf) und darauf gewartet, dass etwas passiert.

Was verhindert also, dass Ihr Programm die Steuerzeichen erhält? Ihr Terminalemulator tut das.

Ok, wie können Sie die Nicht-ASCII-Eingabe veranlassen? Eine von drei Möglichkeiten (zwei sind sehr ähnlich):

  1. Verwenden Sie die Eingabe aus der Datei
  2. benutze Eingabe von named pipe
  3. benutze gdbserver

Für Methode # 1:

%Vor%

Methode 2:

%Vor%

Beide oben genannten Methoden funktionieren für "normale" Programme (solche, die STDIN lesen), scheitern aber bei Programmen, die Terminal direkt lesen (wie sudo , passwd , gpg ).

Methode # 3:

%Vor%     
Employed Russian 26.03.2013, 04:17
quelle

Tags und Links