/Snow-Crash

Snow-Crash is a Capture the Flag project at 42 school. The goal is to develop practical skills in information security and logical thinking.

Snow-Crash

Snow-Crash is a Capture the Flag project at 42 school. The goal is to develop practical skills in information security and logical thinking.

Level00

Iniciamos maquina blablabla. Una vez esta todo bien configurado y nos hemos ubicado en el el home del user level00 lo que haremos sera buscar los archivos que pertenezcan al usuario flag00. Lo haremos utilizando el comando find / -user flag00 2>/dev/null. Esto nos devolvera la ruta de una archivo y si hacemos cat a ese archivo nos aparece lo siguiente. cdiiddwpgswtgt. Si probamos esta contraseña para el usuario flag00 no funciona. Bueno, porque esta encriptada y hay que desencriptarla :/ pero para nuestra suerte solo esta encriptada utilizando un algoritmo cesar pocho asique no necesitaremoss JohnTheRipper ni nada asi, en esta pagina podemos desencriptarlo https://www.dcode.fr/caesar-cipher o incluso con algun script propio se podria hacer facil. Conclusion, una vez desencriptamos nos devuelve nottoohardhere. Es la contraseña del user flag00. Accedemos y hacemos uso del comando getflag.

FLAG00: x24ti5gi3x0ol2eh4esiuxias

Level01

cat /etc/passwd

aparece otra pass encriptada al lado del user flag01

image

desencriptamos con johntheripper

image

la pass es: abcdefg

FLAG01: f2av5il02puano7naaf6adaaf

Level02

en la raiz del user vemos que solo hay un fichero .pcap

image

este fichero almacena datos capturados de una red. Este fichero suele ser generado por herramientas como WireShark, tcpdump etc. Yo utilizare wireshark para analizar el fichero. Para ello utilizare mi VM Kali linux. Entonces utilizaremos SCP para copiar el fichero de la maquina snowcrash a mi otra maquina virtual Kali Linux.

image

Una vez tenemos el archivo en Kali pues abriremos Wireshark y analizamos el fichero, si nos fijamos en el paquete 43 aparece password. Lo que haremos sera darle click derecho en este paquete y le daremos a follow TCP stream para ver la secuencia entera

image

Pues ya tendriamos la flag

image

Peroooooo aqui hay que comentar algo , la contraseña no es con los . , eso son caracteres no printables que se ve asi por ser ASCII, si cambiamos los datos a C Arrays por ejemplo podemos ver exactamente los caracteres pero bueno que basicamente es la misma pass quitando los .

image

La pass esta en Hexadecimal, si la analizamos vemos que los . eran caracteres eliminados, por lo que al escribir la pass se equivocaron y borraron algunos chars y eso nos despistaria. Bueno una vez tenemos la pass que es: ft_waNDReL0L entramos al user flag y hacemos el getflag.

FLAG02: kooda2puivaav1idi4f57q8iq

Level03

En la raiz del user vemos un programado llamado level03, si lo ejecutamos nos dice que lo explotemos. Pues para explotarlo necesitamos entender que hace para ello utilizaremos comandos como strings, ltrace o nm -u para obtener mas info sobre el programa

image

image

image

Bueno, una vez analizado el programa vemos que utiliza la funcion system y que ejecuta echo a traves del comando env. Pues yo aqui veo una vulneralidad muy potente. Lo que haremos sera sustituir el comando echo por una shell /bin/sh y cambiar la variable de env $PATH para que el nuevo echo aparezca ahi.

Una vez nos funciona y lo explotamos verificamos el acceso con whoami y comprobamos que hemos escalado privilegios

image

Flag03: qi0maab88jeaj46qoumi7maus

Level04

image

image

obtiene el valor del parametro x de la solicitud HTTP (por ejemplo ?x=) y lo pasa a la funcion x, que ejecuta el comando echo con ese valor.

image

image

Flag04: ne2searoevaevoem4ov4ar8ap

Level05

Como en el level00, entramos en el user y en la raiz no hay nada, pues vamos a buscar. Si buscamos los archivos creados por flag05 encontramos algo.

image

Lo que vemos es que hay un script que lo que hace es ejecutar todo lo que hay en la ruta /opt/openarenaserver/ y luego lo borra. Pues muy sencillo, crearemos un script que contenga el getflag en esa ruta para que lo ejecute y que nos almacene la flag en un fichero que este en otra ruta.

image

Una vez se haya borrado el fichero y no lo encontremos en la ruta /opt/openarenaserver/ ya se habra ejecutado el script

image

Flag05: viuaaale9huek52boumoomioc

Level06

Entramos en el user y en la raiz vemos un programa y un fichero.php

image

Vamos a analizar detenidamente que hace el fichero .php ya que presenta vulnerabilidades

image

Bueno viendo esto lo que entendemos es que la funcion x recibe 2 argumentos. Y el argv[1] (que sera lo que nosotros queramos) le hara una serie de remplazos y lo ejecutara. Es importante que entendamos que remplazos hara para que se ejecute lo que nosotros queramos. da palo explicarlo todo pero bueno que si hay algo entre [x ...] remplazara el contenido de dentro si hay un . por una x y un @ por y. Tambien remplazara los [ por ( y ] por ).

Sabiendo esto pues vamos a explotar el fallo.

image

IMPORTANTE QUE NO SE COMO SE PONEN LOS CARACTERES ESTO: echo '[x ${getflag} ]' > /tmp/test

flag06: wiok45aaoguiboiki2tuin6ub

Level07

Mas de lo mismo, muy parecido a un nivel anterior. Nos aparece un programa en la raiz del user, si lo ejecutamos se printa nuestros nombre de usuario. Vemos las strings legibles del programa con el comando strings y tambien nm -u para ver funciones que utiliza. Una vez analizado esto vemos que hay dos lineas , una que aparece LOGNAME y otra un echo sobre esa variable de entorno. Bueno sabiendo esto lo que haremos sera sustituir el valor de $LOGNAME para que el programa ejecute getflag.

image

Flag07: fiumuikeil55xe9cu4dood66h

Level08

Otro lvl facilito. Aparece de nuevo un programa y un fichero llamado token que no tenemos permis para verlo ni nada. Hacemos strings sobre el programa para intentar analizarlo etc, este programa recibe un argumento y lo va a intentar leer y nos devuelve el contenido del fichero que le pasamos por argumento. Cada vez que le pasamos token nos dice que no tiene acceso, tanto si le pasamos el fichero token o cualquier string que contenga la palabra token. Por lo tanto, intuimos que la flag esta dentro de este fichero pero no lo podemos abrir ni hacer nada sobre él porque no tenemos permis y por otro lado sabemos que nuestro programa nos printa el contenido de un fichero pero siempre y cuando no sea o contenga la palabra "token", como tampoco podemos cambiar el nombre del file ni copiar y pegar su contenido lo que podemos hacer es un enlace simbolico para acceder al contenido de token sin ser el fichero token como tal.

image

Pass user flag08: quif5eloekouj29ke0vouxean

Flag08: 25749xKZ8L7DkSCwJkT9dyv6f

Level09

image

image

#include <stdio.h>

int main(int argc, char **argv)
{
    int i = 0;
    char arg;

    while (argv[1][i])
    {
        arg = argv[1][i];
        printf("%c", arg - i);
        i++;
    }
    printf("\n");

    return 0;
}

image

Pass user flag09: f3iji1ju5yuevaus41q1afiuq

Flag09: s5cAJpM8ev6XHw998pRWG728z