# Testowanie penetracyjne FreeIPA
Naucz się hakować AWS od zera do bohatera z htARTE (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 z htARTE (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.