desktopInstant

Instant es una máquina de dificultad media que incluye ingeniería inversa de una aplicación móvil, explotación de puntos finales de API y descifrado de hashes y archivos cifrados. Los jugadores analizarán un APK para extraer información confidencial y un token de autorización codificado, luego explotarán un punto final de API vulnerable a la lectura arbitraria de archivos. Finalmente, lograrán comprometer por completo el sistema descifrando y analizando datos de sesión cifrados de Solar-PuTTY.


Reconnaissance

Realizaremos un reconocimiento con Nmap para ver los puertos que están expuestos en la máquina Instant. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPortsarrow-up-right, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. Verificamos que al parecer se trata de una máquina Ubuntu que dispone de una página de Apache y el servicio SSH.

Procederemos a transformar el archivo generado targetedXML en un archivo HTML. Posteriormente, montaremos un servidor web para visualizarlo.

Accederemos a http://localhostarrow-up-right y verificaremos el resultado en un formato más cómodo para su análisis.

Web Enumeration

Accederemos a http://instant.htb arrow-up-righty verificamos que en el sitio web nos aparece un botón de Download now en el cual haciendo hovering verificamos que se trata de un archivo llamado instant.apk. Nos descargaremos el archivo APK para verificar su uso o analizarlo.

Analyzing APK binary with JADX-GUI

Una vez descargado el archivo instant.apk, el siguiente paso será analizar el binario. Esto lo podemos hacer de dos maneras, a través de la herramienta apktool que nos descomprimirá el APK en nuestro directorio actual para posteriormente revisar los archivos que nos genere.

La otra opción, la más recomendable, es hacer uso de la herramienta jadx-gui, que nos permitirá realizar lo mismo pero a través de una interfaz GUI.

Analizando el código fuente de la aplicación, nos encontramos en AdminActivities lo que parece ser una clave Authorization y un subdominio llamado mywalletv1.instant.htb.

Nos guardaremos con esta clave del usuario admin, para verificar si nos puede servir más adelante.

Revisando el siguiente archivo que se encuentra en la ruta res/xml/network_security_config.xml nos encontramos con la siguiente información. Parece tratarse de subdominios.

Añadiremos estos nuevos subdominios en nuestro archivo /etc/hosts.

Initial Access

Using Swagger API

Al acceder a http://mywalletv1.instant.htbarrow-up-right no logramos visualizar nada en la página web.

Por otro lado, en la página http://swagger-ui.instant.htbarrow-up-right logramos acceder a una página web que se trata de una página web de Swagger.

circle-info

Swagger es un conjunto de herramientas y especificaciones diseñadas para ayudar a crear, documentar y consumir APIs RESTful.

A través del siguiente enlace, podemos consultar cómo funciona el Swagger.

Revisando la página web, podemos verificar que han documentado cómo podemos registrarnos. En este caso, intentaremos registrarnos pare verificar qué podemos realizar.

Al intentar registrarnos, verificamos que nos muestran cómo podemos efectuar el registro a través de la API del sitio web, también nos demuestran los diferentes resultados que obtendríamos.

Desde nuestra terminal, intentaremos registranos usando la API, verificamos que nos aparece conforme el registro se ha realizado correctamente.

Por otro lado, también verificamos que hay documentación de cómo utilizar la API para iniciar sesión con ella. Al darle a la opción de Execute nos deberá proporcionar la información del comando a utilizar.

El comando que nos proporcinó es el siguiente, en el cual al ejecutarlo, nos proporciona un Access-Token de nuestro usuario.

Revisaremos la documentación para visualizar nuestro perfil. Para visualizar nuestro perfil, lo podemos hacer a través de cURL o accediendo a la URL que se nos menciona.

En este caso, utilizamos BurpSuite para enviar la solicitud modificado. En este caso, añadimos el apartado de Authorization y la clave del Access-Token que obtuvimos anteriormente.

Al enviar la solicitud, verificamos que en el resultado de la respuesta por parte del servidor, nos indica que somos el usuario que hemos creado.

