flagProfetas DockerLabs (Intermediate)

Contexto de la maquina

Trayectoria Profetas

Descripción

Profetas es un laboratorio orientado a explotación web y escalada de privilegios en sistemas Linux. El reto combina vulnerabilidades clásicas como inyección SQL, exposición de credenciales mediante lógica débil de autenticación, análisis de binarios compilados en Python y abuso de permisos inseguros en sudo.

Objetivo del reto

Comprometer el sistema obteniendo acceso inicial, escalar privilegios entre usuarios del sistema y finalmente obtener privilegios de root para recuperar la flag final.

Tipo de máquina

  • Linux

  • Web

  • Privilege Escalation

Habilidades y técnicas evaluadas

  • Enumeración de servicios

  • SQL Injection en formularios de autenticación

  • Decodificación Base64

  • Fuerza bruta sobre servicios SSH

  • Ingeniería inversa de binarios Python compilados

  • Enumeración de permisos sudo

  • Abuso de herramientas legítimas para exfiltración y manipulación de archivos del sistema

Análisis de vulnerabilidades

Instalación

Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

Info:

Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.

Escaneo de puertos

Comenzamos realizando un reconocimiento de servicios expuestos mediante Nmap.

Posteriormente, enumeramos versiones y scripts por defecto:

Respuesta:

Observamos que la máquina expone dos puertos abiertos. El puerto 22 corresponde al servicio SSH y el puerto 80 aloja un servidor web Apache. Inicialmente nos centraremos en el puerto 80, ya que suele ser un punto de entrada habitual para comprometer sistemas.

Al acceder al servicio web, encontramos la siguiente interfaz:

Podemos observar un panel de autenticación sencillo. Como primera prueba, intentamos un ataque básico de inyección SQL utilizando un payload clásico:

Probando dicho payload tanto en el campo usuario como contraseña, comprobamos que la autenticación es vulnerable.

Escalate user jeremias

SQLi (login)

Respuesta:

Tras enviar el payload, conseguimos autenticarnos correctamente en la aplicación.

Una vez dentro, inspeccionamos el código fuente de la página y detectamos una cadena codificada en Base64 oculta mediante estilos CSS.

Decodificamos el contenido:

Respuesta:

Esta pista sugiere que algunos usuarios del sistema podrían estar utilizando su propio nombre de usuario como contraseña. Con base en esta hipótesis, procedemos a recopilar los posibles nombres de usuario presentes en la aplicación web.

Podemos automatizar la extracción de dichos nombres mediante el siguiente comando:

users.txt

passwords.txt

Utilizamos la misma lista para probar combinaciones usuario/contraseña, siguiendo la pista obtenida previamente:

En mi caso, realicé una normalización eliminando caracteres acentuados para evitar posibles problemas de autenticación derivados del encoding.

Posteriormente, ejecutamos un ataque de fuerza bruta contra el servicio SSH:

Respuesta:

Tras varios intentos, observamos que hemos conseguido credenciales válidas del usuario jeremias, por lo que procederemos a conectarnos mediante SSH.

SSH (jeremias)

Introducimos la contraseña jeremias:

Confirmamos que hemos accedido correctamente al sistema con este usuario. A continuación, procedemos a leer la flag correspondiente.

user.txt

Escalate user ezequiel

Durante la enumeración del directorio personal del usuario jeremias, observamos un archivo interesante:

Este archivo corresponde a un script compilado en formato .pyc. Aunque pertenece al grupo root, disponemos de permisos de lectura y ejecución. Sin embargo, al intentar visualizar su contenido, comprobamos que se encuentra en formato binario, lo que dificulta su análisis directo.

Por ello, decidimos transferir el archivo a nuestra máquina atacante con el objetivo de decompilarlo y analizar su funcionamiento interno.

Una vez transferido mediante un servidor Python, procedemos a utilizar la herramienta pycdc para su desensamblado:

Tras generar el archivo ezequiel_asm.txt, comenzamos a analizar su contenido en busca de posibles credenciales embebidas en el código.

Filtramos las constantes cargadas en el script:

Respuesta:

Resultado relevante:

Observamos dos valores que presentan una alta probabilidad de formar parte de un mecanismo de autenticación interno. Debido a ello, decidimos probar distintas combinaciones de estas cadenas, incluyendo concatenaciones y variaciones de orden.

passwords.txt

A continuación, realizamos un ataque de fuerza bruta contra el usuario ezequiel.

SSH (ezequiel)

Respuesta:

Observamos que el ataque ha tenido éxito y hemos obtenido credenciales válidas para el usuario ezequiel. Por lo tanto, procedemos a conectarnos mediante SSH.

Introducimos como contraseña 234r3fsd2-34fsdrr32...

Confirmamos que la autenticación se ha realizado correctamente y disponemos de una sesión activa con dicho usuario.

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Observamos que el usuario ezequiel puede ejecutar el binario /usr/local/bin/croc con privilegios de root sin necesidad de introducir contraseña. Esto representa un vector claro para la escalada de privilegios.

croc es una herramienta diseñada para la transferencia segura de archivos entre sistemas, lo que potencialmente permite manipular o exfiltrar archivos sensibles del sistema.

Extracción del archivo shadow

Aprovechando los privilegios sudo, procedemos a transferir el archivo /etc/shadow desde la máquina víctima hacia nuestra máquina atacante.

Desde la máquina víctima ejecutamos:

Respuesta:

En este caso utilizamos un servidor relay público proporcionado por la herramienta.

La aplicación nos proporcionará un código de transferencia temporal.

Preparación de la máquina atacante

Antes de proceder con la recepción del archivo, instalamos la herramienta croc, la cual permite la transferencia de archivos entre sistemas de forma sencilla mediante un relay.

Una vez instalada la herramienta, iniciamos el modo receptor en la máquina atacante:

El programa nos solicitará el código de recepción:

En este punto introducimos el código proporcionado por la máquina víctima. En nuestro caso:

Simultáneamente, la máquina víctima confirmará que el envío se ha realizado correctamente:

Si revisamos el archivo transferido desde la máquina atacante, verificamos que la exfiltración ha sido exitosa:

Respuesta:

Escalada de privilegios mediante modificación de /etc/passwd

Analizando las capacidades del binario croc, observamos que permite especificar rutas de destino al recibir archivos. Aprovechando esta funcionalidad, planteamos una técnica de escalada de privilegios basada en la modificación del archivo /etc/passwd.

La estrategia consiste en:

  1. Leer el archivo /etc/passwd desde la máquina víctima.

  2. Crear una copia local en la máquina atacante.

  3. Modificar la entrada del usuario root, eliminando el campo de contraseña.

  4. Transferir el archivo modificado nuevamente hacia la víctima, sobrescribiendo el original.

Modificación del archivo passwd

Primero copiamos el archivo original y realizamos la modificación correspondiente eliminando la x del usuario root, lo que dejará la cuenta sin contraseña:

passwd

Envío del archivo modificado hacia la máquina víctima

Desde la máquina atacante, iniciamos el envío del archivo modificado:

Respuesta:

Recepción y sobrescritura del archivo en la víctima

Ahora, desde la máquina víctima, ejecutamos el receptor indicando como destino la ruta /etc/:

Respuesta:

Confirmamos la sobrescritura del archivo, sustituyendo el /etc/passwd original por nuestra versión modificada.

Obtención de privilegios root

Tras la modificación del archivo de autenticación, el usuario root queda sin contraseña. Por lo tanto, podemos escalar privilegios ejecutando:

Respuesta:

Con esto ya seremos root, por lo que leeremos la flag de root y daremos por terminada esta maquina.

root.txt

Last updated