🚛Mouvement latéral

le mouvement latéral, un groupe de techniques utilisées par les attaquants pour se déplacer sur le réseau tout en créant le moins d'alertes possible.

Pour se déplacer nous devons avoir les droits admin, ATTENTION, il existe 2 type de compte Admin :

  • Comptes locaux faisant partie du groupe Administrateurs local

    • créés et gérés sur un ordinateur ou un appareil spécifique.

    • portée limitée et ne peuvent être utilisés que pour accéder aux ressources de cet ordinateur ou appareil.

  • Comptes de domaine faisant partie du groupe Administrateurs local

    • créés et gérés dans un domaine Active Directory

    • portée plus large et peuvent être utilisés pour accéder aux ressources de n'importre quel ordinateur ou appareil appartenant à ce domaine

🌐 Connexion à distance

🔌 Psexec

Psexec est un outil de ligne de commande permettant d'exécuter des processus à distance sur des systèmes Windows.

Ports : 445/TCP (SMB)

Adhésions de groupe requises: Administrateurs

Utilisation :

Téléchargez Psexec depuis le site officiel de Microsoft : https://docs.microsoft.com/en-us/sysinternals/downloads/psexec Ouvrez une invite de commandes sur votre système local.

Exécuter une commande à distance sur un système cible :

Exemple :

Cette commande ouvrira une invite de commandes à distance sur le système cible en utilisant les informations d'identification fournies.


💻 WinRM

Ports: 5985/TCP (WinRM HTTP) - 5986/TCP (WinRM HTTPS)

Adhésions de groupe requises: Utilisateurs de gestion à distance (Remote Management Users)

Description: Windows Remote Management (WinRM) est un protocole Web utilisé pour envoyer à distance des commandes Powershell aux hôtes Windows. La plupart des installations Windows Server auront WinRM activé par défaut, ce qui en fait un vecteur d'attaque attrayant.

Utilisation: Pour se connecter à une session Powershell distante depuis la ligne de commande, nous pouvons utiliser la commande suivante:


⏰ Tâches planifiés

Les tâches planifiées sont une fonctionnalité de Windows qui permet de planifier l'exécution de tâches à des moments spécifiques. Nous pouvons utiliser l'outil de ligne de commande schtasks pour créer et exécuter des tâches planifiées à distance.

Pour créer une tâche nommée THMtask1, nous pouvons utiliser la commande suivante :

Par exemple, pour utiliser psexec pour se connecter à un hôte distant (TARGET) à l'aide de la commande schtasks, vous pouvez remplacer <COMMAND/PAYLOAD> par la commande suivante :

Exécuter la tâche :

Supprimer la tâche :

Création de services à l'aide de sc 🔧

Ports: 135/TCP

49152-65535/TCP (DCE/RPC)

445/TCP (RPC terminé PME Tubes nommés)

139/TCP (RPC terminé PME Tubes nommés)

Adhésions de groupe requises: Administrateurs

Les services Windows peuvent être exploités pour exécuter des commandes arbitraires. Nous pouvons créer un service sur un hôte distant avec sc.exe, un outil standard disponible sous Windows. Lors de l'utilisation de sc, il tentera de se connecter au programme de service à distance Service Control Manager (SVCCTL) via RPC de plusieurs manières.

Pour se connecter à SVCCTL (Service Control Manager) sur un hôte distant, sc.exe utilise deux méthodes :

Connexion à SVCCTL via RPC (Remote Procedure Call)

sc.exe se connecte d'abord à l'Endpoint Mapper (EPM) sur le port 135, qui est un catalogue des points de terminaison RPC disponibles. sc.exe demande alors à l'EPM des informations sur le programme de service SVCCTL. L'EPM répond avec l'adresse IP et le port pour se connecter à SVCCTL, qui est généralement un port dynamique dans la plage de 49152-65535.

Connexion à SVCCTL via un canal nommé

si la connexion RPC échoue, sc.exe tentera d'atteindre SVCCTL via des tuyaux nommés (named pipes) sur les ports 445 (SMB sur TCP) ou 139 (SMB sur NetBIOS).

🛠️ Utilisation de sc.exe

Pour créer et démarrer un service nommé "THMservice" en utilisant les commandes suivantes:

