Una semana más volvemos con una nueva entrada, esta vez para desglosar el camino que se llevó en la conquista de esta máquina denominada Mango. Máquina Linux catalogada como de dificultad media en donde tuvimos que exprimir aún más nuestra faceta más investigadora, y es que esta disciplina es lo que tiene, que no puedes parar de aprender. Vamos de lleno…

Resumen:

  • Enumeración de puertos y servicios vía Nmap
  • Configuración del fichero hosts
  • Ejecución de NoSQL Injection
  • Obtención de usuario / Captura del fichero user.txt
  • Escalada de privilegios / Captura de fichero root.txt

Enumeración:

Como de costumbre, arrancamos con el descubrimiento de puertos y servicios rápido.

nmap -sS -sV 10.10.10.162

Revisamos vía navegador aquellos vinculados a sitios web y observamos lo siguiente:

Posteriormente decidí revisar scripts de Nmap que apliquen a dichos puertos y servicios descubiertos inicialmente.

nmap -sS -sC -sV -p80,443 10.10.10.162

Aquí entre otra información se logra evidenciar el subdomino “staging-order.mango.htb”, por tanto empleé este dato para configurar mi fichero hosts y verifiqué a través de un mero ping, que la resolución fuera correcta:

Vuelvo al navegador para validar cualquier respuesta nueva y el resultado me arroja el siguiente sitio web que cuenta con un panel de autenticación:

Aquí al intentar validar cualquier dato de entrada genero la siguiente solicitud al servidor:

Obtención de usuario:

Después de varias pruebas de inyecciones nada exitosas, se entiende que el nombre de la máquina es bastante sugerente a MongoDB, por tanto también se revisa la parte de NoSQL Injection encontrando un gran abanico de posibilidades. Uno de los recursos que mejor me ha venido son los recopilados en el repositorio de PayloadsAllTheThings de Swissky, en concreto la sección de NoSQL injection.

El apartado de “Extract data information” fue bastante reveladora. Llevemos esto a la práctica.

Empleando los operadores $regex y $ne, y a partir de la respuesta obtenida por parte del servidor a cada petición, se puede llegar a enumerar usuarios válidos en el sistema. Por ejemplo, al enviar nuestra petición inicial junto a los operadores obtendremos un HTTP 200 OK como respuesta.

Sin embargo si probamos a enviar solo la letra a como usuario, entonces la respuesta del servidor es HTTP 302 Found, lo que quiere decir, que a sería la primera letra válida de un usuario.

Ahora debemos ir con la segunda letra del usuario y así sucesivamente. Para ello emplearemos el Intruder de Burp Suite.

Después de unas cuantas peticiones automatizadas, lograremos formar el siguiente nombre de usuario válido:

Llegados a este punto encontré con un script en python (de Kalana Sankalpa), que automatiza el proceso de enumeración tanto de usuarios como de contraseñas, aprovechando esta vulnerabilidad evidenciada.

Fuente de información: https://blogofkalana.wordpress.com/2019/11/14/nosql-injection-username-and-password-enumeration/

Primeramente vamos a enumerar usuarios existentes (evidentemente el primer usuario fue el identificado a través del método descrito anteriormente):

python nosqli-user-pass-enum.py -u http://staging-order.mango.htb/ -up username -pp password -ep username -m POST

Por el lado de las contraseñas, se identificaron las siguientes:

python nosqli-user-pass-enum.py -u http://staging-order.mango.htb/ -up username -pp password -ep password -m POST

Recordando los puertos y servicios identificados en la etapa inicial, ahora con ayuda de Medusa haremos un ataque de diccionario a partir de los datos hallados.

medusa -U Users.txt -P Pass.txt -h 10.10.10.162 -M ssh

Emplearemos las credenciales identificadas para acceder a la máquina y una vez dentro, revisaremos los directorios de usuarios existentes.

ssh mango@10.10.10.162
hostname -I; id; ls -a; ls -l /home/

Nos conectaremos al usuario admin con las credenciales con las que ya contamos, y de esta manera ya podremos llegar a la flag user.txt.

Escalada de privilegios:

Revisamos el directorio del usuario admin y del resultado llama nuestra atención el fichero .jjs.history.

Vamos a preguntar al sistema “dónde está?” el aplicativo jjs y adicionalmente iremos revisando su origen a través de los distintos enlaces simbólico, hasta llegar a él.

whereis jjs
ls -l /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs
find / -perm -u=s -type f 2>/dev/null

Observamos que este aplicativo tiene como propietario al root y que además tiene el bit SUID activado, por tanto será ventajoso su utilización.

Indagamos sobre este aplicativo, nuevamente en GTFOBins y llegamos a la siguiente información relevante:

Más información de jjs aquí: https://gtfobins.github.io/gtfobins/jjs/

Ejecutamos las instrucciones paso a paso y conseguimos como respuesta la vista del contenido de la flag root.txt.

Mango ha sido una máquina bien interesante, que nos ha exprimido mentalmente y nos ha llevado a investigar sobre algunos aspectos que no teníamos controlados. Ahora a preparar el siguiente reto, hasta la próxima entrada lectores!