CascadeHTB-WriteUp-ETHCOP

EthicalHCOP
9 min readJul 26, 2020

EthicalHCOP.

Cascade me ha dejado bastantes nuevos conocimientos sobre explotación en windows. Marcada como medianamente realista, Cascade reúne técnicas que podemos utilizar en una explotación en entornos reales.

Reconocimiento y escaneo.

El nmap nos revela algunos servicios relevantes de esta máquina, como el ldap, smb, domain y winrm.

Para nosotros ya es costumbre analizar el smb utilizando enum4linux ya que nos entrega buena info de manera automática. Sin embargo, si quisiéramos utilizar un metodo mas manual, podriamos utilizar la herramienta rpcclient y obtener los mismos datos arrojados por enum4linux.

En el escaneo con enum4linux, vemos nuevamente el mensaje de que se permite acceso anónimo al servidor.

De igual manera, un poco más abajo se nos listan los usuarios de dominio.

Como les comentaba arriba, esta misma información la podemos obtener haciendo uso de la herramienta rpcclient.

Sin embargo, al realizar técnicas como ASRepRoast no obtenemos datos interesantes con alguno de estos usuarios.

Explotación de Usuario.

Así que cambiamos nuestro enfoque de servicio por el SMB al LDAP. Hay varias herramientas las cuales podemos hacer uso de ella y extraer información del servicio LDAP, como lo puede ser la herramienta JXplorer o ldapsearch.
Para esta máquina haremos uso de ldapsearch, con esta herramienta iremos descubriendo poco a poco información.

Para ampliar un poco más el conocimiento acerca del uso de ldapsearch, dejare un video de IppSec en la solución de la máquina YPUFFY en donde hace uso de esta herramienta.

https://youtu.be/UoB-J-eDvrg?t=765

El primer comando que ejecutaremos es:

ldapsearch -x -h 10.10.10.182 -s base

Aquí dejo un poco de documentación acerca del parámetro base en la bandera -s (scope)

https://ldapwiki.com/wiki/LDAP%20Search%20Scopes

Este comando nos retornara una amplia información sobre la estructura del AD, podemos ejecutar el mismo comando y agregar al final el campo por el cual queremos filtrar, en este caso filtraremos por el campo namingcontexts dándonos como resultado solo los valores de dicho campo del cual extraemos el DC (Domain Controller) del AD.

Ahora, ya que conocemos el DC del AD, podemos realizar una consulta a este para que nos extraiga la mayor cantidad de información posible. Para ello haremos uso del siguiente comando: ldapsearch -x -h 10.10.10.182 -s sub -b ‘dc=cascade,dc=local’

Yo he guardado esta salida en un archivo de texto para luego filtrar de mejor manera el contenido.

Ya que es algo tedioso analizar 6364 líneas una a una en búsqueda de algo relevante, podemos hacer uso de grep y filtrar por las palabras que nos interesen, como user, usr, usuario, password, pass, pwd etc.

Y como respuesta a una de esas búsquedas, obtenemos un campo llamado cascadeLegacyPwd, la cual contiene en formato de base64 un texto oculto.

Así que realizando la decodificación de esta base64 encontramos en texto plano la contraseña de algún usuario. Pero cual ?

En este caso, hydra no me queria funcionar, así que recurrí a otras herramientas para realizar la comprobación de la contraseña con alguno de los usuarios obtenidos anteriormente con rpcclient o enum4linux.

Así que haremos uso de CrackMapExec para realizar el ataque de Password Spray con los datos obtenidos.

El resultado de este ataque nos muestra que el usuario r.thompson ha respondido correctamente a la contraseña, asi que si enumeramos los recursos compartidos de este usuario, veremos con éxito los recursos a los que este usuario puede acceder.

También , con smbmap podemos ver los permisos de las carpetas y tener un poco mas de idea a qué parte podemos acceder y a que partes no.

La carpeta accesible a la que más me llamó la atención fue Data. Al tener varias carpetas dentro de este recurso, he decidido recorrerlo de manera recursiva ejecutando los comandos: recurse ON, Prompt OFF.

Una vez terminado el proceso, veremos varias algunas carpetas a las que se nos fue negado el permiso de acceso y otras carpetas las cuales tienen algunos archivos en su interior.

Así que vamos a descargar de manera local todos los archivos posibles para analizar su contenido en nuestra máquina.

Explorando el primer archivo descargado, vemos un log bastante interesante sobre la papelera de reciclaje del AD. En este log vemos al usuario ArkSvc realizar algunos movimientos de algunas cuentas de usuario del AD a la papelera de reciclaje, el usuario que más llama la atención es TempAdmin.

También , encontramos otro archivo .log pero en lo personal no encontre informacion relevante en este log.

Por otro lado, hay un archivo HTML con un mensaje muy muy claro y que podremos utilizar más adelante. En resumen, el mensaje escrito nos dice que han estado usando la cuenta TempAdmin para realizar acciones de migración y por último nos dice que este usuario tiene la misma password que el administrador local de la máquina.