La commande "net user" sera exécutée au démarrage du service, créant un nouvel utilisateur local sur le système.

Pour arrêter et supprimer le service, on peut alors exécuter les commandes suivantes:

🔄 Exemple de mouvement latéral avec sc.exe

Attaquant

cible 1 : ordinateur user compromis

cible 2 : ordinateur sur lequel nous voulons pivoté

donnée : info admin

Sur l'attaquant

Créer un service avec un reverse shell :

L'envoyé à la cible :

Faire un reverse shell (pour le pivoting :

et un autre afin de travailler depuis notre machine attaquante avec la cible 1 :

sur la cible :

Se connecter en admin sur un shell sur l'attaquant (si nc.exe installer)

Sur l'attaquant :

Récupérer le shell créer un utilisateur qui persiste sur la cible2 (cible final du pivoting) :

Créer et lancer un service pour pivoter


🌐 Windows Management Instrumentation (WMI)

Windows Management Instrumentation (WMI) est une norme d'entreprise pour l'accès aux informations de gestion sur les appareils. En termes simples, WMI permet aux administrateurs d'effectuer des tâches de gestion standard que les attaquants peuvent utiliser pour se déplacer latéralement de différentes manières.

Connexion à WMI depuis Powershell 🔌💻

Créer un objet PSCredential avec le nom d'utilisateur et le mot de passe admin. Cet objet sera stocké dans la variable $credential et utilisé tout au long des techniques de cette tâche.

Nous pouvons ensuite établir une session WMI en utilisant l'un des protocoles suivants :

  • DCOM : RPC sur IP sera utilisé pour se connecter à WMI. Ce protocole utilise le port 135/TCP et les ports 49152-65535/TCP.

  • Wsman : WinRM sera utilisé pour se connecter à WMI. Ce protocole utilise les ports 5985/TCP (WinRM HTTP) ou 5986/TCP (WinRM HTTPS).

Pour établir une session WMI à partir de Powershell, nous pouvons utiliser les commandes suivantes et stocker la session dans la variable $Session, que nous utiliserons tout au long de la pièce sur les différentes techniques.

💻Création de processus à distance avec WMI

Nous pouvons créer à distance un processus à partir de Powershell en utilisant Windows Management Instrumentation (WMI), en envoyant une demande WMI à la classe Win32_Process pour créer le processus sous la session que nous avons créée précédemment.

Notez que WMI ne vous permettra pas de voir la sortie d'une commande mais créera le processus requis silencieusement.

Sur les systèmes hérités, la même chose peut être faite en utilisant wmic à partir de l'invite de commande. Lancer la culculette est un preuve de concept, ont peut lancer un shell en cas réel.

🔧 Création de services à distance avec WMI

Nous pouvons créer des services avec WMI à travers Powershell. Pour créer un service appelé THMService2, nous pouvons utiliser la commande suivante.

Ensuite, nous pouvons obtenir une poignée sur le service et le démarrer avec les commandes suivantes.

Enfin, nous pouvons arrêter et supprimer le service avec les commandes suivantes.

⏰ Création de tâches planifiées à distance avec WMI

Nous pouvons créer et exécuter des tâches planifiées en utilisant certaines cmdlets disponibles dans les installations Windows par défaut.

Pour supprimer la tâche planifiée après son utilisation, nous pouvons utiliser la commande suivante.

📦 Installation de packages MSI via WMI

MSI est un format de fichier utilisé pour les programmes d'installation. Si nous pouvons copier un package MSI sur le système cible, nous pouvons alors utiliser WMI pour tenter de l'installer pour nous.

Nous pouvons atteindre le même objectif en utilisant wmic sur les systèmes hérités.

Exemple :

Création de la charge utile (payload) sur AttackBox

Copie de la charge utile (payload) sur le serveur via SMB

Comme nous avons copié notre charge utile (payload) sur le partage ADMIN$, elle sera disponible à l'emplacement C:\Windows\ sur le serveur.

Mouvement latéral :

Nous allons maintenant utiliser WMI pour déclencher la charge utile (payload) sur le serveur et obtenir un shell.

Démarrage du handler sur AttackBox

Démarrage d'une session WMI sur le serveur via Powershell

Déclenchement de la charge utile (payload) via WMI

Cela devrait déclencher la charge utile (payload) et vous donner un shell sur le serveur.

🖱️ Pass The Hash avec Mimitkaz

🕹️ NTLM

Voir ma doc sur NTLM afaire

Pass-the-Hash (PtH) est une technique utilisée pour se connecter à un système Windows en utilisant le hachage NTLM du mot de passe plutôt que le mot de passe en clair. Cette technique est possible car le protocole d'authentification NTLM utilise le hachage du mot de passe pour vérifier l'identité de l'utilisateur.

📋 Élévation de privilège

📋 Extraction de hachages NTLM à partir du SAM local

circle-exclamation

Ouvrez une invite de commandes Powershell avec des privilèges administratifs sur la machine cible et tapez les commandes suivantes :

📋 Extraction de hachages NTLM à partir de la mémoire LSASS

circle-exclamation

Cherchez la section "NTLM" dans les résultats pour trouver les hachages NTLM des utilisateurs.

📋 Attaque PTH

My User est l'utilisateur sur lequuel nous voulons pivoté :

Réception du shell inversé :

Ouvrir un cmd avec WinRm

Pass-the-Hash de Kali exemple :


🕹️ Kerberos

📝 Ticket Dump Kerberos (extraction des TGT)

Donner privilège :

Exporter tous les tickets Kerberos :

Mimikatz exportera tous les tickets Kerberos dans le répertoire actuel avec une extension .kirbi.

📝 Pass-the-Ticket

Une fois que vous avez obtenu un billet TGT valide, vous pouvez utiliser Mimikatz pour injecter le billet TGT dans votre propre session de sécurité et vous faire passer pour l'utilisateur cible.

Injecter le billet TGT dans votre session de sécurité :

Assurez-vous de remplacer [0;ca99f8]-2-0-40e10000-admin@krbtgt-DOMAIN.COM.kirbi par le nom de fichier du billet TGT que vous avez obtenu.

Vérifier l'injection de ticket Kerberos :

📝 Obtenir un shell WinRM :

Avec winrs.exe :

Avec Impacket :

Exporter le ticket Kerberos dans un fichier de cache de ticket Kerberos :

Cela va créer un fichier de cache de ticket Kerberos dans le répertoire actuel.

Obtenir un shell WinRM :

Assurez-vous de remplacer DC_IP par l'adresse IP du contrôleur de domaine et TARGET_IP par l'adresse IP de l'ordinateur cible.

📝 Interagir avec le bureau à distance avec xfreerdp

Exporter le ticket Kerberos dans un fichier de cache de ticket Kerberos :

Cela va créer un fichier de cache de ticket Kerberos dans le répertoire actuel.

Se connecter au bureau à distance :

Assurez-vous de remplacer TARGET_IP par l'adresse IP de l'ordinateur cible.

📝 Kerberos Encryption Keys

Dumper les clés de chiffrement Kerberos :

📝 Pass-the-Key

Démarrer un serveur Netcat en attente sur le port 443 :

Si vous avez le hachage RC4 :

Si vous avez le hachage AES128 :

Si vous avez le hachage AES256 :

📝 Pass-the-Key from Kali

Demander un TGT à l'aide de la clé AES-256 :

Créer une variable d'environnement pour Impacket :

Obtenir un shell :

💡 Connexion avec un hash sur Linux

RDP :

psexec :

Notez que seule la version Linux de psexec prend en charge PtH.

WinRM :


📂 secretsdump.py : Extraction des hash du domaine

💡 Connexion RDP laissé ouverte par un admin

Lorsqu'un administrateur utilise le Bureau à distance pour se connecter à une machine et ferme le RDP client au lieu de se déconnecter, sa session restera ouverte indéfiniment sur le serveur.

Ouvrez une invite de commande. Élever à NT AUTHORITY\SYSTEM en utilisant psexec .

lister les sessions existantes :

exemple de sortie :

Dans cet exemple, nous pouvons voir que l'utilisateur "admin" est connecté à la session RDP nommée "rdp-tcp#6" avec l'ID de session "2".

Connectez-vous à la session RDP laissée ouverte en utilisant la commande "tscon".

"3" est l'ID de la session console de "luke" sur lequel nous sommes actuellement connectés.

"rdp-tcp#6" est le nom de la session RDP que nous voulons nous connecter

Last updated