* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
C'est une **alternative** open source à Microsoft Windows **Active Directory**, principalement utilisée comme solution de gestion intégrée pour les environnements **Unix**. Semblable à Active Directory, FreeIPA implémente une infrastructure complète d'**annuaire LDAP** soutenue par un MIT **Kerberos** Key Distribution Center. Il utilise le **Certificate System** Dogtag pour la gestion des certificats CA & RA, lui donnant la capacité de gérer l'authentification **multi-facteurs**, y compris les cartes à puce. SSSD est utilisé pour intégrer FreeIPA dans le processus d'authentification Unix standard.
* **`/etc/krb5.conf` :** Le fichier `krb5.conf` contient les informations du client Kerberos nécessaires pour être **inscrit dans le domaine**. Cela inclut les **emplacements des KDCs et des serveurs admin** pour les royaumes Kerberos d'intérêt, les valeurs par défaut pour le royaume actuel et pour les applications Kerberos, et les mappages des noms d'hôtes sur les royaumes Kerberos.
* **`/etc/ipa/default.conf` :** C'est le **fichier de configuration par défaut pour les serveurs IPA**, il est utilisé pour définir les valeurs par défaut du système à appliquer lors de l'exécution des clients et serveurs IPA.
* **`/etc/krb5.keytab` :** Le fichier `krb5.keytab` est **requis** sur tous les hôtes à l'intérieur du **domaine**. Il est nécessaire dans le cadre du processus d'**authentification** au KDC.
* **`KRB5CCNAME` :** Si défini, cette variable indique l'**emplacement du Ticket CCACHE** à utiliser pour l'authentification.
* **`KRB5_KTNAME` :** Si défini, cette variable indique l'**emplacement** du fichier **Keytab** à utiliser pour l'authentification.
* **`KRB5_CONFIG` :** Si défini, cette variable indique l'**emplacement** du fichier de **configuration Kerberos**.
* **`KRB5_KDC_PROFILE` :** Si défini, cette variable indique l'**emplacement du fichier de configuration KDC**, qui contient des directives de configuration supplémentaires pour le démon du Key Distribution Center.
* **`KRB5RCACHETYPE` :** Cette variable spécifie le **type de cache de relecture par défaut** à utiliser pour les serveurs.
* **`KRB5RCACHEDIR` :** Cette variable spécifie le **répertoire par défaut pour les caches de relecture** utilisés par les serveurs.
* **`KRB5_TRACE` :** Cette variable spécifie un **nom de fichier pour écrire la sortie du journal de trace**. Les journaux de trace peuvent aider à éclairer les décisions prises en interne par les bibliothèques Kerberos.
* **`KRB5_CLIENT_KTNAME` :** Cette variable définit le nom de fichier **keytab client par défaut**.
* **ipa :** Ce binaire est la norme pour **gérer un domaine FreeIPA**. Il peut être utilisé pour gérer des hôtes, des utilisateurs, des règles sudo, et bien plus encore.
* **kdestroy :** Le binaire kdestroy est utilisé pour **détruire** tout **ticket Kerberos** actuel dans la session de l'utilisateur.
* **kinit :** Le binaire kinit est utilisé pour **établir**, ou **renouveler** des **tickets Kerberos**.
* **klist :** Le binaire klist **liste** tout **ticket Kerberos en cours d'utilisation**, et quels principaux les tickets donnent accès.
* **kpasswd :** La commande kpasswd est utilisée pour **changer le mot de passe d'un principal Kerberos**. kpasswd demande d'abord le mot de passe Kerberos actuel, puis invite l'utilisateur deux fois pour le nouveau mot de passe, et le mot de passe est changé.
* **ksu :** Ksu peut être utilisé comme une **alternative au binaire su**, pour changer le **contexte utilisateur actuel**.
* **kswitch :** La commande kswitch va **changer** le **cache d'identification en cours d'utilisation**.
* **kvno :** Le binaire kvno acquiert un **ticket de service** pour les **principaux Kerberos spécifiés** et imprime les numéros de version des clés de chacun.
Puisque FreeIPA utilise **Kerberos pour l'authentification**, ce processus est très similaire à l'**authentification** dans **Active Directory**. Pour **accéder** aux ressources sur le domaine, un utilisateur doit avoir un **ticket Kerberos valide** pour cette ressource. Ces tickets peuvent être stockés dans différents emplacements en fonction de la configuration du domaine FreeIPA.
Lorsque les tickets sont configurés pour être **stockés** sous forme de **fichier** sur **disque**, le format et le type standard est un fichier **CCACHE**. Il s'agit d'un format de fichier binaire simple pour stocker les informations d'identification Kerberos. Ces fichiers sont généralement stockés dans **`/tmp`** et ont des permissions **600**. Du point de vue d'un attaquant, cela est important pour les raisons suivantes :
1. Les tickets valides peuvent être **utilisés pour s'authentifier**, **sans** avoir besoin du **mot de passe en clair** de l'utilisateur respectif.
2. Les tickets **CCACHE** sont très **portables**. Ils peuvent être téléchargés et chargés sur un autre hôte sans avoir besoin de renouveler ou de valider le ticket.
Pour un attaquant, réutiliser un Ticket CCACHE est très facile. Pour **réutiliser** un Ticket CCACHE valide, **exportez****KRB5CCNAME** vers le **chemin** du fichier de ticket valide. Le système devrait reconnaître la variable d'environnement et tentera d'utiliser ce matériel d'identification lors de l'interaction avec le domaine.
Les tickets CCACHE peuvent également être **stockés** dans le **trousseau de clés** Linux. Le trousseau de clés réside dans le **noyau**, et donne aux administrateurs **plus de contrôle sur la récupération et l'utilisation des tickets stockés**. Les tickets peuvent être délimités de différentes manières :
Selon la manière dont l'administrateur a délimité le ticket stocké dans le trousseau de clés Unix, l'extraction peut être difficile. Cependant, la **portée par défaut** pour les tickets CCACHE dans le trousseau de clés Unix est **`KEYRING:persistent:uidnumber`**. Heureusement, si vous êtes dans le **contexte** de l'**utilisateur**, `klist` peut **analyser** cette information pour nous.
En tant qu'attaquant, **réutiliser un ticket CCACHE** stocké dans le trousseau de clés Unix est assez **difficile** selon la portée du ticket. Heureusement, [@Zer1t0](https://github.com/Zer1t0) de [@Tarlogic](https://twitter.com/Tarlogic) a développé un outil qui peut extraire les tickets Kerberos du trousseau de clés Unix. L'outil s'appelle **Tickey** et peut être trouvé [**ici**](https://github.com/TarlogicSecurity/tickey).
habituellement, chaque hôte est déployé avec des informations d'identification keytab pour cet hôte qui peuvent être utilisées pour obtenir un Ticket Granting Ticket (TGT) CCACHE valide pour l'hôte lui-même.
Il se compose de paires de **principaux Kerberos et de clés chiffrées** qui sont dérivées du mot de passe Kerberos associé au principal. Étant donné que ces clés sont dérivées du mot de passe du principal, si ce **mot de passe change, le fichier keytab sera invalidé**.
Les fichiers keytab peuvent être utilisés pour **obtenir un ticket granting ticket** (TGT) valide pour le principal auquel il est délimité. Ce processus d'authentification **ne nécessite pas le mot de passe**, car il contient des clés dérivées du mot de passe.
Analyser un fichier keytab est très facile et peut être accompli de plusieurs manières. La manière la plus simple d'**analyser** un fichier **keytab** est avec **klist**. La deuxième méthode utilise un excellent utilitaire python que [Cody Thomas](https://medium.com/u/645ffcef8682?source=post\_page-----77e73d837d6a--------------------------------) a créé. Son projet [**KeytabParser**](https://github.com/its-a-feature/KeytabParser) **analysera** le principal et ses clés chiffrées pertinentes.
Les attaquants peuvent **réutiliser les informations d'identification stockées dans les fichiers keytab en générant un ticket CCACHE** via le binaire kinit.
Vous pouvez effectuer l'**énumération** via **ldap** et d'autres outils **binaires**, ou en **vous connectant à la page web sur le port 443 du serveur FreeIPA**.
Il est possible de créer des **hôtes**, **utilisateurs** et **groupes**. Les hôtes et les utilisateurs sont triés dans des conteneurs appelés respectivement “**Groupes d'Hôtes**” et “**Groupes d'Utilisateurs**”. Ceux-ci sont similaires aux **Unités Organisationnelles** (OU).
Par défaut dans FreeIPA, le serveur LDAP permet des **liaisons anonymes**, et une grande quantité de données est énumérable de manière **non authentifiée**. Ceci peut énumérer toutes les données disponibles sans authentification :
Pour obtenir **plus d'informations**, vous devez utiliser une session **authentifiée** (consultez la section Authentication pour apprendre à préparer une session authentifiée).
* Le hash de mot de passe d'un utilisateur est stocké en **base64** dans l'**attribut** "**userPassword**". Ce hash pourrait être **SSHA512** (anciennes versions de FreeIPA) ou **PBKDF2\_SHA256**.
* Le **Nthash** du mot de passe est stocké en **base64** dans "**ipaNTHash**" si le système a une **intégration** avec **AD**.
• Si freeIPA est intégré avec AD, **ipaNTHash** est facile à craquer : Vous devez **décoder****base64** -> le réencoder en hex **ASCII** -> John The Ripper ou **hashcat** peuvent vous aider à le craquer rapidement
• Si une ancienne version de FreeIPA est utilisée, donc **SSHA512** est utilisé : Vous devez décoder **base64** -> trouver le hash **SSHA512** -> John The Ripper ou **hashcat** peuvent vous aider à le craquer
• Si une nouvelle version de FreeIPA est utilisée, donc **PBKDF2\_SHA256** est utilisé : Vous devez décoder **base64** -> trouver PBKDF2\_SHA256 -> sa **longueur** est de 256 octets. John peut travailler avec 256 bits (32 octets) -> SHA-256 utilisé comme fonction pseudo-aléatoire, la taille du bloc est de 32 octets -> vous pouvez utiliser seulement les premiers 256 bits de notre hash PBKDF2\_SHA256 -> John The Ripper ou hashcat peuvent vous aider à le craquer
Ce sont les règles qui accordent des permissions spécifiques aux utilisateurs ou aux hôtes sur des ressources (hôtes, services, groupes de services...).
FreeIPA offre la possibilité de **gérer les permissions sudo** à partir d'une source **centralisée** grâce aux règles sudo. Ces ensembles de règles peuvent être utilisés pour restreindre ou déléguer la capacité d'**exécuter des commandes en tant que sudo** sur les hôtes inscrits dans le domaine. En tant qu'attaquant, nous pouvons énumérer quels hôtes et utilisateurs ces ensembles de règles sont appliqués, et quelles commandes sont autorisées à travers l'ensemble de règles.
Chaque **rôle** contient un ensemble de **privilèges**, et ces privilèges respectifs contiennent un **ensemble** de **permissions**. Les rôles peuvent être **appliqués aux Utilisateurs**, aux **Groupes** d'Utilisateurs, aux **Hôtes**, aux Groupes d'Hôtes et aux Services. Pour illustrer ce concept, discutons du rôle par défaut "Administrateur d'Utilisateur" dans FreeIPA.
Comme nous pouvons le voir, le rôle "**Administrateur d'Utilisateur**" contient **beaucoup de permissions** au sein de l'environnement. Comprendre le concept général et la structure des **rôles**, **privilèges** et **permissions** peut être crucial pour identifier les chemins d'attaque à travers un environnement.
Dans [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e), vous pouvez trouver un exemple simple de comment abuser de certaines permissions pour compromettre le domaine.
Si vous pouvez **créer un nouvel utilisateur avec le nom `root`**, vous pouvez vous faire passer pour lui et vous serez capable de **vous connecter en SSH sur n'importe quelle machine en tant que root.**
Avec ce privilège vient beaucoup de différents pouvoirs pour affecter les utilisateurs à l'intérieur de l'environnement. En utilisant ce privilège, nous pouvons **créer un nouvel utilisateur dans le domaine FreeIPA nommé \_root**\_.
Comme montré, cela **connecte l'utilisateur au compte root local** ! Donc, simplement en créant un utilisateur de domaine pour un utilisateur local, nous avons pu nous authentifier en utilisant le compte _root@WESTEROS.LOCAL_ et obtenir le **contexte utilisateur du compte root local**_._
_Pour plus de détails sur cette vulnérabilité, consultez_ [_https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b_](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)\
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou vous voulez avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).