Sfruttamento: EIP rifiuta di saltare allo stack anche se è eseguibile

8

Ho scritto un programma in C che è sfruttabile in BOF.

TL;DR - My payload (NOP-sled + shellcode + return address) overrides EIP but I can't set EIP to point to the address of my payload, although I can set EIP to be anywhere else outside the Stack adress-range. Stack seems to be executable and the proections I familiar with are off.

Ho inviato un payload usando ragg2 modello De bruijin e ho trovato l'offset che sovrascrive EIP. Ho quindi creato un payload con NOP-sled, quindi shellcode, e con l'offset che sovrascrive EIP ho scritto l'indirizzo della metà della mia slitta NOP.

Quindi il payload era simile a questo: NOP-sled + Shellcode + Address somewhere at the middle of my NOP-Sled (Little Endian).

È successo qualcosa di strano e non sono stato in grado di sfruttare il programma: dopo il segfault, EIP non era all'indirizzo che usavo alla fine del mio carico, EIP era come 600 indirizzi dopo. Ma quando ho cambiato l'indirizzo alla fine del mio carico utile in qualcos'altro, come "AABB" (0x42424141), o 0xd4d4 fd ff (invece di 0xd4d4 ff ff che è un indirizzo al centro del mio shellcode, little-endian) ha funzionato bene e EIP era all'indirizzo che ho fornito.

nx protection is off, ASLR è disabilitato, Selinux disabilitato, la pagina di memoria sembra essere eseguibile e l'ELF compilato usando "-fno-stack-protector -z execstack" su GCC.

Ho provato anche su gdb e anche all'esterno di qualsiasi debugger.

quale può essere il problema? Perché si rifiuta di saltare all'indirizzo in pila?

Informazioni sul binario:

havecode true
pic      false
canary   false
nx       false
crypto   false
va       true
intrp    /lib/ld-linux.so.2
bintype  elf
class    ELF32
lang     c
arch     x86
bits     32
machine  Intel 80386
os       linux
minopsz  1
maxopsz  16
pcalign  0
subsys   linux
endian   little
stripped false
static   false
linenum  true
lsyms    true
relocs   true
rpath    NONE
binsz    6162

Informazioni sullo stack:

sys 132K 0xfffdd000 - 0xffffe000 s -rwx [stack] [stack] ; map._stack_._rwx

Modifica Puoi trovare ulteriori dettagli, inclusi i comandi e lo shellcode stesso qui: link

    
posta api pota 14.01.2017 - 11:06
fonte

1 risposta

2

In base al carico utile che hai postato, sembra che tu voglia che EIP salti a 0xffffd4d4. Impostare un punto di interruzione a quell'indirizzo (0xffffd4d4) prima di eseguire il programma. In questo modo saprai se l'esecuzione del programma ha mai raggiunto 0xffffd4d4.

Forse c'è un problema nello shellcode e il tuo programma potrebbe essere segfaulting a metà del codice shell. Ho avuto un sacco di problemi simili quando ho iniziato.

PS. Nella tua domanda hai menzionato 0xd4d4ffff. Si prega di controllare. Perché se vuoi saltare a 0xd4d4ffff devi sostituire EIP con \ xff \ xff \ xd4 \ xd4 e non \ xd4 \ xd4 \ xff \ xff.

    
risposta data 21.09.2017 - 14:31
fonte

Leggi altre domande sui tag