Gattaca
Difficulty: Hard
En esta máquina al iniciarla podemos ver la IP:

Recon
Empezaremos realizando un escaneo completo de nmap sobre el objetivo:

Vemos el puerto 80 ejecutando un servidor web Apache.
Accedemos desde el navegador:

Investigamos el código fuente en busca de algún enlace o archivo que nos pueda ser útil:

Pero no encontramos nada interesante.
Utilizaremos gobuster para descubrir directorios que puedan existir en el dominio:

Entre los directorios que se identifican, hay uno que no es “típico” que sería el directorio /cards/.
Probamos a entrar desde el navegador web a este directorio:

Aparece un Forbidden.
Seguimos explorando la web de la máquina y hay un menú lateral con diferentes enlaces:

Uno es el about.html, que está enlazado en el botón central de la página y el otro cards.php que comparte nombre con el directorio que se ha descubierto.
Al hacer click en cards.php, aparece un inicio de sesión para el que no tenemos credenciales:

Brute Force
Cómo no disponemos de credenciales, haremos un ataque de fuerza bruta sobre cards.php:

Accedemos con las credenciales a cards.php:

LFI
Hacemos submit de las cards disponibles, pero no vemos nada relevante. Vamos a capturar la request con Burp para ver como funciona por detrás:

No muestra nada relevante.
En el filename, en vez de introducir uno de los que nos da en el listado, vamos a introducir el propio cards.php a ver que nos devuelve:

Con este output confirmamos que hay una especie de blacklist definida y que, lo que se hace, es ejecutar el comando cat para mostrar el contenido del fichero.
Una prueba bastante fácil y típica, es cambiar el método a ver si conseguimos bypassear la blacklist, si con POST no funciona, lo haremos con GET:

Nos devuelve el contenido de cards.php.
Cómo el cambio de método ha funcionado, probaremos a mostrar un archivo sensible:

Para codificar en URL en Burp, seleccionamos el texto y hacemos Ctrl+U, en este caso en filename=;cat /etc/passwd y vemos que nos muestra el contenido.
El binario cat se ejecuta y se muestran archivos a través de peticiones GET. Probaremos otros comandos a ver si tenemos RCE:

Tenemos confirmación de que hay RCE.
Reverse Shell
Cómo tenemos RCE, el siguiente paso para conseguir acceso al objetivo, será ejecutar una reverse shell y recibirla en la máquina atacante.
Generamos un archivo con la reverse shell:

Levantamos un servidor http para ofrecer el archivo al sistema víctima:

Ponemos una consola a la escucha:

Enviamos la solicitud desde Burp para descargar la reverse_shell:

Recibimos la conexión para la descarga del archivo:

Y en la consola a la escucha, recibimos la conexión de la reverse_shell:

Nos movemos por los directorios, en el directorio anterior encontramos el archivo ftppolicy.txt y lo mostramos:

Nos dice el propio archivo que no probemos con v.freeman, que es uno de los usuarios que se podían ver en el /etc/passwd, ni fuerza bruta con la wordlist rockyou.txt.
Con las pistas del archivo ftppolicy.txt, concluimos que el objetivo es el usuario i.cassini:

Cómo no podemos usar rockyou.txt en fuerza bruta, tendremos que probar por otras vías.
Lo que sabemos de momento:
1) Es el usuario para el login FTP.
2) Es el usuario i.cassini
3) Mínimo de 8 carácteres, contiene números y carácteres especiales.
Intentamos indagar en el directorio del usuario i.cassini a ver que sacamos:

Pero estamos en un callejón sin salida.
Privilege Escalation
Hacemos un poco de OSINT y vemos que el usuario está basado en uno de los personajes de la película Gattaca, el nombre de la máquina (no conocía esta película, es literalmente del año que nací, perdón)

Parece un dato irrelevante, pero esto nos permitirá elaborar un diccionario con la herramienta cupp, que sirve para hacer un diccionario con unas pocas preguntas sobre el objetivo:




Hemos creado el diccionario irene.txt dándole la información que tenemos.
Sabemos que podemos subir y ejecutar binarios. Haremos un port forwarding utilizando chisel, ya que necesitamos acceso al puerto FTP y sólo está disponible de forma local:
Instalación chisel:

Iniciamos el servidor en la máquina atacante:

Desde la reverse_shell nos aseguramos de los puertos locales abiertos para hacer el forwarding, en este caso del 21 (FTP):

En la reverse_shell descargamos el binario de chisel desde nuestra máquina atacante:
Y lo traspasamos como anteriormente la reverse_shell con la request de Burp:

Lo localizamos en el directorio /tmp/, lo decodificamos, le damos permisos y lo ejecutamos:

Nos aseguramos de que el archivo chisel se transmite correctamente teniendo el mismo tamaño que en la máquina atacante y que no se queda a 0 de tamaño al decodificarlo.
Ejecutamos chisel desde la consola que tenemos con la reverse shell:

En la consola del atacante donde hemos ejecutado el servidor chisel veremos lo siguiente que confirma que se realiza la conexión:

Después de ejecutar el comando de forwarding, desde nuestra máquina víctima podremos hacer el ataque desde hydra:

Encontramos la contraseña para el usuario i.cassini:

Ahora que sabemos la contraseña del usuario i.cassini, vamos a ver de que tiene permisos el usuario:

Hemos escalado al usuario i.cassini, vemos que el usuario puede utilizar el comando /usr/bin/acr, vamos a ver su manual/ayuda:

Nos establecemos un terminal para movernos más fácilmente:

Nos movemos entre los directorios y salimos del directorio de gattaca para ver que hay, encontramos la flag del usuario:

Seguimos tirando hacia atrás en los directorios hasta que llegamos a la raíz e intentamos entrar en el root pero no tenemos permiso:

Aquí entra en juego el ejecutable que estabamos viendo antes.
Con el ejecutable /usr/bin/acr del que hemos mostrado la ayuda, vamos a intentar ver el contenido del archivo que haya dentro del directorio /root:
Después de muchas pruebas (ejecutar un script con /usr/bin/acr con comandos en su interior para ejecutar sobre root, etc), al final utilizando la opción de debug (-d) y probando la ruta más sencilla damos con la flag del root:

Se nos muestran errores, pero la flag es el código que se muestra.
Por último, aunque ya tenía el contenido de las flags, quería llegar a tener el root, que es el objetivo final de toda máquina, así que siguiendo el writeup de suraxddq, vi que la escalada de privilegios se hacía de la siguiente manera:
Última actualización