Usage

Usage es una máquina Linux sencilla que cuenta con un sitio de blog vulnerable a la inyección SQL, lo que permite que la contraseña en hash del administrador se descargue y se descifre. Esto conduce al acceso al panel de administración, donde se abusa de un módulo Laravel obsoleto para cargar un shell web PHP y obtener la ejecución remota de código. En la máquina, las credenciales de texto sin formato almacenadas en un archivo permiten el acceso SSH como otro usuario, que puede ejecutar un binario personalizado como root. La herramienta realiza una llamada insegura a 7zip, que se aprovecha para leer la clave SSH privada del usuario root y comprometer completamente el sistema.


Reconnaissance

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

A través de la herramienta de extractPorts, 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. En el resultado, comprobamos que se encuentran abierta una página web de Nginx y el servicioSSH.

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

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

Añadiremos en nuestro archivo /etc/hosts la siguiente entrada correspondiente.

Web Enumeration

Realizaremos a través de la herramienta de whatweb un reconocimiento inicial de las tecnologías que utiliza la aplicación web.

Por otro lado, ya que disponemos de un dominio llamado usage.htb, realizaremos una enumeración de posibles subdominios que se encuentren en la aplicación web. A través de la herramienta de gobuster, nos encontramos con un subdominio llamado admin.usage.htb.

Añadiremos esta nueva entrada en nuestro archivo /etc/hosts.

Accederemos a http://usage.htb y nos encontramos con un panel de inicio de sesión en la página Login, por otro lado, también existe una página llamada Register en la cual al parecer podemos registrarnos.

Finalmente, en la sección de Admin, al acceder somos redirigidos a http://admin.usage.htb en la cual también nos aparece un panel de inicio de sesión, al parecer de una página administrativa.

Accederemos a http://usage.htb/register y probaremos de registrarnos con un nuevo usuario llamado gzzcoo.

Una vez tengamos el usuario registrado, accederemos con las credenciales registradas para verificar si somos redirigidos a una nueva página, etc.

Al acceder con nuestras credenciales, nos encontramos con un blog en el cual aparentemente no logramos visualizar ningún contenido relevante.

Al intentar acceder a una página que no existe, como por ejemplo http://usage.htb/gzzcoo, nos encontramos con el siguiente mensaje de error.

Investigamos el código fuente de la página a través de Ctrl+U y copiaremos el mensaje de error para buscar en Internet y comprobar por detrás cual es el servicio que se está ejecutando.

Al buscar por Internet, nos encontramos que al parecer este mensaje de error está relacionado con Laravel.

PHP es el lenguaje de programación más utilizado en mundo para desarrollar sitios web, aplicaciones web y los populares CMS, como WordPress o Joomla. Laravel crea un entorno de trabajo y proporciona herramientas a los desarrolladores para ayudarles a desarrollar en PHP sus aplicaciones web.

Confirmamos buscando 404 Not Found Laravel en Internet y nos aparece el mismo mensaje de error con el mismo estilo que nos mostró la página http://usage.htb/gzzcoo.

Al analizar las cabeceras de la página web, también comprobamos de la existencia de una cookie relacionada con laravel_session.

Initial Access

SQL Injection - Boolean-Based Blind Injection (sqlmap)

En http://usage.htb/forget-password nos encontramos con una opción de restablecimiento de la contraseña. Al ingresar nuestro correo electrónico, verificamos que en un principio se envía un correo de restablecimiento de nuestra contraseña.

Al ingresar en el campo Email-Address un apóstrofe ' nos encontramos que el servidor nos devuelve un error 500 SERVER ERROR.

Probamos de introducir una inyección SQL para verificar si de algún modo se sanitiza esta entrada, pero en el resultado obtenido, comprobamos que podemos ingresar carácteres como ' y no es sanitizado al parecer en ninguna parte, con lo que podríamos probar de verificar si esta entrada tiene inyecciones SQL.

Al parecer lo que nosotros pensamos que realiza esta opción es la siguiente consulta SQL.

Interceptaremos la solicitud con BurpSuite, haremos click derecho sobre la solicitud interceptada y le daremos a la opción de Copy to file para copiar esta solicitud en un archivo, que llamaremos request.

Comprobaremos que se nos ha guardado correctamente el archivo request el cual contiene la solicitud interceptada.

Realizaremos a través de la herramienta de sqlmap una prueba de inyección SQLautomatizada para verificar si es vulnerable o no. Verificamos que detecta que por detrás se está corriendo un servicio de MySQL.

A través de la siguiente consulta con sqlmap, comprobaremos las bases de datos existentes en la aplicación web. Verificamos de la existencia de una base de datos llamada usage_blog.

Comprobaremos las tablas de la base de datos usage_blog en el cual nos encontramos con diferentes tablas. De las tablas enumeradas, la que nos llama la atención es la admin_users.

Realizamos un dump del contenido de las columnas presentes en la tabla admin_users y logramos encontrar la contraseña de usuario Administrator en formato hash.

Cracking hashes

Comprobaremos a través de hashidde que el hash está en el siguiente formato, guardaremos este hash en un archivo llamado hashes.

A través de la herramienta de cracking, conocida como john, utilizaremos el diccionario de rockyou.txt y finalmente logramos romper el hash y obtener la contraseña en texto plano.

Ingresaremos http://admin.usage.htb y probaremos de acceder a través de las credenciales obtenidas.

Laravel Administrator 1.8.17 Exploitation - Arbitrary File Upload [RCE] (CVE-2020-10963)

Nos encontramos con un panel de administración de Laravel en el cual en el footer nos aparece la versión 1.8.17.

