Privilegio de raíz usando un ataque de retorno a libc

1

He estado trabajando en Return-to-libc Attack Lab de SEED ( Labor Lab Description and Tasks ). El entorno es Ubuntu 12.04 32 bit. Por favor considere el siguiente código:

/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(FILE *badfile)
{
    char buffer[12];

    /* The following statement has a buffer overflow problem */
    fread(buffer, sizeof(char), 40, badfile);

    return 1;
}
int main(int argc, char **argv)
{
    FILE *badfile;

    badfile = fopen("badfile", "r");
    bof(badfile);

    printf("Returned Properly\n");

    fclose(badfile);
    return 1;
}

Encontré las direcciones deseadas, diseñé un archivo defectuoso para que cambie el contenido de la pila como se muestra en el siguiente boceto y lo verifiqué con el depurador (source ):

[-] Buffer overflow doing return-to-libc and executing system function
                                                  1             2        3
|---------------------------|------------|--------------|------------|
|           buffer          |   system   |   fake_ret   |  /bin/sh   |
|---------------------------|------------|--------------|------------|
               args              EBP           EIP

Pude abrir el shell, pero por alguna razón no obtuve el privilegio de la raíz:

[02/14/2018 16:22] seed@ubuntu:~/Documents$ gdb -q retlib
Reading symbols from /home/seed/Documents/retlib...done.
(gdb) r
Starting program: /home/seed/Documents/retlib 
$ whoami
seed
$ id
uid=1000(seed) gid=1000(seed) groups=1000(seed),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare),130(wireshark)
$ 

Revisé el programa vulnerable y se compiló correctamente (de acuerdo con las instrucciones del laboratorio), el programa es Set-UID:

[02/14/2018 16:35] seed@ubuntu:~/Documents$ ls -l retlib
-rwsr-xr-x 1 root root 9712 Feb 11 06:41 retlib

¿Alguien puede explicar por qué no obtuve el privilegio de la raíz después de abrir el shell?

Muchas gracias de antemano.

    
pregunta alond22 15.02.2018 - 01:51
fuente

1 respuesta

0

Después de un largo tiempo de búsqueda, descubrí que las variables de entorno tienen una dirección diferente al ejecutar el programa bajo GDB. Entonces, la solución a mi problema fue simplemente escribir un programa corto en C que imprima la dirección de la variable de entorno que estaba buscando. Entonces, la solución fue obvia para mí.

    
respondido por el alond22 22.07.2018 - 18:57
fuente

Lea otras preguntas en las etiquetas