Scrambled
Scrambled es una máquina mediana con Windows Active Directory. Al enumerar el sitio web podremos intuir las credenciales del usuario "ksimpson". En el sitio web, también se indica que la autenticación NTLM está deshabilitada, lo que significa que se debe utilizar la autenticación Kerberos. Al enumerar las cuentas de usuario normales, se encuentra que la cuenta SqlSvc tiene un Nombre principal de servicio (SPN) asociado. Utilizaremos esta información para realizar un ataque conocido como "kerberoasting" y obtener el hash de "SqlSvc". Después de descifrar el hash y adquirir las credenciales para la cuenta SqlSvc, un atacante puede realizar un ataque de silver ticket para falsificar un ticket y hacerse pasar por el usuario Administrador en el servicio MSSQL remoto. La enumeración de la base de datos revela las credenciales del usuario "MiscSvc", que se puede usar para ejecutar código en la máquina remota mediante la comunicación remota de PowerShell. La enumeración del sistema cuando el nuevo usuario revela una aplicación .NET, que está escuchando en el puerto 4411. La ingeniería inversa de la aplicación revela que está utilizando la clase insegura Binary Formatter para transmitir datos, lo que permite al atacante cargar su propia carga útil y obtener la ejecución del código como nt Authority\system.

Enumeración
Iniciaremos con la enumeración de los puertos abiertos
Conociendo los puertos abiertos enumeraremos los servicios y versiones que corren en los puertos abiertos que encontramos.
Puerto 80
En el sitio web encontraremos con un sitio web que tiene tres apartados: Home, Reports y IY Services

Revisando IT Services encontraremos con la siguiente información que nos dice que el servicio NTLM se encuentra deshabilitado

En otro nos informa que al restablecer nuestra contraseña podemos loegearnos con el el nombre de usuario haciendo de contraseña

Luego encontraremos con un usuario que es ksimpson

Enumeración por ldap
Enumerando con ldap encontraremos con el name services


Enumeración con SmbClient
Teniendo en cuenta las credenciales de ksimpson, haremos uso de impacket-smclient.py para seguir enumerando los recursos compartidos.

Al intentar acceder a los recursos compartidos tenemos un error, esto es debido a que el servicio NTLM esta deshabilitado. Tenemos que usar la autenticación por kerberos con el parámetro -k

Luego de acceder a los recursos compartidos, encontraremos con un archivo pdf que se hace uso de kerberos

Explotación
Kerberoasting attack
Teniendo en cuento el anterior documento y las credenciales de ksimpson

Vemos que el usuario sqlsvc es kerberoasteable y lo que haremos será obtener el hash

Encontraremos con un usuario que es kerberoasteable por lo que procederemos a crackear el hash que encontramos
Luego de crackear con la herramienta john tendremos las siguientes credenciales:
SQL - Server
Luego de obtener las credenciales lo que intentaremos ingresar a la base de datos

Vemos que tenemos un error debido a que el servicio NTLM esta deshabilitado. Haciendo uso de las credenciales y generando el TGT intentaremos ingresar al servicio sql server
sqlsvc

ksimpson

En ambos intentos serán fallidos
Silver Ticket Attack
Ahora lo que haremos será un Silver Ticket Attack, pero antes debemos de entender como funciona la autenticación de kerberos

Para realizar este ataque necesitaremos el hash NTLM, dimain SID y el SPN
NT hash
Haciendo uso de la credencial de sqlsvc generaremos el hash NTLM en https://codebeautify.org/ntlm-hash-generator
Domain SID
Ahora haciendo uso de getPac podremos obtener el domain SID del usuario administrador

SPN
Cuando usamos GetUsersSPNs vimos el SPN Service Principal Name

Tenemos que el SPN es:
TGS
Ahora que tenemos todo y haciendo uso de ticketer generaremos el TGS, así debemos de obtener un archivo administrator.cache que haremos uso para autenticarnos con el servicio de SQL Server

Ahora usaremos la variable KRB5CCNAME
Una vez definida la variable, usaremos msssqlclient para autenticarnos

Sql Server - TGS
Haciendo uso del sitio web de hacktricks:
Enumeraremos la base de datos con los siguientes comandos
Vemos que podemos ejecutar comandos dentro de Sql Server

Para obtener una revershell seguiremos los siguientes pasos:
Configuración de
Invoke-PowerShellTcp.ps1:

Iniciamos un servidor web con Python en el directorio donde descargamos
Invoke-PowerShellTcp.ps1
Ponemos a la escucha con
ncat
Ahora ejecutamos el comando en el
Sql Server
Si seguimos los pasos deberíamos de obtener una revershell.
Escalada de privilegios
Usuario : miscsvc

Luego de obtener la revershell, seguiremos enumerando la base de datos
Enumeramos las bases de datos que se tiene en el sql server

Enumeramos la base de datos ScarmbleHR y encontraremos la tabla UserImport

En la tabla UserImport encontraremos un usuario y contraseña.

Teniendo estas credenciales y haciendo uso de RunasCs para obtener un shell con el usuario MiscSvc
Para usar RunasCs.exe subiremos este a la maquina victima con la herramienta de certutil
Ahora ejecutamos RunasCs.exe haciendo uso de las credenciales del usuario miscsvc
Usuario - miscsvc

Luego de obtener una shell y seguir enumerando encontraremos un .exe y una dll

Descargaremos a nuestra maquina atacante para analizarlo mejor.
Subimos
nc.exepara hacer uso y compartirlo a nuestra maquina atacante.
ScrambleClient.exe
Maquina victima:
Maquina atacante:
ScrambleLib.dll
Maquina victima
Maquina atacante
dnSpy
Haciendo uso de dnspy podremos hacer reversing del binario

Enumerando encontraremos y vemos que al iniciar sesión o intentar autenticarnos con el servicio se genera un archivo log.

Vemos que hace uso de Deserialización en base64

Además, vemos que haciendo uso del usuario scrmdev podremos autenticarnos y lograr ingresar

Haciendo uso del usuario podremos ingresar.

Vemos que podemos generar una nueva orden y generaremos una.

Como vemos en el código del binario vimos que genera un archivo ScrambleDebugLog.txt el cual revisaremos. Encontramos un apartado donde esta serializado en base64 y nos da una idea de poder explotar de esto.
Haciendo uso de ysoserial.net podremos generar el contenido y así poder explotar el servicio

Luego generaremos el payload para hacer uso, pero antes debemos de poner un UPLOAD_ORDER; como vimos en el archivo log
Ingresamos al servicio con telnet
Insertamos el payload

Usuario - Administrator
Antes de enviar el payload debemos de ponernos a la escucha y debemos de obtener una shell con el usuario administrator.

Last updated