mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
187 lines
9.8 KiB
Markdown
187 lines
9.8 KiB
Markdown
# FreeIPA Pentesting
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
## Osnovne Informacije
|
|
|
|
FreeIPA je open-source **alternativa** za Microsoft Windows **Active Directory**, prvenstveno za **Unix** okruženja. Kombinuje kompletnu **LDAP direktoriju** sa MIT **Kerberos** sistemom za distribuciju ključeva za upravljanje sličnim Active Directory. Koristeći Dogtag **Sistem Sertifikata** za upravljanje CA i RA sertifikatima, podržava **multi-factor** autentifikaciju, uključujući pametne kartice. SSSD je integrisan za Unix procese autentifikacije.
|
|
|
|
## Otisci
|
|
|
|
### Datoteke i Varijable Okruženja
|
|
|
|
- Datoteka na `/etc/krb5.conf` je mesto gde se čuvaju informacije o Kerberos klijentu, neophodne za upis u domen. Ovo uključuje lokacije KDC-a i admin servera, podrazumevane postavke i mape.
|
|
- Podrazumevane postavke za IPA klijente i servere su postavljene u datoteci koja se nalazi na `/etc/ipa/default.conf`.
|
|
- Hostovi unutar domena moraju imati `krb5.keytab` datoteku na `/etc/krb5.keytab` za procese autentifikacije.
|
|
- Različite varijable okruženja (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) se koriste za upućivanje na specifične datoteke i postavke relevantne za Kerberos autentifikaciju.
|
|
|
|
### Binarni
|
|
|
|
Alati kao što su `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, i `kvno` su centralni za upravljanje FreeIPA domenima, rukovanje Kerberos tiketima, menjanje lozinki i sticanje servisnih tiketa, među ostalim funkcionalnostima.
|
|
|
|
### Mreža
|
|
|
|
Prikazana je ilustracija koja prikazuje tipičnu FreeIPA server konfiguraciju.
|
|
|
|
## Autentifikacija
|
|
|
|
Autentifikacija u FreeIPA, koristeći **Kerberos**, odražava onu u **Active Directory**. Pristup resursima domena zahteva važeći Kerberos tiket, koji može biti smešten na različitim mestima u zavisnosti od konfiguracije FreeIPA domena.
|
|
|
|
### **CCACHE Ticket Datoteke**
|
|
|
|
CCACHE datoteke, obično smeštene u **`/tmp`** sa **600** dozvolama, su binarni formati za čuvanje Kerberos kredencijala, važni za autentifikaciju bez korisničke lozinke u običnom tekstu zbog njihove prenosivosti. Parsiranje CCACHE tiketa može se izvršiti korišćenjem `klist` komande, a ponovna upotreba važećeg CCACHE Tiketa uključuje izvoz `KRB5CCNAME` na putanju datoteke tiketa.
|
|
|
|
### **Unix Keyring**
|
|
|
|
Alternativno, CCACHE Tiketi mogu biti smešteni u Linux keyring, nudeći veću kontrolu nad upravljanjem tiketima. Opseg skladištenja tiketa varira (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), pri čemu `klist` može parsirati ove informacije za korisnika. Međutim, ponovna upotreba CCACHE Tiketa iz Unix keyring-a može predstavljati izazove, a alati poput **Tickey** su dostupni za ekstrakciju Kerberos tiketa.
|
|
|
|
### Keytab
|
|
|
|
Keytab datoteke, koje sadrže Kerberos principe i enkriptovane ključeve, su ključne za dobijanje važećih tiketa za dodelu tiketa (TGT) bez potrebe za lozinkom principa. Parsiranje i ponovna upotreba kredencijala iz keytab datoteka može se lako izvršiti pomoću alata kao što su `klist` i skripti kao što je **KeytabParser**.
|
|
|
|
### Cheatsheet
|
|
|
|
Možete pronaći više informacija o tome kako koristiti tikete u linuxu na sledećem linku:
|
|
|
|
{{#ref}}
|
|
privilege-escalation/linux-active-directory.md
|
|
{{#endref}}
|
|
|
|
## Enumeracija
|
|
|
|
> [!WARNING]
|
|
> Možete izvršiti **enumeraciju** putem **ldap** i drugih **binarnih** alata, ili **povezivanjem na veb stranicu na portu 443 FreeIPA servera**.
|
|
|
|
### Hostovi, Korisnici i Grupe <a href="#id-4b3b" id="id-4b3b"></a>
|
|
|
|
Moguće je kreirati **hostove**, **korisnike** i **grupe**. Hostovi i korisnici su raspoređeni u kontejnere nazvane “**Host Grupe**” i “**Korisničke Grupe**” respektivno. Ove su slične **Organizacionim Jedinicama** (OU).
|
|
|
|
Podrazumevano u FreeIPA, LDAP server omogućava **anonimne veze**, i veliki deo podataka je enumerabilan **neautentifikovano**. Ovo može enumerisati sve dostupne podatke neautentifikovano:
|
|
```
|
|
ldapsearch -x
|
|
```
|
|
Da biste dobili **više informacija**, potrebno je da koristite **autentifikovanu** sesiju (proverite odeljak o autentifikaciji da biste saznali kako da pripremite autentifikovanu sesiju).
|
|
```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"
|
|
```
|
|
Sa mašine pridružene domenu moći ćete da koristite **instalirane binarne datoteke** za enumeraciju domena:
|
|
```bash
|
|
ipa user-find
|
|
ipa usergroup-find
|
|
ipa host-find
|
|
ipa host-group-find
|
|
|
|
-------------------
|
|
|
|
ipa user-show <username> --all
|
|
ipa usergroup-show <user group> --all
|
|
ipa host-find <host> --all
|
|
ipa hostgroup-show <host group> --all
|
|
```
|
|
> [!NOTE]
|
|
> Korisnik **admin** u **FreeIPA** je ekvivalentan **domain admins** iz **AD**.
|
|
|
|
### Hashes <a href="#id-482b" id="id-482b"></a>
|
|
|
|
Korisnik **root** sa **IPA servera** ima pristup lozinkama **hash**.
|
|
|
|
- Hash lozinke korisnika se čuva kao **base64** u atributu “**userPassword**”. Ovaj hash može biti **SSHA512** (stare verzije FreeIPA) ili **PBKDF2_SHA256**.
|
|
- **Nthash** lozinke se čuva kao **base64** u “**ipaNTHash**” ako sistem ima **integraciju** sa **AD**.
|
|
|
|
Da biste probili ove hash:
|
|
|
|
• Ako je freeIPA integrisan sa AD, **ipaNTHash** je lako probiti: Trebalo bi da **dekodirate** **base64** -> ponovo kodirate kao **ASCII** hex -> John The Ripper ili **hashcat** vam mogu pomoći da to brzo probijete
|
|
|
|
• Ako se koristi stara verzija FreeIPA, onda se koristi **SSHA512**: Trebalo bi da dekodirate **base64** -> pronađete SSHA512 **hash** -> John The Ripper ili **hashcat** vam mogu pomoći da to probijete
|
|
|
|
• Ako se koristi nova verzija FreeIPA, onda se koristi **PBKDF2_SHA256**: Trebalo bi da dekodirate **base64** -> pronađete PBKDF2_SHA256 -> njegova **dužina** je 256 bajta. John može raditi sa 256 bita (32 bajta) -> SHA-265 se koristi kao pseudo-random funkcija, veličina bloka je 32 bajta -> možete koristiti samo prvih 256 bita našeg PBKDF2_SHA256 hasha -> John The Ripper ili hashcat vam mogu pomoći da to probijete
|
|
|
|
<figure><img src="../images/image (655).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Da biste izvukli hash, morate biti **root na FreeIPA serveru**, tamo možete koristiti alat **`dbscan`** da ih izvučete:
|
|
|
|
<figure><img src="../images/image (293).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
|
|
|
Postoje pravila koja dodeljuju specifične dozvole korisnicima ili hostovima nad resursima (hostovi, usluge, grupe usluga...)
|
|
```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 <hbacrule> --all
|
|
```
|
|
#### Sudo-Rules
|
|
|
|
FreeIPA omogućava centralizovanu kontrolu nad **sudo permissions** putem sudo pravila. Ova pravila omogućavaju ili ograničavaju izvršavanje komandi sa sudo na hostovima unutar domena. Napadač bi potencijalno mogao da identifikuje primenljive hostove, korisnike i dozvoljene komande ispitujući ove skupove pravila.
|
|
```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 <sudorule> --all
|
|
```
|
|
### Kontrola pristupa zasnovana na ulozi
|
|
|
|
**Uloga** se sastoji od različitih **privilegija**, od kojih svaka obuhvata skup **dozvola**. Ove uloge mogu biti dodeljene korisnicima, grupama korisnika, **hostovima**, grupama hostova i uslugama. Na primer, uzmite u obzir podrazumevanu ulogu “Administrator korisnika” u FreeIPA kao primer ove strukture.
|
|
|
|
Uloga `Administrator korisnika` ima ove privilegije:
|
|
|
|
- **Administratori korisnika**
|
|
- **Administratori grupa**
|
|
- **Administratori korisnika na sceni**
|
|
|
|
Sa sledećim komandama moguće je enumerisati uloge, privilegije i dozvole:
|
|
```bash
|
|
# Using ldap
|
|
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
|
|
# Using ipa binary
|
|
ipa role-find
|
|
ipa role-show <role> --all
|
|
ipa privilege-find
|
|
ipa privilege-show <privilege> --all
|
|
ipa permission-find
|
|
ipa permission-show <permission> --all
|
|
```
|
|
### Primer napada
|
|
|
|
U [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) možete pronaći jednostavan primer kako da zloupotrebite neka prava da biste kompromitovali domen.
|
|
|
|
### 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
|
|
|
|
### ~~kreiranje root korisnika~~
|
|
|
|
> [!WARNING]
|
|
> Ako možete **da kreirate novog korisnika sa imenom `root`**, možete se pretvarati da ste on i moći ćete da **SSH-ujete na bilo koju mašinu kao root.**
|
|
>
|
|
> **OVO JE ISPRAVLJENO.**
|
|
|
|
Možete proveriti detaljno objašnjenje u [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
|
|
|
|
## Reference
|
|
|
|
- [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)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|