# Testowanie penetracyjne FreeIPA
Naucz się hakować AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów GitHub**.
## Podstawowe informacje
FreeIPA to otwarte oprogramowanie **alternatywne** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unixowych**. Łączy ono kompletny **katalog LDAP** z MIT **Kerberos** Key Distribution Center do zarządzania podobnego do Active Directory. Wykorzystuje Dogtag **Certificate System** do zarządzania certyfikatami CA i RA, obsługuje **uwierzytelnianie wieloczynnikowe**, w tym karty inteligentne. SSSD jest zintegrowane do procesów uwierzytelniania Unix.
## Odciski palców
### Pliki i zmienne środowiskowe
- Plik **`/etc/krb5.conf`** przechowuje informacje klienta Kerberos, niezbędne do zapisania w domenie. Zawiera on lokalizacje KDC i serwerów administracyjnych, domyślne ustawienia i mapowania.
- Domyślne ustawienia dla klientów i serwerów IPA są ustawiane w pliku **`/etc/ipa/default.conf`**.
- Hosty w domenie muszą mieć plik **`krb5.keytab`** w **`/etc/krb5.keytab`** do procesów uwierzytelniania.
- Różne zmienne środowiskowe (**`KRB5CCNAME`**, **`KRB5_KTNAME`**, **`KRB5_CONFIG`**, **`KRB5_KDC_PROFILE`**, **`KRB5RCACHETYPE`**, **`KRB5RCACHEDIR`**, **`KRB5_TRACE`**, **`KRB5_CLIENT_KTNAME`**, **`KPROP_PORT`**) są używane do wskazywania konkretnych plików i ustawień związanych z uwierzytelnianiem Kerberos.
### Binaria
Narzędzia takie jak **`ipa`**, **`kdestroy`**, **`kinit`**, **`klist`**, **`kpasswd`**, **`ksu`**, **`kswitch`** i **`kvno`** są kluczowe do zarządzania domenami FreeIPA, obsługi biletów Kerberos, zmiany haseł i uzyskiwania biletów usług, wśród innych funkcji.
### Sieć
Przedstawiono ilustrację typowego zestawienia serwera FreeIPA.
## Uwierzytelnianie
Uwierzytelnianie w FreeIPA, wykorzystujące **Kerberos**, jest podobne do uwierzytelniania w **Active Directory**. Dostęp do zasobów domeny wymaga ważnego biletu Kerberos, który może być przechowywany w różnych lokalizacjach w zależności od konfiguracji domeny FreeIPA.
### Pliki biletów CCACHE
Pliki CCACHE, przechowywane zwykle w **`/tmp`** z uprawnieniami **600**, są formatami binarnymi do przechowywania poświadczeń Kerberos, ważnych dla uwierzytelniania bez hasła tekstowego użytkownika ze względu na ich przenośność. Parsowanie biletu CCACHE można wykonać za pomocą polecenia **`klist`**, a ponowne użycie ważnego biletu CCACHE polega na wyeksportowaniu **`KRB5CCNAME`** do ścieżki pliku biletu.
### Unix Keyring
Alternatywnie, biletów CCACHE można przechowywać w keyringu Linux, co daje większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów jest różny (**`KEYRING:nazwa`**, **`KEYRING:proces:nazwa`**, **`KEYRING:wątek:nazwa`**, **`KEYRING:sesja:nazwa`**, **`KEYRING:trwały:uidnumber`**), a **`klist`** jest w stanie analizować te informacje dla użytkownika. Jednak ponowne użycie biletu CCACHE z keyringu Unix może stanowić wyzwanie, a dostępne są narzędzia takie jak **Tickey** do wyodrębniania biletów Kerberos.
### Keytab
Pliki keytab zawierające podmioty Kerberos i zaszyfrowane klucze są kluczowe do uzyskiwania ważnych biletów TGT bez konieczności podawania hasła podmiotu. Parsowanie i ponowne użycie poświadczeń z plików keytab można łatwo wykonać za pomocą narzędzi takich jak **`klist`** i skryptów, na przykład **KeytabParser**.
### Cheatsheet
Więcej informacji na temat korzystania z biletów w systemie Linux znajdziesz pod poniższym linkiem:
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## Wyliczanie
{% hint style="warning" %}
Możesz przeprowadzić **wyliczanie** za pomocą narzędzi **ldap** i innych **binarnych**, lub **łącząc się z stroną internetową na porcie 443 serwera FreeIPA**.
{% endhint %}
### Hosty, Użytkownicy i Grupy
Możliwe jest tworzenie **hostów**, **użytkowników** i **grup**. Hosty i użytkownicy są sortowani do kontenerów o nazwie "**Grupy Hostów**" i "**Grupy Użytkowników**" odpowiednio. Są one podobne do **Jednostek Organizacyjnych** (OU).
Domyślnie w FreeIPA serwer LDAP umożliwia **anonimowe wiązanie**, a duża ilość danych jest wyliczalna **bez uwierzytelnienia**. Można to wyliczyć wszystkie dostępne dane bez uwierzytelnienia:
```
ldapsearch -x
```
Aby uzyskać **więcej informacji**, musisz użyć **uwierzytelnionej** sesji (sprawdź sekcję uwierzytelniania, aby dowiedzieć się, jak przygotować uwierzytelnioną sesję).
```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"
```
Z połączonego z domeną komputera będziesz mógł użyć **zainstalowanych binariów** do wyliczenia domeny:
```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" %}
Użytkownik **admin** w **FreeIPA** jest odpowiednikiem **administratorów domeny** w **AD**.
{% endhint %}
### Skróty
Użytkownik **root** z serwera **IPA** ma dostęp do **skrótów** haseł.
* Skrót hasła użytkownika jest przechowywany jako **base64** w atrybucie "**userPassword**". Ten skrót może być **SSHA512** (w starszych wersjach FreeIPA) lub **PBKDF2\_SHA256**.
* **Nthash** hasła przechowywany jest jako **base64** w "ipaNTHash", jeśli system ma **integrację** z **AD**.
Aby złamać te skróty:
• Jeśli FreeIPA jest zintegrowane z AD, **ipaNTHash** jest łatwy do złamania: Należy **zdekodować** **base64** -> przekodować go jako **ASCII** hex -> John The Ripper lub **hashcat** mogą pomóc w szybkim złamaniu go
• Jeśli używana jest starsza wersja FreeIPA, używany jest **SSHA512**: Należy zdekodować **base64** -> znaleźć skrót **SSHA512** -> John The Ripper lub **hashcat** mogą pomóc w złamaniu go
• Jeśli używana jest nowa wersja FreeIPA, używany jest **PBKDF2\_SHA256**: Należy zdekodować **base64** -> znaleźć **PBKDF2\_SHA256** -> jego **długość** wynosi 256 bajtów. John może pracować z 256 bitami (32 bajty) -> SHA-265 używane jako funkcja pseudolosowa, rozmiar bloku wynosi 32 bajty -> można użyć tylko pierwszych 256 bitów naszego skrótu PBKDF2\_SHA256 -> John The Ripper lub hashcat mogą pomóc w złamaniu go
Aby wyodrębnić skróty, musisz być **rootem na serwerze FreeIPA**, tam możesz użyć narzędzia **`dbscan`** do ich wyodrębnienia:
### Reguły HBAC
Są to reguły, które przyznają określone uprawnienia użytkownikom lub hostom w odniesieniu do zasobów (hostów, usług, grup usług...).
```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
```
#### Reguły Sudo
FreeIPA umożliwia scentralizowaną kontrolę nad uprawnieniami **sudo** za pomocą reguł sudo. Te reguły pozwalają lub ograniczają wykonywanie poleceń z sudo na hostach w domenie. Atakujący potencjalnie mógłby zidentyfikować odpowiednie hosty, użytkowników i dozwolone polecenia, analizując te zestawy reguł.
```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
```
### Kontrola dostępu oparta na rolach
**Rola** składa się z różnych **uprawnień**, z których każde obejmuje zbiór **uprawnień**. Te role mogą być przypisane do użytkowników, **grup użytkowników**, **hostów**, grup hostów i usług. Na przykład, rozważmy domyślną rolę "Administratora użytkownika" w FreeIPA, aby zobrazować tę strukturę.
Rola `Administratora użytkownika` ma następujące uprawnienia:
* **Administratorzy użytkowników**
* **Administratorzy grup**
* **Administratorzy etapu użytkowników**
Za pomocą poniższych poleceń można wyliczyć role, uprawnienia i uprawnienia:
```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
```
### Przykład scenariusza ataku
W [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) znajdziesz prosty przykład, jak wykorzystać pewne uprawnienia do skompromitowania domeny.
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Podwyższanie uprawnień
### ~~Tworzenie użytkownika root~~
{% hint style="warning" %}
Jeśli możesz **utworzyć nowego użytkownika o nazwie `root`**, możesz go podszyć i będziesz mógł **SSH do dowolnej maszyny jako root**.
**TO ZOSTAŁO NAPRAWIONE.**
{% endhint %}
Możesz sprawdzić szczegółowe wyjaśnienie pod adresem [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
## Odwołania
* [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)
Naucz się hakować AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.