Seguimos con otra máquina de nivel Principiante adaptada para nivel de «eJPT» de la plataforma de TheHackersLabs. La máquina se llama «Papafrita» .

Resumen de conceptos trabajados:

Enumeración de servicios
Fuzzing web de directorios ocultos
Análisis y decodificación Brainfuck
Abuso de binarios
Escalada de privielgios

Resumen: Esta máquina se resuelve comenzando con una enumeración inicial que identifica un servidor Linux con un servicio web Apache activo. Durante el análisis manual de la web y su código fuente encontramos un mensaje ofuscado en Brainfuck que, tras ser decodificado, nos proporcionó la información necesaria para obtener acceso inicial al sistema. Posteriormente realizamos enumeración local y, mediante sudo -l, detectamos que el binario node podía ejecutarse como root, lo que nos permitió abusar de esta configuración insegura utilizando técnicas de GTFOBins para obtener una shell con privilegios administrativos y completar así la máquina.

Si es tu primera máquina de The Hackers Labs y no sabes cómo empezar a comprometer la máquina, te recomiendo que visites este post donde te cuento paso a paso cómo hacerlo.

Básicamente lo que tienes que hacer es descargarte el laboratorio/máquina de la plataforma, importarla desde tu Virtual Box o VMWare, iniciarla y ya desde tu máquina Kali atacante buscar por la red interna la IP con el comando arp-scan…

El resumen de las tres capturas de imagen anteriores es que:

  1. por un lado, mi máquina atacante Kali ha encontrado en mi red una máquina con MAC que empieza por 08 que como sabemos corresponde a máquinas virtualizadas.
  2. comprobamos además que la máquina está activa con el mensaje «host is up».
  3. por otro lado, confirmamos que esa IP efectivamente es la de nuestra máquina víctima lanzándole un ping y vemos que nos devuelve un TTL de 64 (máquina Linux).

ENUMERACIÓN DE PUERTOS Y SERVICIOS

Comenzamos con la fase de reconocimiento y escaneo de puertos y servicios que corren para esa IP víctima.

En estos laboratorios, se suele empezar por un escaneo de puertos por TCP ya que la mayoría de servicios útiles en máquinas de laboratorio (HTTP, SSH, SMB, MySQL, etc.) usan TCP. Si no encontráramos nada por este protocolo, trataríamos de hacer un escaneo con nmap por UDP.

Por tanto, en nuestro caso y para empezar, aplicaremos el siguiente comando nmap por TCP (si quieres conocer el significado de cada comando, te dejo este post donde lo explico):

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.1.201 -oN Escaneo_TCP

El escaneo nos detecta los típicos puertos abiertos 22 ssh de acceso a usuarios autenticados, y el puerto 80 http donde corre un servidor web.

Conocidos estos dos puertos abiertos de la máquina víctima, lo que hacemos a continuación es enumerar, mediante un script básico de nmap, cuáles son los servicios y versiones que corren para esos puertos.

Vemos las versiones OpenSSH 9.2p1 para el puerto 22 ssh y el servidor Apache para la versión httpd 2.4.57.

Podemos analizar con searchsploit si hay algún exploit conocido en la BBDD de Exploit-DB pero parece que no hay nada reportado…

Por lo que mi siguiente paso es analizar la web viendo la IP en Firefox para ver que muestra e investigar potenciales usuarios, etc.

El puerto 80 nos muestra una página Apache por defecto, y en código fuente no encuentro nada relevante, ni robots.txt, ni whatweb, … por lo que el siguiente paso es hacer fuzzing web.

FUZZING WEB DE DIRECTORIOS OCULTOS

Hacemos fuzzing web usando Gobuster para detectar posibles directorios o ficheros ocultos:

gobuster dir -u http://192.168.1.201/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,html,txt

no parece que haya ninguna ruta o directorio abierto disponible por el que pasar…

ANÁLISIS Y DECODIFICACIÓN DE CÓDIGO BRAINFUCK

Ando atascado mirando posibles subdominios, fuerza bruta, etc, pero ha sido al volver a ver el código fuente de la página de Apache por defecto, veo lo siguiente comentado que resulta raro su ubicación:

Buscando en internet, encuentro que ese código es un lenguaje de programación llamado Brainfuck que sólo usa determinados caracteres como + – > etc …

Por lo que puede ser que haya algún mensaje oculto en ese lenguaje…inspecciono el código fuente para ver todo el código completo antes de decodificarlo con alguna herramienta:

++++++++++[>++++++++++>++++++++++>++++++++++++>++++++++++>+++++++++++>++++++++++>++++++++++>++++++++++>+++++++++++>+++++++++++>++++++++++>+++++++++++>++++++++++++>++++++++++>+++++++++++>++++++++++>++++++++++++>+++++++++++>+++++++++++>++++++++++<<<<<<<<<<<<<<<<<<<<-]>---.>--.>---.>+.>--.>---.>-.>---.>--.>-----.>+.>.>----.>---.>--.>---.>-----.>+.>++.>---.

En Google encuentro una herramienta online https://www.dcode.fr/brainfuck-language para decodificar código Brainfuck y al usarla obtengo una frase «abuelacalientalasopa» .

Con esto, y después de probar varias cosas, cojo «abuela» como si fuera un usuario, y pruebo a acceder por ssh a la máquina junto con la contraseña «abuelacalientalasopa«.

Y consigo entrar…

Comprobamos que somos el usuario «abuela» y que no hay más usuarios en el sistema:

Si navego dentro de la carpeta de «abuela» veo que está la user flag pero no tenemos permiso de root para abrirla.

ABUSO DE BINARIOS

Sabiendo esto, lo que hago es aplicar un «sudo -l» para ver qué comandos puedo ejecutar como el usuario «abuela» como root, y vemos que podemos abusar del binario «node» como root sin necesidad de contraseña.

Por lo que vamos al repositorio de GTFObins a buscarlo y ver cómo podemos ejecutar un comando que nos lleve a root:

ESCALADA DE PRIVILEGIOS

Si aplicamos tal cual ese comando, nos abre la consola como root:

sudo node -e 'child_process.spawn("/bin/sh", {stdio: [0, 1, 2]})'

y podemos leer tanto la user.txt flag como la root.txt flag.

RESOLUCIÓN MÁQUINA PAPAFRITA

Comenzamos con una enumeración inicial que reveló un servidor Linux con un servicio web Apache activo. Durante el análisis manual de la página identificamos información oculta en el código fuente, incluyendo un mensaje ofuscado en Brainfuck que, tras ser decodificado, nos proporcionó pistas útiles para avanzar y conseguir acceso inicial al sistema como un usuario con bajos privilegios.

Una vez dentro del sistema, realizamos enumeración local para identificar posibles vectores de escalada de privilegios. Mediante sudo -l descubrimos que podíamos ejecutar el binario node con privilegios elevados, lo que resultó ser una mala configuración explotable. Apoyándonos en GTFOBins, abusamos de este binario para ejecutar código arbitrario y obtener una shell como root.

Con privilegios administrativos completos accedimos al directorio de root, completando la máquina tras encadenar la explotación inicial vía web con una escalada de privilegios basada en permisos inseguros de sudo.

Otros posts relacionados