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