No se puede sobrescribir rip con dirección en un simple desbordamiento de búfer (Ubuntu x64)

1

Escribí un programa c simple para probar un desbordamiento de búfer. Mi objetivo es sobrescribir el rip para que apunte al principio del búfer.

El código:

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
int main(int argc, char **argv) {  
char buffer[256];   
strcpy(buffer, argv[1]);
printf("INPUT: %s\n", argv[1]);  
return 0;  
}

cuando escribo r python -c 'print "A"*264 + "BBBBBB"' en gdb el rip se sobrescribe correctamente con:

RIP: 0x424242424242 ('BBBBBB')

El comienzo del búfer está en 0x7ffffffede20. Así que lo intenté r python -c 'print "A"*264 + "\x20\xde\xfe\xff\xff\x7f"' en gdb para sobrescribir el rip pero ya no funciona. Este es el contenido de rip (copiado de gdb):

RIP: 0x7fffff050800 (<__libc_start_main+192>:                                         
add    al,BYTE PTR [rax])

¿Por qué funciona con el "BBBBBB" pero no con la dirección? Y también lo intenté

r 'python -c 'print "\x90"*264 + "\x08\xde\xfe\xff\xff\x7f"''

Y por alguna extraña razón, esto funciona de nuevo con la dirección 0x7ffffffedf08. Pero no solo con el que necesito.

(Compilación: gcc mybof.c -fno-stack-protector -z execstack -o mybof)

    
pregunta Raphael Göldner 19.11.2018 - 16:06
fuente

0 respuestas

Lea otras preguntas en las etiquetas