Cascade - HackTheBox

5 minute read

En este post se explicarán los pasos que se han seguido para conseguir vulnerar la seguridad de la máquina Cascade en Hack The Box, tal y como se refleja, es un sistema Windows con un nivel de dificultad medio (5.2).

Ilustración 1: Cascade.

Se dio comienzo a la fase de enumeración haciendo uso de NMAP:

Ilustración 2: Comando de NMAP ejecutado.

Ilustración 3: Resultados de NMAP.

Analizando los resultados obtenidos se puede apreciar que la máquina objetivo es un Windows Server 2008 R2 SP1, con un Directorio Activo configurado y cuyo dominio es "cascade.local". Además, tiene el servicio WinRM habilitado.

Ilustración 4: Se añadió el nombre de la máquina al fichero /etc/hosts.

Se comenzó realizando conexiones por defecto a los servicios habilitados con la finalidad de obtener más información del sistema.

Ilustración 5: Intento de conexión con smbclient.

Mediante rpcclient se obtuvieron los grupos y usuarios del dominio:

Ilustración 6: Usuarios del dominio.

Ilustración 7: Grupos del dominio.

Se realizaron consultas a LDAP haciendo uso de la utilidad ldapsearch:

Ilustración 8: namingContexts obtenidos con ldapsearch.

Ilustración 9: Resultados de la query de búsqueda con ldapsearch.

Se identificó una contraseña codificada en base64, perteneciente al usuario r.thompson

Ilustración 10: Contraseña codificada en base64 en los resultados que proporcionó ldapsearch.

Una vez se obtuvo la contraseña decodificada, se probaron diferentes conexiones a los servicios que la máquina tenía habilitados, como WinRM, pero no se consiguió ninguna sesión, únicamente se podían realizar conexiones mediante SMB.

Ilustración 11: Contraseña del usuario r.thompson.

Haciendo uso de smbclient, se listaron los directorios a los que tenía acceso el usuario r.thompson, entre ellos se encontraba el directorio Data, que almacenaba en uno de sus subdirectorios un fichero llamado "VNC Install.reg".

Ilustración 12: Conexión con el usuario r.thompson haciendo uso de smbclient.

Ilustración 13: Listado de todos los directorios y ficheros del directorio Data.

Ilustración 14: Descarga del fichero "VNC Install.reg".

El fichero que se descargó contenía la información del registro de VNC que almacena la contraseña cifrada, la cual parecía pertenecer al usuario s.smith.

Ilustración 15: Fichero con la información de registro de VNC.

Para obtener la contraseña se siguieron los pasos que se especifican en el siguiente enlace:

Se descargó el ejecutable vncpwd.exe y se consiguió obtener la contraseña del usuario s.smith.

Ilustración 16: Obtención de la contraseña haciendo uso de vncpwd.exe.

También era posible obtener la contraseña usando la siguiente herramienta desde una máquina Linux:

Una vez instalada, se convirtió la contraseña en hexadecimal a base64 usando el siguiente enlace:

  • https://base64.guru/converter/encode/hex

Ilustración 17: De Hexadecimal a Base64.

Ilustración 18: Obteniendo la contraseña haciendo uso de vncpwd.

Posteriormente, se usó WinRM para abrir una sesión de PowerShell en el sistema con las credenciales obtenidas.

Ilustración 19: Conexión mediante WinRM con el usuario s.smith y la flag user.txt.

Cuando se tuvo acceso al sistema con el usuario s.smith, se comenzó un breve reconocimiento de los privilegios que dicho usuario poseía y a los grupos del directorio activo al que pertenecía.

Ilustración 20: Privilegios del usuario s.smith.

Ilustración 21: Grupos a los que pertenece el usuario s.smith.

El usuario s.smith pertenecía al grupo "Audit Share", uno de los directorios que se había identificado anteriormente y al que el usuario r.thompson no tenía acceso.

Ilustración 22: Directorio Shares con las diferentes carpetas compartidas mediante SMB.

Ilustración 23: Contenido del directorio C:SharesAudit.

