Forum: PC-Programmierung Instruction fetch fault - was nun?


von Lukas K. (carrotindustries)


Lesenswert?

Hallo Zusammen,

in einem Level von https://stripe.com/blog/capture-the-flag geht es 
darum, einen strcpy-Buffer-Overflow auszunutzen. Ich kann bereits die 
Rücksprungadresse beliebig verbiegen, auch auf den Inhalt des Puffers 
(um aus diesem eigenen Code auszuführen). Unter der Fuchtel vom GDB 
funktioniert das auch so wie's soll. Doch lässt man das Programm 'in der 
freien Wildbahn' (ohne GDB) laufen gibt's nen Segfault an der Adresse, 
die angesprungen wurde. Es sei anzumerken, dass nach dem strcpy GDB den 
Stack für kaputt hält, das Springen funktioniert aber, denn der 
instruction pointer steht am Sprungziel.
Der kernel schreibt dabei
1
level04[7282]: segfault at ffffce80 ip 00000000ffffce80 sp 00000000ff90cdf0 error 14
Aus der arch/x86/mm/fault.c geht hervor
1
/*
2
 * Page fault error code bits:
3
 *
4
 *   bit 0 ==   0: no page found  1: protection fault
5
 *   bit 1 ==   0: read access    1: write access
6
 *   bit 2 ==   0: kernel-mode access  1: user-mode access
7
 *   bit 3 ==        1: use of reserved bit detected
8
 *   bit 4 ==        1: fault was an instruction fetch
9
 */
Wir haben haben es hier also mit den Fehlerbits 2 und 4 zu tun. Bit 2 
ist logisch, doch was hat es mit 'fault was an instruction fetch' auf 
sich? Was wirklich nützliches dazu habe ich nicht gefunden.

MfG, Lukas

von (prx) A. K. (prx)


Lesenswert?

Data Execution Prevention aktiv?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ian Taylor schreibt in seinem Blog über executable Stack:

http://www.airs.com/blog/archives/518

Für technische Details siehe die GCC-Quellen.
Suchbegriffe: trampoline, static_chain

i386.c
http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/i386.c?content-type=text%2Fplain&view=co

i386.h
http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/i386.h?content-type=text%2Fplain&view=co

i386 Backend
http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/

von User (Gast)


Lesenswert?

1: fault was an instruction fetch

Das bedeutet, dass der Fehler beim Ausführ-Versuch von Code passiert 
ist, im Gegensatz zu Daten lesen/schreiben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.