Finalmente, veremos un archivo de VNC, en donde se almacenan algunos valores, uno de los valores más relevantes es el del campo Password el cual se guarda en formato hexadecimal.

Así que es hora de googlear y ver cómo podemos romper la contraseña. En los resultados de dicha búsqueda, encontramos 2 sitios con 2 herramientas netamente útiles para realizar la acción, una es un archivo exe y la otra es un archivo py.

https://www.raymond.cc/blog/crack-or-decrypt-vnc-server-encrypted-password/

El primero es un archivo .exe en el cual el unico parametro que debemos ingresar es el hexadecimal sin los dos puntos (:), y como resultado obtendremos una contraseña en texto plano

https://github.com/trinitronx/vncpasswd.py

El segundo archivo es un .py el cual le enviamos como parámetro las banderas -d (decode) y -H (Hexadecimal) <hex> y obtendremos de igual manera la contraseña en texto plano.

Nuevamente realizamos un ataque de password spray y obtenemos un nuevo usuario en el sistema.

Finalmente podremos leer la bandera del usuario.

Explotación de Root.

Que se haga costumbre volver a analizar todo desde 0 cuando tenemos un nuevo usuario, es decir, si habías analizado el SMB con el primer usuario obtenido, es bueno realizar el mismo análisis con los siguientes usuarios que tengas para ver si nos estamos perdiendo de algún cambio interesante. En este caso y a diferencia del usuario anterior, el recurso compartido Audit$ ha cambiado los permisos.

Así que si ingresamos en este recurso, veremos unos archivos binarios y unas carpetas, así que en lugar de descargar uno por uno, vamos a realizar una descarga recursiva.

Para ello basta con crear una carpeta en donde guardaremos todos los archivos, ingresamos nuevamente al SMB y activamos el modo recursivo (recurso ON), deshabilitamos el mensaje de confirmación (recurse OFF) y descargamos los recursos digitando mget *

Analizando los archivos descargados, vemos en el archivo RunAudit.bat el comando que está ejecutando para realizar iniciar con la auditoría.

Así que enviaremos todo el contenido descargado a un pc windows y vamos a trabajar todo el entorno ahí. Lo primero que haremos es ejecutar el .exe para ver si requiere de parámetros y analizar los mensajes que retorne.

Como vimos en el comando bat y como nos lo indica en el mensaje anterior, se requiere un parámetro que pertenece a la ruta del archivo de base de datos.

Sin embargo, al mandar la ruta del archivo de base de datos, obtenemos otro error pero ya en la ejecución del archivo .exe

Al igual que como lo hicimos en la maquina Nest, podemos analizar el archivo .exe mediante la herramienta DnSpy.

En el análisis del código, vemos una línea en donde en una variable se está guardando el resultado de la decodificación de una contraseña. Asi que podremos un punto de interrupcion en esta linea y haremos un debugging del programa.

Como configuración del debugger, solo configuraremos los argumentos en donde indicaremos la ruta del archivo .db y daremos aceptar para iniciar el debug.

El primer paso del debugger nos resaltará la línea en donde pusimos el punto de interrupción, en la parte inferior de DnSpy veremos los valores que están siendo enviados a la función para decodear la contraseña.

El siguiente paso del debugger nos situará en el final de la función que estaba ejecutando, mirando nuevamente el cuadro de los valores veremos que la variable password ya contiene un valor, en este caso la contraseña decodeada.

Por lo que podremos probar la veracidad de las credenciales ingresandolas directamente en el evil-winrm y obtener un acceso al servidor a nombre de este usuario.

Recuerdan la nota anterior en la que el usuario con el que estamos ahora hizo unas acciones en el recycle bin del AD. Mirando los grupos a los que este usuario pertenece, vemos exactamente el mismo grupo “AD Recycle Bin”.

Buscando en google como podria obtener los datos borrados, nos encontramos con varios comandos pero que a la final , cumplen con el objetivo de extraer los datos eliminados .

https://blog.stealthbits.com/active-directory-object-recovery-recycle-bin/

https://ss64.com/ps/get-adobject.html

https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-adobject?view=win10-ps

Get-ADObject -filter ‘isDeleted -eq $true -and name -ne “Deleted Objects”’ -includeDeletedObjects -Properties *

Get-ADObject -ldapFilter:”(msDS-LastKnownRDN=*)” -IncludeDeletedObjects -Properties *

Get-ADObject -Filter {displayName -eq “TempAdmin”} -IncludeDeletedObjects -Properties *

Una vez ejecutado cualquiera de los comandos anteriores, vamos a obtener el mismo campo visto anteriormente en el ldapsearch “cascadeLegacyPwd” con la contraseña del usuario TempAdmin, la cual es la misma que el usuario administrador.

Así que por último, decodificamos el base64 y nos logueamos en el sistema como administrador.

--

--