Dado que el Access-Token que tenemos actualmente parece ser muy similar al del usuario admin, que obtuvimos anteriormente al analizar el archivo APK, el siguiente paso fue modificar el campo Authorization con el Access-Token del usuario admin y verificar la respuesta del servidor.

En este caso, comprobamos que el servidor ha aceptado el Access-Token. Por lo tanto, es válido y el usuario que tenemos ahora es el usuario instantAdmin.

Performing Local File Inclusion with Swagger API

En la documentación de Swagger del sitio web http://swagger-ui.instant.htbarrow-up-right logramos encontrar documentación relacionada a revisar los logs.

Desde BurpSuite interceptaremos la solicitud al acceder a http://swagger-ui.instant.htb/api/v1/admin/view/logsarrow-up-right, asignaremos el Authorization del usuario instantAdmin y comprobaremos que nos aparece en el directorio /home/shirohige/logs/ de un archivo llamado 1.log.

En la documentación del sitio web, también verificamos que nos proporcionan la documentación de cómo leer un log. En este caso, indicaremos que queremos leer el archivo encontrado 1.log y nos mostrará cómo leerlo a través del API.

Desde BurpSuite, volveremos a modificar la solicitud para leer el archivo mencionado. Por parte de la respuesta del servidor, logramos leer el archivo mencionado.

Por lo tanto, lo que decidimos intentar realizar es leer a través de un Local File Inclusion (LFI) la clave privada SSH del usuario shirohige. Comprobamos que hemos podido leer la clave privada en el resultado de la respuesta del servidor.

El resultado al copiarlo en un archivo, dispone de varios carácteres que deberemos de eliminar para que tenga el formato adecuado. Por lo tanto, a través de expresiones regulares modificaremos el archivo,

Accessing via SSH with id_rsa key

Le daremos los permisos necesarios al archivo id_rsa para poder utilizarlo y autenticarnos al SSH con el usuario sin proporcionarle las credenciales de este mismo. Verificamos que podemos visualizar la flag de user.txt.

Privilege Escalation

Analyzing a database file

Navegando en las diferentes rutas, nos encontramos con un archivo de una base de datos llamada instant.db. Este archivo lo compartiremos a través de un servidor web con Python, dado que la máquina dispone del binario.

Desde nuestra máquina atacante, nos descargaremos el archivo y lo abriremos con sqlitebrowser.

Al revisar la base de datos, nos encontramos con los diferentes usuarios del sitio web. En este caso el usuario que nos interesaría es el de instantAdmin para verificar si estas credenciales nos servirían para el usuario root.

En este caso, la contraseña se encuentra en un formato hash pbkdf2:sha256, intentamos crackear el hash pero vemos que tardaba bastante tiempo y no conseguíamos resultado.

Recovering Credentials from Solar-PuTTY Backup (sessions-backup.dat)

Revisando el directorio /opt, nos encontramos con un directorio backup que contenía un archivo llamado sessions-backup.dat, es decir, un archivo de backup de la sesión de Solar-PuTTY.

Transferiremos este archivo a nuestra Kali atacante.

Nos descargaremos el archivo de backup y verificaremos que lo disponemos en nuestro equipo local.

Al revisar el archivo, verificamos que no es legible a simple vista.

Revisando en Internet, nos encontramos con el siguiente script en Python que se encarga de desencriptar los archivos de sesiones de Solar-PuTTY.

El siguiente objetivo será lograr obtener la contraseña del archivo para obtener los datos. Estos archivos de sesiones, vienen cifrados con contraseña para no sean legibles a simple vista. En el siguiente blog, nos explican la vulnerabilidad detalladamente.

Al ejecutar el script, verificamos que hemos logrado desencriptarlo y obtener un archivo .bin.

Al analizar el archivo SolarPutty_sessions_decrypted_estrella.bin, verificamos que en el contenido nos aparece las credenciales del usuario root.

Probaremos de autenticarnos con el usuario root y comprobamos del acceso correcto y de visualizar la flag de root.txt

Última actualización

¿Te fue útil?