Nebula level02

Share it!

En este nivel tenemos un source code muy similar al anterior :


#include
#include
#include
#include
#include

int main(int argc, char **argv, char **envp)
{
char *buffer;

gid_t gid;
uid_t uid;

gid = getegid();

uid = geteuid();

setresgid(gid, gid, gid);
setresuid(uid, uid, uid);

buffer = NULL;

asprintf(buffer, "/bin/echo %s is cool", getenv("USER"));
printf("about to call system(\"%s\")\n", buffer);

system(buffer);
}

El programa es muy simple, realiza una llamada a /bin/echo e imprime por pantalla la información que recoge de las variables de entorno a través de «getenv», y en este caso USER, o lo que es lo mismo level02  que es nuestro usuario, por ahora.

 

Como vemos, si ejecutamos /bin/echo $USER is cool obtenemos el mismo resultado que al ejecutar el programa, cual es el truco aquí? Pipe !

Si seteamos nuestra variable de entorno a lo que queramos, y usamos tuberias ( | ) o ( && ) o (;) hacia otro comando, se ejecutará ( también ) en el contexto del usuario propietario del binario ( bad programming ), en este caso flag02, veamos un ejemplo:

 

 

Ilustrativo, pero lo que queremos es escalar privilegios de manera que ya sólo nos queda ejecutar una shell, o ejecutar el comando getflag para conseguir pasarnos este nivel, como a continuación:

 

 

Share it!
Esta entrada fue publicada en Privilege Escalation. Guarda el enlace permanente.

Una respuesta a Nebula level02

  1. McPerson dijo:

    Very interesting

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>