Rappel : L’article qui va suivre contient des techniques et méthodes qui peuvent s’avérer être illégales et dangereuses si elles sont utilisées à mauvais escient. Ce tutoriel a été construit dans un but pédagogique et doit en aucun cas être utilisé contre un particulier, une entreprise, une organisation à but non lucratif ou une administration publique de quelconque pays. le-guide-du-sysops.fr se dédouane de toute responsabilité en cas de problèmes ou d’incidents de quelque nature que ce soit après le visionnage de cet article.

Bonjour à tous ! Aujourd’hui nous partons à la découverte de l’utilitaire crackmapexec, qui va nous permettre de pouvoir pentester un domaine active active directory, à travers le protocole SMB si celui-ci est actif sur la machine cible en question. Toutes les commandes ci-dessous seront exécutées via l’utilisateur root.

Laboratoire virtuel :

  • Adresse réseau général : 192.168.145.0/24
    • Windows Server 2019 Datacenter : 192.168.145.128/24 (Rôle ADDS/DNS)
    • Kalilinux 2020.2 192.168.145.152/24

Sur Kali linux vérifiez que vous avez le logiciel crackmapexec, sinon installez-le.

apt install crackmapexec

Dans un premier temps, nous allons cartographier le réseau en exécutant un SCAN de port (445 en l’occurrence…) sur l’ensemble des machines connectées au réseau :

crackmapexec smb 192.168.145.0/24

Nous obtenons deux résultats. Le premier représente ma machine cliente hôte Windows 10 (192.168.145.1/24). Le deuxième représente une machine Windows Server (192.168.145.128/24), qui a comme nom NetBIOS DC (qui peut faire penser à : « Domain Controller ») et comme domaine coud.local.

Contrairement à ce qui est indiqué, cette machine n’est pas un ordinateur Windows 10 mais un serveur Windows Server 2019 DataCenter. En effet, je pense que logiciel n’a pas été encore mis à jour, car il détecte bien les anciennes versions de WS comme Windows server 2016. Quoi qu’il en soit, une machine identifiée comme étant un ordinateur Windows 10, mais portant un nom faisant référence à un serveur doit vous alerter…

Ndlr : Les faux positifs de ce genre peuvent arriver souvent, lors de prises d’empreintes avec des logiciels comme NMAP etc. J’en appelle à votre expérience et à votre esprit de déduction, pour déterminer si oui ou non une machine est bien ce qu’elle prétend être.

De ce fait, nous allons pouvoir tenter une attaque brute force pour essayer de trouver des couples user/password, peu importe si ce futur compte est administrateur ou pas (dans un premier temps).

Ndlr : Ce qui suit est un scénario optimiste, bien sûr je connaissais en amont le mot de passe du compte user. (Le mot de passe et le compte étaient présents dans le fichier top-usernames-shortlist.txt et xato-net-10-million-passwords-10.txt que j’avais édités avant ce tutoriel, pour conduire ce test).

Si-vous souhaitez télécharger un ensemble de dicos login/mdp facilement, installez le paquet seclists sur votre machine. Vous aurez alors la même arborescence que moi pour la commande suivante !

apt install seclists
# commande générique 
crackmapexec smb 192.168.145.128 -u /lien/vers/votre/dico-users -p /lien/vers/votre/dico-de-mdp

Commençons l’attaque brute force dès à présent.

# commande si vous avez seclists
crackmapexec smb 192.168.145.128 -u /usr/share/seclists/Usernames/top-usernames-shortlist.txt -p /usr/share/seclists/Passwords/xato-net-10-million-passwords-10.txt

Après quelques secondes, je trouve le mot de passe de l’utilisateur user. Celui-ci est un simple utilisateur qui ne dispose d’aucun droit particulier sur le domaine coud.local, mais vous allez voir ce que nous pouvons faire simplement avec cet utilisateur… (Je précise de nouveau que ce n’est pas de la magie, mais que de base j’avais inscrit dans le dico de mots de passe, celui rattaché au compte « user » : aze890!. En pratique, vous risquez de mettre beaucoup plus de temps, voir ne jamais trouver de couple login/password).

Lister tous les utilisateurs du domaine coud.local

crackmapexec smb 192.168.145.128 -u 'user' -p 'aze890!' --users

Lister tous les groupe du domaine coud.local

crackmapexec smb 192.168.145.128 -u 'user' -p 'aze890!' --group

Lister tous les partages réseaux SMB, même ceux ou on a zero droit.

crackmapexec smb 192.168.145.128 -u 'user' -p 'aze890!' --shares

Obtenir la politique des mots de passe du domaine

crackmapexec smb 192.168.145.128 -u 'user' -p 'aze890!' --pass-pol

Vous avez surement dû trouver le(s) compte(s) administrateur(s) du domaine, (dans mon cas c’est administrato[email protected], vu que ma machine est en anglais). Généralement certaines organisations peuvent préfixer certains comptes avec adm_<user>@domaine.local, a_<user>@domaine.local etc. Soyez attentif à la nomenclature des comptes et des groupes ! Le compte administrateur par défaut étant très rarement renommé (et pourtant… cela est une très bonne pratique de sécurité)

Voilà, nous en avons fini avec ce compte « standard » user, maintenant pour obtenir plus d’informations, nous devons essayer de brute forcer le mot de passe d’un administrateur du domaine par exemple… Bonne chance 🙂

Si vous souhaitez approfondir le sujet, je vous donne le lien de l’article qui m’a inspiré pour la rédaction de celui-ci. Vous verrez notamment un ensemble d’autres commandes, pour continuer votre pentest une fois que vous aurez réussi a obtenir l’id + mdp d’un compte administrateur : https://www.hackingarticles.in/lateral-moment-on-active-directory-crackmapexec/

++

Geoffrey pour Le guide du sysops


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"