Se encontró un fichero que contenía tablas de una base de datos SQL, visualizando el contenido desde la Powershell, se podía observar una ristra de caracteres parecida al resultado de una codificación en base64 o algún tipo de cifrado.

Ilustración 24: Fichero Audit.db.

Ilustración 25: Ristra de caracteres destacable.

Parecía que el vector de ataque para realizar la escalada de privilegios estaba claro, se debía investigar el contenido del directorio C:SharesAudit. Por tanto, no se ejecutó ninguna otra utilidad de enumeración en Windows, como podría ser BloodHound o WinPeas, y se procedió a la descarga del contenido de dicho directorio mediante SMB.

Ilustración 26: Descargando el contenido de C:SharesAudit$.

Se abrió el fichero de base de datos con "DB Browser for SQLite" y se confirmó que la ristra de caracteres que se había encontrado anteriormente pertenecía al campo pwd del usuario ArkSvc de una tabla denominada LDAP.

Ilustración 27: Tabla LDAP de Audit.db.

Además, había un fichero con extensión ".bat" que ejecutaba "CascAudit.exe" pasándole por parámetro la ruta donde se encontraba el fichero de la base de datos.

Ilustración 28: Fichero RunAudit.bat.

Se decidió ejecutar para determinar si era posible obtener más información, pero el ejecutable parecía haber dado error.

Ilustración 29: Ejecución de CascAudit.exe.

Por tanto, el siguiente paso que se tomó fue intentar aplicar alguna herramienta de ingeniería inversa sobre los ficheros descargados, concretamente sobre "CascCrypto.dll" ya que por el nombre se da a entender que el fichero está involucrado en el cifrado de la contraseña.

El objetivo era conocer que tipo de cifrado se aplicaba y que salt o contraseña se usaba. Para decidir que tipo de programa usar se investigó en las siguientes fuentes:

Se eligió usar un descompilador para obtener partes del código fuente original, concretamente dotPeek de JetBrains que es gratuito.

Se podía observar que el algoritmo de cifrado usado era AES.

Ilustración 30: Contenido de CascCrypto.dll.

Se cifraba con un tamaño de bloques de 128, con el modo de operación CBC y el vector de inicialización era "1tdyjCbY1Ix49842".

Ilustración 31: Clave de cifrado dentro de CascCrypto.dll.

En este punto, aún no era posible descifrar la contraseña que se tenía en el fichero Audit.db, porque era necesario conocer la contraseña que se envía por parámetro al método "DecryptString" que se encontraba en el fichero CascCrypto.dll, así que se investigó el contenido del ejecutable CascAudit.exe.

Se identificó una llamada al método "DecryptString" donde se le pasaba por parámetro la contraseña "c4scadek3y654321".

Ilustración 32: Contenido de CascAudit.exe.

Otro descompilador, quizás más cómodo que dotPeek dado que no requiere instalación es dnSpy:

Se introdujeron todos los datos obtenidos en https://www.devglan.com/online-tools/aes-encryption-decryption y se obtuvo la contraseña.

Ilustración 33: Desifrando la contraseña.

Ilustración 34: Contraseña obtenida.

Con la contraseña obtenida se abrió una sesión de PowerShell con el usuario ArkSvc mediante WinRM.

Ilustración 35: Usuario ArkSvc.

Realizando los mismos pasos que con el usuario s.smith, se observó que el usuario ArkSvc pertenecía al grupo "AD Recycle Bin".

Ilustración 36: whoami /groups del usuario ArkSvc.

Pertenecer a dicho grupo permite leer los objetos del directorio activo que han sido borrados, en los cuales se puede encontrar información valiosa, tal y como se indica en:

Se ejecutó un comando de PowerShell que permitía leer los objetos borrados y se consiguió la contraseña del administrador codificada en base64.

Ilustración 37: Obteniendo objetos borrados del AD.

Ilustración 38: Contraseña en base64 del administrador del sistema.

Ilustración 39: Decodificando la contraseña en base64.

Ilustración 40: Sesión de PowerShell como administrador del sistema.

Como conclusión se podría decir que ha sido una máquina muy completa, donde se han aprendido diferentes herramientas y técnicas, la mejor parte sin duda ha sido el proceso de la escalada de privilegios.