Sightless

Sightless es una máquina Linux de dificultad fácil que presenta un sitio web para una empresa que ofrece varios servicios. La enumeración del sitio web revela una instancia SQLPad vulnerable a la inyección de plantilla CVE-2022-0944(https://nvd.nist.gov/vuln/detail/CVE-2022-0944), que se aprovecha para afianzarse dentro de un contenedor Docker.

Una enumeración adicional revela el archivo /etc/shadow con un hash de contraseña, que se descifra para revelar la contraseña, lo que otorga acceso SSH al host. La enumeración posterior a la explotación revela una instancia Froxlor vulnerable a Blind XSS CVE-2024-34070(https://nvd.nist.gov/vuln/detail/CVE-2024-34070).

Esto se aprovecha para obtener acceso al servicio FTP, que contiene una base de datos KeePass. El acceso a la base de datos revela las claves SSH raíz, lo que conduce a un shell privilegiado en el host.

También podemos aprovechar para convertirnos en usuario raíz con la función PHP-FPM en Froxlor para obtener una ejecución de código remoto para obtener el id_rsa del usuario raíz.

Reconnaissance

Realizaremos un reconocimiento con Nmap para ver los puertos que están expuestos en la máquina Sightless. 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. Verificamos que al parecer se trata de una máquina Ubuntu que dispone de una página de Nginx y servicios FTP y SSH.

Procederemos a transformar 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 la siguiente entrada en nuestro archivo /etc/hosts, debido que en el resultado de Nmap, nos aparecía que el sitio web nos redirigía a http://sightless.htb.

Web Enumeration

A través de la herramienta whatweb revisaremos las tecnologías que utiliza el sitio web.

Procederemos a acceder a http://sightless.htb y procederemos a investigar sobre el sitio wbe.

Revisando en el sitio web, verificamos que haciendo hovering en el sitio web, nos encontramos que al parecer existe un sitio web llamado sqlpad.sightless.htb.

Procederemos a realizar una enumeración de directorios básica con la herramienta de dirsearch, verificamos que no logramos obtener ningún resultado esperado.

Procederemos a añadir en nuestro archivo /etc/hosts la entrada sqlpad.sightless.htb.

Abusing SQLPad < 6.10.1 - Remote Code Execution (CVE-2022-0944)

Al acceder a http://sqlpad.sightless.htb y revisar información sobre el sitio web, nos damos cuenta que se trata de una aplicación web de SQLPad.

SQLPad es una aplicación web que permite escribir y ejecutar consultas SQL de manera fácil y visualizar los resultados al instante.

Al revisar más información sobre la versión del SQLPad, verificamos que es una versión vulnerable. Realizando una búsqueda por internet, nos encontramos con el siguiente CVE.

Por otro lado, también logramos encontrar un repositorio de GitHub donde nos proporcionan un exploit para aprovecharnos de la vulnerabilidad. Procederemos a clonarnos el repositorio en nuestro equipo atacante.

También verificamos el uso del exploit, en el cual nos indica que nos pongamos en escucha con nc por un puerto y al ejecutar el exploit recibiremos en principio una Reverse Shell hacía la máquina.

Tal y como nos indica el PoC del exploit, nos pondremos en escucha por un puerto.

Le daremos permisos de ejecución al exploit, procederemos a utilizarlo proporcionándole la URL del SQLPad (http://sqlpad.sightless.htb) y nuestra dirección y el puerto donde estamos escuchando con nc.

Verificamos nuevamente que hemos recibido correctamente acceso a la máquina, pero al parecer no nos encontramos en la máquina principal. Parece ser que nos encontramos como usuario root en una especia de máquina de Docker que es la que levantaba el servicio de SQLPad.

Initial Access

Procederemos a revisar el archivo /etc/passwd en busca de usuarios que dispongan de una bash, en el resultado obtenido verificamos que el usuario michael dispone de terminal.

Cracking Hashes in /etc/shadow File

Dado que actualmente somos el usuario root, procederemos a revisar el contenido del archivo /etc/passwd el cual contiene las contraseñas de los usuarios, entre las cuales apareecn la del usuario michael.

Procederemos a guardarnos en nuestro equipo local el hash del usuario en un archivo llamado hashes.

Al proceder a intentar crackear el hash con la herramienta de hashcat, revisaremos que finalmente logramos crackear el hash y obtener la contraseña en texto plano.

Probaremos de acceder al equipo víctima 10.10.11.32 mediante el protocolo SSH con el usuario michael y las credenciales obtenidas y verificamos que hemos logrado acceder al equipo y verificar la flag de user.txt.

Privilege Escalation

Discover Internal Web Server (SSH Port Forwarding)

Revisando los puertos que se encuentran abiertos en el equipo local (localhost), verificamos que existen varios puertos inusuales.

Al realizar un cURL de la dirección 127.0.0.1:8080, verificamos que se trata de una página web de Froxlor.

Procederemos a realizar Port Forwarding para indicar que nuestro localhost:8080 sea el 127.0.0.1:8080 de la máquina víctima.

Desde nuestro equipo al verificar el acceso a http://127.0.0.1:8080, verificamos que es un panel de autenticación de Froxlor.

Froxlor es un Panel de control de servidores multilenguaje, con una interfaz gráfica web que permite administrar, entre otros, los servicios de correo electrónico, dominios y FTP. Está pensado para proveedores de servicios de internet (ISP) o revendedores de servicios de alojamiento web.

Al revisar los archivos habilitados de Froxlor que se encuentran en el equipo víctima, verificamos varios subdominios (admin.sightless.htb y web1.sightless.htb).

Procederemos a añadir estas estradas en nuestro equipo pero en el localhost, debido que estamos realizando Port-Forwaring y añadiendo estas entradas en la dirección IP de la máquina víctima no nos serviría, ya que al Froxlor solamente disponemos de acceso desde nuestro 127.0.0.1 debido al Port Forwarding realizado con SSH.

Chrome Remote Debugger Pentesting

Revisando los procesos que se encuentran en ejecución en el sistema, verificamos que hay un usuario llamado john que se encuentra ejecutando servicios como Chrome, lo cual parece que se encuentra ahora mismo activo.

Revisando los procesos activos sobre los puertos internos que habíamos descubierto anteriormente, verificamaos que hay un proceso del usuario john que utiliza este puerto interno con un proceso de Chrome, lo cual sugiere que el usuario se encuentra actualmente utilizando el navegdor.

Dado que John está autenticado y visualiza la página web de Froxlor con Chrome en el destino, podemos aprovechar el puerto de herramientas de desarrollo remoto para ver la página como John.

Sin embargo, no está claro en qué puerto está escuchando el depurador, por lo que simplemente reenviaremos varios puertos y los probaremos todos los que encontramos inicialmente.

La función de depuración remota de Chrome permite que el malware obtenga acceso a las cookies después de la explotación. No se requieren privilegios de root. Se trata de una técnica adversarial bastante conocida y de uso común, al menos desde 2018, cuando se lanzó Cookie Crimes.

Procederemos a acceder con Chromium y accederemos a la siguiente página web.

Al acceder al sitio web, deberemos de configurar el target, para ello le daremos a Configure.

Añadiremos los puertos que hemos realizado Port-Forwarding sober los puertos internos de la máquina víctima.

Al revisar nuevamente, verificamos que logramos obtener la sesión de depuración remota, procederemos a acceder a Inspect.

Al acceder a la depuración remota de Chrome, verificamos que hay una sesión activa al parecer del usuario john, en la cual se encuentra accediendo al Froxlor. Pasado un tiempo, verificamos que cuando el usuario accede, en el apartado de (Network < index.php < Payload) verificamos que logramos obtener la contraseña que está ingresando el usuario.

Probaremos de acceder con las credenciales obtenidas desde nuestro equipo a http://127.0.0.1:8080.

Verificamos que hemos logrado acceder correctamente al Froxlor con el usuario admin.

Abusing PHP-FPM function to get Remote Code Execution on Froxlor

Después de una larga revisión en el sitio web, verificamos que podemos crear nuevas versiones de PHP que permiten ejecutar comandos para levantar servicios.

Esto lo podemos llevar a nuestro favor para crear una nueva versión la cual no ejecute un comando legítimo, sino un comando que nos interese a nosotros que ejecute.

En este caso, procederemos a realizar que realice una copia de la clave privada SSH del usuario root y lo almacene en la siguiente ruta: /tmp/id_rsa.

Procederemos de acceder a System < Settings < PHP-FPM.

Volveremos a iniciar nuevamente el servicio de PHP-FPM para que ejecute la nueva versión de PHP que hemos creado. Esto lo que hará es cargar esa nueva versión y ejecutar el comando establecido.

Después de un tiempo, verificamos que en el directorio /tmp ha aparecido la clave privada del usuario root. Pero con los permisos que dispone el archivo actualmente, no podemos utilizarlo.

El siguiente paso, será darle los permisos necesarios a la copia de la clave privada para poder utilizarla correctamente. Modificaremos la versión de PHP tal como realizamos anteriormente y volveremos a iniciar el servicio.

Al cabo de un tiempo, verificamos que el archivo id_rsa ha sido modificado correctamente con permisos totales.

Procederemos a verificar el contenido de la clave privada SSH del usuario root.

Desde la misma máquina podermos utilizar la clave para autenticarnos como usuario root y ganar el acceso completamente.

También lo que podremos realizar es copiar el contenido de la clave privada en nuestro equipo local, le daremos los permisos necesarios y procederemos a conectarnos. Verificaremos que logramos mostrar el contenido de la flag root.txt.

Original Privilege Escalation (PrivEsc)

Después de revisar el WriteUp original una vez que la máquina Sightless se encuentra retirada en HTB, verificamos la ruta de la escalada de privilegios original por la cual estaba planeada la máquina.

En un principio, la ruta que nosotros logramos explotar inicialmente también es válida, ya que nos aprovechanos de las funciones que ofrece Froxlor.

Accesing FTP Server

En la página web de Froxlor, verificamos que en el aprtado de Resources < Customers, aparece que hay un usuario llamado web01.

Al acceder a este usuario dándole en el hipervínculo que nos aparecía, verificamos que tiene acceso a una pestaña llamada FTP < Accounts. Al acceder a esta página, verificamos que existe un usuario llamado web1 que parece indicarnos que es válido pra acceder al FTP que enumeramos principalmente en el escaneo inicial con Nmap.

Al editar la cuenta del usuario de FTP, verificamos que podemos asignarle una contraseña al usurio. En nuestro caso le pondremos: Password01

Procederemos de autenticarnos al servicio FTP con las credenciales web1/Password01 y que ganamos del acceso correcamente.

Enumerando los directorios disponibles en el servicio FTP, verificamos que hay un archivo de una base de datos de Keepass, el cual procederemos a descargarlo de manera local para verificar sobre él.

Cracking and accessing Keepass 1.x vault

Verificamos que abriendo el archivo nos requería de credenciales para acceder a él. Por otro lado, comprobamos que el archivo se trata de una base de datos de Keepass 1.x.

Procederemos a obtener el hash de la contraseña maestra del Keepass a través de la herramienta de keepass2john.

Con la herramienta de john procederemos a crackear el hash y en este caso nos logra mostrar la contraseña en texto plano.

Dado que se trata de una base de datos de Keepass 1.x, deberemos de descargarnos la herramienta de kpcli para poder trabajar con el archivo de la base de datos de contraseñas. Verificaremos que proporcionándole la contraseña maestra abtenida logramos el acceso correctamente.

Revisamos que disponemos de de un directorio /General/sightless.htb/Backup el cual dispone de un archivo llamado ssh y de unas credenciales.

Procederemos a revisar el archivo ssh, verificamos que existe un archivo llamado id_rsa que parece ser una clave privada SSH, lo exportaremos en nuestro directorio de trabajo.

Becoming root with backup of id_rsa file obtained

Le daremos los permisos necesarios a la clave privada encontrada en el directorio Backup, y en este caso nos muestraa un mensaje de eror de libcrypto.

Lo que realizaremos es copiar el contenido de la clave privada en un nuevo archivo llamado root_key para evitar que hayan carácteres extraños en el archivo orignalmente exportada.

Verificaremos que si procedemos nuevamente de conectarnos al SSH mediante la clave privada del usuario root, ganamos acceso a la máquina y visualizamos la flag de root.txt.

Última actualización

¿Te fue útil?