Rückkehr zu libc - Problem

8

Ich habe Probleme mit dem Return-to-libc-Exploit. Das Problem ist, dass nichts passiert, aber kein Segmentierungsfehler (und ja, ich überlaufe den Stack tatsächlich).

Das ist mein Programm:

%Vor%

Ich benutze gets anstelle von strcopy, weil meine Adressen mit 0x00 beginnen und strcpy denkt, dass es das Ende einer Zeichenkette ist, also kann ich es nicht benutzen.

Hier sind die Adressen, die ich brauche:

%Vor%

Beim Eingeben der richtigen Sequenz geschieht dies:

%Vor%

so nichts.

Aber wenn ich 520 'A's (0x41) gebe, dann wird das EIP mit' A's überflogen. Wenn 516 'A' ist, passiert nichts, aber EIP enthält die Systemadresse nach der Exit-Adresse nach dem Zeiger / bin / sh.

Warum ist nichts passiert?

    
eleanor 17.02.2011, 12:52
quelle

1 Antwort

3

Lass uns ein bisschen was tun:

Code

%Vor%

Asm

%Vor%

Prolog und Epilog (diese sind mit Alignment-Code) wird hier im Detail beschrieben Den Zweck einiger Assembly Statements verstehen

Stapellayout:

%Vor%

Wenn Sie also eine Rücksprungadresse von main ändern wollen, sollten Sie nicht die Adresse im Stack ändern, die von ret verwendet wird, sondern auch die im Stack gespeicherten Werte wiederholen mit (1), (2) (3) schiebt. Oder Sie können eine neue Rücksprungadresse in das Array einbetten und nur (3) mit der neuen Stapeladresse + 4 überschreiben. (Verwenden Sie eine 516 Byte lange Zeichenfolge)

Ich schlage vor, dass Sie diesen Quellcode benutzen, um ihn zu hacken:

%Vor%

weil f keine Probleme mit der Stack-Neuausrichtung haben

%Vor%

Stapellayout für f() :

%Vor%

Breakpoint bei ret Befehl in f () mit 520 Bytes von "A"

%Vor%     
osgx 18.02.2011, 19:31
quelle