Buscamos por Internet sobre diferentes vulnerabilidades de esta versión, en el cual encontramos el siguiente CVE-2020-10963.

Para poder abusar de esta vulnerabilidad, el objetivo será subir un archivo con extensión de imágen como .jpg y modificar antes de que se envíe en el servidor por la extensión PHP.

Nuestro archivo gzzcoo.jpg contiene el siguiente contenido PHP que se trata de una web shell.

Accederemos a las propiedades del usuario Administrator y subiremos nuestro archivo malicioso, antes de darle a Submit, deberemos de interceptar la solicitud a través de BurpSuite.

Al interceptar la solicitud, deberemos modificar la extensión del archivo para indicarle que sea PHP y así poder realizar el Arbitrary File Upload. Una vez lo modifiquemos, le daremos a Forward.

Verificamos que se nos redirige a /admin/auth/settingen el cual volveremos a darle a Forward.

Somos redirigidos a /uploads/images/gzzcoo.php, finalmente le daremos a Forward nuevamente.

Verificamos que se ha subido correctamente al parecer nuestro archivo malicioso pero con extensión PHP.

Haremos click derecho sobre la imagen e ingresaremos a la opción de Open Image in New Tab.

Al acceder a la imagen, seremos redirigidos al directorio donde se ha subido nuestra web shell. Verificamos que podemos ejecutar comandos arbitrarios en el sistema vulnerable desde la misma página web o desde la herramienta cURL.

El siguiente paso será lograr obtener acceso remoto al sistema, para ello nos pondremos en escucha con nc.

Aplicaremos un URL Encode hacia el comando que queremos ejecutar, que en este caso es una Reverse Shell y utilizaremos la web shell para ejecutar la Reverse Shell.

Comprobaremos que logramos acceder al sistema con el usuario dash y podemos visualizar la flag user.txt.

Al obtener la Reverse Shell, realizaremos el tratamiento básico para obtener finalmente una TTY totalmente interactiva.

Pivoting as xander user

Revisando el archivo /etc/passwd, nos encontramos con la existencia de otro usuario que dispone de bash. Esta información también logramos corroborarla en el directorio /home.

Information Leakage

Revisando nuestro directorio personal /home/dash, nos encontramos con un archivo .monitrc. Este archivo comprobamos que contiene credenciales en texto plano que podríamos intentar comprobar si se reutilizan en algún sitio.

Sobre Monit. Se trata de una herramienta para la gestión y seguimiento de procesos, programas, archivos, directorios y sistemas de archivos en sistemas similares a UNIX. Lleva a cabo el mantenimiento y reparación automática y puede ejecutar acciones significativas para solventar la situación de error.

Probamos de comprobar si estas credenciales se reutilizan para el usuario xander. Accedemos finalmente al equipo a través de SSH con las credenciales encontradas.

Privilege Escalation

Abusing sudoers privilege

Revisando si el usuario xander dispone de algún privilegio de sudoers, nos encontramos que puede ejecutar como sudo el binario llamado /usr/bin/usage_management.

Analyzing binary with strings and GHIDRA

Comprobamos que el binario usage_managment se trata de un ejecutable ELF. Por otro lado, verificamos el hash MD5 del binario y verificamos en Virus Total que al parecer se trata de un binario personalizado para la máquina Usage.

Revisaremos el funcionamiento del binario, en el cual disponemos de 3 opciones:

  • Project Backup --> Realiza una copia de seguridad y lo almacena en /var/backups/projects.zip.

  • Backup MySQL data --> Realiza una copia de seguridad de MySQL.

  • Reset admin password --> Realiza un restablecimiento de la contraseña de admin.

Por otro lado, comprobamos a través de strings sobre cadenas visibles que se encuentren en el binario para verificar cómo funciona.

Identificamos que el binario usage_management, ubicado en el sistema, ejecuta el siguiente comando para generar copias de seguridad:

Este uso de 7za presenta una vulnerabilidad que permite la lectura arbitraria de archivos. Según la documentación de HackTricks, cuando 7za encuentra un archivo con el prefijo @, lo interpreta como una lista de archivos que debe comprimir. Si tenemos la capacidad de crear archivos en el directorio donde se ejecuta el comando, podemos aprovechar este comportamiento para forzar la lectura de archivos arbitrarios.

Desde GHIDRA también logramos visualizar el funcionamiento del binario.

Exploitation custom binary to get root shell

Para explotar esta vulnerabilidad y leer la clave privada SSH del usuario root, primero nos ubicamos en el directorio donde se ejecuta 7za. Luego, creamos un archivo llamado @id_rsa para indicar que 7za debe tratar id_rsa como una lista de archivos a comprimir.

A continuación, creamos un enlace simbólico llamado id_rsa que apunta a /root/.ssh/id_rsa. De esta forma, cuando 7za intente leer id_rsa, en realidad accederá a la clave privada de root y la mostrará en un error, permitiéndonos obtener su contenido.

Al ejecutar el binario /usr/bin/usage_management a través de la opción 1 que es la que ejecuta el 7za finalmente logramos leer el archivo id_rsa del usuario root.

Copiaremos el contenido en nuestra máquina local en un archivo llamado id_rsa, el cual deberemos de tratar para eliminar los carácteres que no nos interesen.

Le daremos los permisos correspondientes para poder hacer uso de la clave privada y trataremos de acceder con el usuario root.

Finalmente, logramos obtener acceso al equipo a través del usuario root y la clave privada id_rsasin necesidad de proporcionar credenciales. Por último, visualizamos el contenido de la flag root.txt.

Última actualización

¿Te fue útil?