Desbordamiento de búfer en Ubuntu x64

0

Estoy tratando de entender cómo funciona en detalle un desbordamiento de búfer. Básicamente compilé el siguiente programa:

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {

char buff[2];
if (argc >1) {
    strcpy(buff, argv[1]);
    printf("Parameter: %s\n",buff);
}

return 0;
}

con gcc -fno-stack-protector -Wall -o buff buff.c .

Cuando abro el programa con gdb, y ejecuto el programa causando una falla de segmentación, encontré que el contenido del registro rip (puntero de instrucción) no se sobrescribe (es decir, no aparece como el rbp (puntero base)) :

(gdb) i r
rax            0x0  0
rbx            0x0  0
rcx            0x0  0
rdx            0x0  0
rsi            0x555555756260   93824994337376
rdi            0x1  1
rbp            0x4141414141414141   0x4141414141414141
rsp            0x7fffffffdde8   0x7fffffffdde8
r8             0x0  0
r9             0x22 34
r10            0xffffffde   4294967262
r11            0x246    582
r12            0x555555554580   93824992232832
r13            0x7fffffffdec0   140737488346816
r14            0x0  0
r15            0x0  0
rip            0x5555555546d7   0x5555555546d7 <main+77>
eflags         0x10206  [ PF IF RF ]
cs             0x33 51
ss             0x2b 43
ds             0x0  0
es             0x0  0
fs             0x0  0
---Type <return> to continue, or q <return> to quit---
gs             0x0  0

Obvisouly ya deshabilité el ASLR (poniendo 0 en el randomize_va_space).

    
pregunta CipherX 03.10.2018 - 21:01
fuente

0 respuestas

Lea otras preguntas en las etiquetas