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.