StreamIO

StreamIO es una máquina mediana que cubre la enumeración de subdominios que conduce a una inyección SQL para recuperar las credenciales de usuario almacenadas, que se descifran para obtener acceso a un panel de administración. El panel de administración es vulnerable a LFI, lo que nos permite recuperar el código fuente de las páginas de administración y nos lleva a identificar una vulnerabilidad de inclusión remota de archivos, cuyo abuso nos permite acceder al sistema. Después del shell inicial, aprovechamos la utilidad de línea de comandos SQLCMD para enumerar bases de datos y obtener más credenciales utilizadas en el movimiento lateral y encontrar bases de datos guardadas del navegador, que se decodifican para exponer nuevas credenciales. Usando las nuevas credenciales dentro de BloodHound descubrimos que el usuario tiene la capacidad de agregarse a un grupo específico en el que puede leer secretos LDAP. Sin acceso directo a la cuenta, utilizamos PowerShell para abusar de esta función y agregarnos al grupo "Core Staff", luego accedemos a LDAP para revelar la contraseña LAPS del administrador.

20240323014415.png

Enumeración

Iniciamos con la enumeración de los puertos abiertos de la maquina victima.

Luego de obtener los puertos, enumeraremos los servicio y las versiones de los puertos abiertos que encontramos.

Luego de enumerar agregaremos el dominios que es streamio.htb al /etc/hosts y enumeraremos los directorios del sitio web del puerto 443

20240324005230.png

Teniendo la información actual, no se puede hacer mucho por lo que seguiremos enumerando. Ahora enumeraremos los subdominios del sitio web.

Encontramos que tenemos un subdominio que es watch

watch.streamio.htb

20240324113714.png

Ahora seguiremos enumerando los directorios del subdominio encontrado.

Tenemos algo nuevo que es search.php en el que podemos hacer una búsqueda de las películas

20240324124034.png

Explotación

SQL Injection

Luego de intentamos probar una inyeccion sql y vemos que funciono.

20240324221533.png

Por lo que teniendo en cuenta de que estamos frente a un sql server podemos encontrar mas información en el post de hacktricks:

Enumeramos las columnas te tiene la query

  • Enumeración de las bases de datos existentes:

  • Enumeración de las tablas :

  • Enumeración de las columnas:

Luego de enumerar las columnas de la tabla users lo que haremos será obtener los datos que están almacenadas en ella.

Cracking con hashcat

Luego de obtener las credenciales almacenadas en la base de datos lo que haremos será crackerlas con hashcat

20240325202726.png

Cracking con john

También podemos crackearlas con la herramienta de John The Riper.

20240325205634.png

Teniendo las credenciales en texto plano, las usaremos para autenticarnos contra el panel de administración que anteriormente habíamos encontrado

Admin panel

ingresando las credenciales de yoshihide logramos autenticarnos contra el sitio web, por lo que tenemos el siguiente panel.

20240325134302.png

En la parte del sitio web, vemos que tenemos un parámetro del cual podremos quizás explotarlo

20240325134324.png

Haciendo click en cada uno de los apartados como User management, Staff mannagement, movie management y leave a messege for admin en donde encontraremos algunos parámetros como movie=, staff=, user=.

Para encontrar o descubrir otros parámetros enumeraremos con ffuf

Encontramos otro parámetro que es debug el cual es para los desarrolladores

20240325134406.png

LFI - Local File Inclusion

Probando algunas vulnerabilidades con el parametro debug= encontramos que es vulnerable a un LFI y para leer los archivos .php usaremos wrappers de base64.

20240325134905.png

Para poder leer mas de los wrappers podemos leer el siguiente post:

Luego de obtener el contenido tenemos lo siguiente:

  • index.php

  • master.php

Analizando el archivo de master.php podemos ver que podemos incluir un archivo .php ajeno al servidor, por lo que iniciaremos un servidor en Python y crearemos un archivo .php y así verificar si se realiza una petición a nuestro servidor.

Tenemos la petición que se enviara por Burp suite

Realizamos la petición por el método post

20240325170912.png

Vemos que efectivamente se realiza una petición contra nuestro servidor.

Para obtener una revershell seguiremos los siguientes pasos:

  1. Descargaremos Invoke-PowerShellTcp.ps1 y en la ultima linea debemos de poner la linea de codigo para que se ejecute.

  2. Iniciar un servidor en el 8000 del directorio donde se encuentra el archivo Invoke-PowerShellTcp.ps1.

  1. Ahora crearemos un archivo php_revershell.php que contendrá:

  1. Luego iniciaremos otro servidor en el puerto 80 donde se encuentra nuestro archivo php_revershell.php

  1. Finalmente debemos de ponernos a la escucha con ncat

Luego debemos de hacer la petición a nuestro servidor con el nombre de nuestro archivo, que en nuestro caso es php_revershell.php.

20240325174132.png

Escalada de privilegios

Usuario - yoshihide

20240325174235.png

Luego de obtener la shell como el usuario yoshihide, enumeraremos la base de datos streamio_backup a la que no podíamos acceder desde la inyección sql

20240325202928.png

Enumernado las tablas encontramos con una que es users y lo que haremos sera ver el contenido y verificar si es igual a la anterior que nos encontramos en la base de datos streamio.

20240325203004.png

Vemos que son distintas y lo que haremos sera crackerlas

Usuario - nikk73

Tenemos las credenciales de nikk37 por la que procederemos a validarlas contra el la maquina victima

20240325205705.png

Haciendo uso de netexec podremos validar las credenciales

20240325205846.png

Podemos ver que las credenciales son validas por lo que haciendo uso de evil-winrm podremos ingresar como nikk37.

20240325210041.png

Enumerando los directorios encontraremos algo interesante, que es algunas credenciales de una perfil de usuario del navegador.

20240325212536.png

Credenciales de Firefox

Luego de descargarnos los archivos necesarios lo que haremos es obtener las credenciales con firefox_decrypt.py

Obtenemos credenciales que validaremos contra el servicio smb haciendo uso de netexec

20240325225646.png

Podemos observar que las credenciales: JDgodd : JDg0dd1s@d0p3cr3@t0r son validas, pero no podemos ingresar porque no pertenecemos al grupo remote management

Usuario - JDgodd

Haciendo uso de las credenciales, enumeraremos el sistema con bloodHound

Encontramos que el usuario JDgodd tiene permisos de writeowner contra el grupo Core Staff y este tiene permisos de ReadLAPSPassword del dominio

20240326195646.png

write owner

Para explotar esto, haremos uso de PowerView.ps1 y asi agregar al usuario JDgodd al grupo Core Staff

Asignamos las variables del usuario al cual agregaremos al grupo

Añadimos al grupo al usuario JDgodd

Luego podemos verificar si el usuario pertenece al grupo, efectivamente este ahora ya pertenece al grupo.

20240326202907.png

Para entender mejor podemos visitar :

Read Laps Password

Ahora teniedo al usuario en el grupo core Staff y este tiene permisos de ReadLAPSpassword podremos leer las credenciales del usuario administrador.

Validando las credenciales podemos ver que son validas

20240326203724.png

Usuario - administrator

20240326203942.png

Last updated