# Pentesting di FreeIPA
Impara l'hacking di AWS da zero a eroe conhtARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
## Informazioni di Base
FreeIPA è un'alternativa open-source all'Active Directory di Microsoft Windows, principalmente per ambienti Unix. Combina un completo **directory LDAP** con un Centro di Distribuzione Chiavi MIT **Kerberos** per la gestione simile all'Active Directory. Utilizzando il Sistema di Certificati Dogtag per la gestione dei certificati CA & RA, supporta l'autenticazione **multi-fattore**, inclusi i smartcard. SSSD è integrato per i processi di autenticazione Unix.
## Impronte Digitali
### File e Variabili d'Ambiente
* Il file in `/etc/krb5.conf` è dove sono memorizzate le informazioni del client Kerberos, necessarie per l'iscrizione al dominio. Questo include le posizioni dei KDC e dei server di amministrazione, le impostazioni predefinite e le mappature.
* Le impostazioni predefinite a livello di sistema per i client e i server IPA sono impostate nel file situato in `/etc/ipa/default.conf`.
* Gli host all'interno del dominio devono avere un file `krb5.keytab` in `/etc/krb5.keytab` per i processi di autenticazione.
* Diverse variabili d'ambiente (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) sono utilizzate per puntare a file specifici e impostazioni rilevanti per l'autenticazione Kerberos.
### Eseguibili
Strumenti come `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` e `kvno` sono centrali nella gestione dei domini FreeIPA, nel trattare i biglietti Kerberos, nel cambiare le password e nell'ottenere i biglietti di servizio, tra le altre funzionalità.
### Rete
Viene fornita un'illustrazione per rappresentare una tipica configurazione del server FreeIPA.
## Autenticazione
L'autenticazione in FreeIPA, sfruttando **Kerberos**, riflette quella in **Active Directory**. L'accesso alle risorse del dominio richiede un biglietto Kerberos valido, che può essere memorizzato in varie posizioni a seconda della configurazione del dominio FreeIPA.
### **File Biglietti CCACHE**
I file CCACHE, memorizzati tipicamente in **`/tmp`** con permessi **600**, sono formati binari per memorizzare le credenziali Kerberos, importanti per l'autenticazione senza la password in chiaro dell'utente a causa della loro portabilità. Il parsing di un biglietto CCACHE può essere fatto utilizzando il comando `klist`, e riutilizzare un biglietto CCACHE valido coinvolge l'esportazione di `KRB5CCNAME` nel percorso del file del biglietto.
### **Portachiavi Unix**
Alternativamente, i Biglietti CCACHE possono essere memorizzati nel portachiavi Linux, offrendo maggiore controllo sulla gestione dei biglietti. La portata della memorizzazione dei biglietti varia (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), con `klist` in grado di analizzare queste informazioni per l'utente. Tuttavia, riutilizzare un Biglietto CCACHE dal portachiavi Unix può presentare sfide, con strumenti come **Tickey** disponibili per estrarre i biglietti Kerberos.
### Keytab
I file Keytab, contenenti principali Kerberos e chiavi crittografate, sono fondamentali per ottenere biglietti di concessione di ticket (TGT) validi senza necessità della password del principale. Analizzare e riutilizzare le credenziali dai file Keytab può essere facilmente eseguito con utility come `klist` e script come **KeytabParser**.
### Cheatsheet
Puoi trovare ulteriori informazioni su come utilizzare i biglietti in Linux nel seguente link:
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## Enumerazione
{% hint style="warning" %}
Potresti eseguire l'**enumerazione** tramite **ldap** e altri **strumenti binari**, o **connettendoti alla pagina web sulla porta 443 del server FreeIPA**.
{% endhint %}
### Host, Utenti e Gruppi
È possibile creare **host**, **utenti** e **gruppi**. Gli host e gli utenti sono ordinati in contenitori chiamati "**Gruppi Host**" e "**Gruppi Utenti**" rispettivamente. Questi sono simili alle **Unità Organizzative** (OU).
Per impostazione predefinita in FreeIPA, il server LDAP consente **bind anonimi**, e una vasta gamma di dati è enumerabile **non autenticati**. Questo può enumerare tutti i dati disponibili non autenticati:
```
ldapsearch -x
```
Per ottenere **ulteriori informazioni** è necessario utilizzare una sessione **autenticata** (controlla la sezione sull'Autenticazione per imparare come preparare una sessione autenticata).
```bash
# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"
# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
```
Da una macchina connessa a dominio sarai in grado di utilizzare **binari installati** per enumerare il dominio:
```bash
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find
-------------------
ipa user-show --all
ipa usergroup-show --all
ipa host-find --all
ipa hostgroup-show --all
```
{% hint style="info" %}
L'utente **admin** di **FreeIPA** è l'equivalente degli **amministratori di dominio** di **AD**.
{% endhint %}
### Hash
L'utente **root** del **server IPA** ha accesso ai **hash** delle password.
* L'hash della password di un utente è memorizzato come **base64** nell'**attributo** "userPassword". Questo hash potrebbe essere **SSHA512** (versioni precedenti di FreeIPA) o **PBKDF2\_SHA256**.
* L'**Nthash** della password è memorizzato come **base64** in "ipaNTHash" se il sistema è integrato con **AD**.
Per craccare questi hash:
• Se FreeIPA è integrato con AD, l'**ipaNTHash** è facile da craccare: Dovresti **decodificare** il **base64** -> ricodificarlo come esadecimale **ASCII** -> John The Ripper o **hashcat** possono aiutarti a craccarlo velocemente
• Se viene utilizzata una vecchia versione di FreeIPA, quindi viene utilizzato **SSHA512**: Dovresti decodificare il **base64** -> trovare l'hash SSHA512 -> John The Ripper o **hashcat** possono aiutarti a craccarlo
• Se viene utilizzata una nuova versione di FreeIPA, quindi viene utilizzato **PBKDF2\_SHA256**: Dovresti decodificare il **base64** -> trovare PBKDF2\_SHA256 -> la sua **lunghezza** è di 256 byte. John può lavorare con 256 bit (32 byte) -> SHA-265 utilizzato come funzione pseudo-casuale, la dimensione del blocco è di 32 byte -> puoi utilizzare solo i primi 256 bit del nostro hash PBKDF2\_SHA256 -> John The Ripper o hashcat possono aiutarti a craccarlo
Per estrarre gli hash è necessario essere **root nel server FreeIPA**, lì puoi utilizzare lo strumento **`dbscan`** per estrarli:
### Regole HBAC
Queste sono le regole che concedono specifici permessi agli utenti o host su risorse (host, servizi, gruppi di servizi...)
```bash
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show --all
```
#### Regole Sudo
FreeIPA consente il controllo centralizzato delle **autorizzazioni sudo** tramite le regole sudo. Queste regole permettono o limitano l'esecuzione di comandi con sudo sugli host all'interno del dominio. Un attaccante potrebbe potenzialmente identificare gli host, gli utenti e i comandi consentiti esaminando questi set di regole.
```bash
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show --all
```
### Controllo degli Accessi Basato sui Ruoli
Un **ruolo** è composto da vari **privilegi**, ognuno dei quali comprende una serie di **autorizzazioni**. Questi ruoli possono essere assegnati a Utenti, **Gruppi** di Utenti, **Host**, Gruppi di Host e Servizi. Ad esempio, considera il ruolo predefinito di "Amministratore Utente" in FreeIPA per esemplificare questa struttura.
Il ruolo `Amministratore Utente` ha i seguenti privilegi:
- **Amministratori Utente**
- **Amministratori Gruppo**
- **Amministratori Utente di Stage**
Con i seguenti comandi è possibile enumerare i ruoli, i privilegi e le autorizzazioni:
```bash
# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show --all
ipa privilege-find
ipa privilege-show --all
ipa permission-find
ipa permission-show --all
```
### Esempio di Scenario di Attacco
In [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) puoi trovare un semplice esempio di come abusare di alcuni permessi per compromettere il dominio.
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Privesc
### ~~Creazione utente root~~
{% hint style="warning" %}
Se riesci a **creare un nuovo utente con il nome `root`**, puoi impersonarlo e sarai in grado di **accedere via SSH a qualsiasi macchina come root.**
**QUESTO È STATO CORRETTO.**
{% endhint %}
Puoi trovare una spiegazione dettagliata in [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
## Riferimenti
* [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
* [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a)
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
Impara l'hacking AWS da zero a esperto conhtARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.