Privilegio root con attacco Return-to-libc

1

Ho lavorato su Return-to-libc Attack Lab di SEED ( Descrizione e attività del laboratorio ). L'ambiente è Ubuntu 12.04 a 32 bit. Si prega di prendere in considerazione il seguente codice:

/* 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;
}

Ho trovato gli indirizzi desiderati, progettato badfile in modo che cambi il contenuto della pila come nello schizzo qui sotto e controllato con il debugger (source ):

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

Sono stato in grado di aprire la shell ma per qualche motivo non ho ottenuto il privilegio della root:

[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)
$ 

Ho controllato il programma vulnerabile ed è stato compilato correttamente (secondo le istruzioni del laboratorio), il programma è 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

Qualcuno può spiegare perché non ho avuto il privilegio della radice dopo aver aperto la shell?

Grazie mille in anticipo.

    
posta alond22 15.02.2018 - 01:51
fonte

1 risposta

0

Dopo un lungo periodo di ricerca, ho scoperto che le variabili di ambiente hanno un indirizzo diverso durante l'esecuzione del programma in GDB. Quindi, la soluzione al mio problema era semplicemente scrivere un breve programma in C che stampasse l'indirizzo della variabile d'ambiente che stavo cercando. Quindi, la soluzione era ovvia per me.

    
risposta data 22.07.2018 - 18:57
fonte

Leggi altre domande sui tag