Explotación: EIP se niega a saltar a la pila aunque es ejecutable

8

Escribí un programa en C que es explotable para BOF.

  

TL; DR : mi carga (NOP-sled + shellcode + return address) anula EIP pero no puedo configurar EIP para que apunte a la   dirección de mi carga útil, aunque puedo establecer EIP en   estar en cualquier otro lugar fuera del rango de direcciones de Stack. La pila parece ser   el ejecutable y las proyecciones con las que estoy familiarizado están desactivadas.

Envié una carga útil utilizando ragg2 De bruijin pattern, y encontré el desplazamiento que anula el EIP. Luego creé una carga útil con NOP-sled, luego shellcode, y en el desplazamiento que anula EIP escribí la dirección de la mitad de mi NOP-sled.

Entonces, la carga útil se parecía a esto: NOP-sled + Shellcode + Address somewhere at the middle of my NOP-Sled (Little Endian).

Ocurrió algo extraño y no pude explotar el programa: después del fallo de seguridad, EIP no estaba en la dirección que usé al final de mi carga, EIP fue como 600 direcciones después. Pero cuando cambié la dirección al final de mi carga útil a otra cosa, como "AABB" (0x42424141), o 0xd4d4 fd ff (en lugar de 0xd4d4 ff ff) una dirección en medio de mi código de shell, little-endian) funcionó bien y el EIP estaba en la dirección que proporcioné.

La protección de

nx está desactivada, ASLR está deshabilitada, Selinux deshabilitada, la página de memoria parece ser ejecutable y el ELF se compila usando "-fno-stack-protector -z execstack" en GCC.

Lo probé también en gdb y también fuera de cualquier depurador.

¿Cuál puede ser el problema? ¿Por qué se niega a saltar a la dirección en la pila?

Información sobre el 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

Información sobre la pila:

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

EDITAR: Puede encontrar más detalles, incluidos los comandos y el código shell mismo aquí: enlace

    
pregunta api pota 14.01.2017 - 11:06
fuente

1 respuesta

2

Según la carga útil que publicaste, parece que quieres que el EIP salte a 0xffffd4d4. Establezca un punto de interrupción en esa dirección (0xffffd4d4) antes de ejecutar el programa. De esta manera, sabrás si la ejecución del programa llegó a 0xffffd4d4.

Tal vez haya un problema en el Shellcode y su programa podría estar segregándose a la mitad del shellcode. Tuve muchos problemas similares cuando comencé.

PS. En tu pregunta mencionaste 0xd4d4ffff. Por favor, compruebe. Porque si desea saltar a 0xd4d4ffff necesita reemplazar EIP con \ xff \ xff \ xd4 \ xd4 y no \ xd4 \ xd4 \ xff \ xff.

    
respondido por el BigFatProgrammer 21.09.2017 - 14:31
fuente

Lea otras preguntas en las etiquetas