Instruction fetch fault - was nun?

#2566258
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
Persönliche Seite #2566454
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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren