Warum bekomme ich "Nicht finden können gebunden der aktuellen Funktion", wenn ich das überschreiben der ret-Adresse eines verwundbaren Programm?

Ich soll ausgenutzt werden, um einen stack-basierten buffer-overflow für Bildung verwendet.

Es ist eine typische Funktion mit einem parameter aufgerufen von main, die als Eingabe vom Programm einen lokalen Puffer, in dem die parameter gespeichert. Gegeben eine Eingabe, so dass nops+shellcode+address_shellcode werde ich ausnutzen.

Nach dem Debuggen mit gdb fand ich die Adresse der shell-code, da es als parameter übergeben, und direkt nach der strcpy ich untersuchen Sie den Stapel und die $ebp+8 was ist der return-Adresse wurde erfolgreich überschrieben mit der Adresse des shell-code. So habe ich, was ich will. Aber wenn ich vorwärts ging, die Ausführung, die ich habe:

->shellcode_address in ?? ()

dann

Cannot find bound of current function

Die Rückkehr-Adresse hat den Wert, den ich haben möchte. Irgendwelche Ideen, was ist passiert?

Auch wenn ich es ausführen bekam ich einen "segmentation fault" und habe ich es kompilieren mit -g -fno-stack-protector. Warum?

Werfen Sie einen Blick auf stackoverflow.com/questions/2420813/..., es erklärt, dass "Nicht finden können, die Grenzen der aktuellen Funktion" nur bedeutet, dass der gdb nicht-debug-Informationen für den aktuellen instruction pointer, und das ist unglücklich mit diesem Zustand. Aber vermutlich haben Sie ein anderes problem zusätzlich.
Wie könnte ich hinzufügen debug-info für die nop-Anweisung, gefolgt von NOPs für andere und am Ende mit shellcode?
Ich weiß nicht genau, wie gdb arbeiten, aber ich erwarte Sie nicht. der gdb sucht die Adresse des instruction-pointer in seiner großen, alten Tisch von debug-Informationen an, dass es geladen wurde von der ausführbaren Dateien, die Sie kennt. Aber der instruction pointer auf dem stack, es ist nicht abgedeckt durch diesen debug-info. Vielleicht in der Theorie, die Sie synthetisieren könnte, einige ZWERG-Daten um die aktuelle stack-Adresse, und laden Sie diese in den gdb, aber ich habe keine Ahnung, wie.
Ich denke nicht so. Es eine einfache stack-basierten Pufferüberlauf ausnutzen. Mir fehlen sth else

InformationsquelleAutor curious | 2012-01-05

Schreibe einen Kommentar