mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
213 lines
12 KiB
Markdown
213 lines
12 KiB
Markdown
# Testowanie penetracyjne FreeIPA
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
|
* Kup [**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).
|
|
|
|
</details>
|
|
|
|
## Podstawowe informacje
|
|
|
|
FreeIPA to otwarte źródło **alternatywa** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unix**. Łączy kompletny **katalog LDAP** z Centrum Dystrybucji Kluczy MIT **Kerberos** do zarządzania podobnie jak Active Directory. Wykorzystując System Certyfikatów Dogtag **Certificate System** do zarządzania certyfikatami CA & RA, obsługuje **uwierzytelnianie wieloskładnikowe**, w tym karty inteligentne. SSSD jest zintegrowany 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 lokalizacje KDC i serwerów admina, ustawienia domyślne i mapowania.
|
|
* Ustawienia domyślne dla klientów i serwerów IPA są ustawione w pliku znajdującym się w `/etc/ipa/default.conf`.
|
|
* Hosty w domenie muszą mieć plik `krb5.keytab` w lokalizacji `/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ń dotyczących uwierzytelniania 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ługowych, między innymi funkcjonalności.
|
|
|
|
### Sieć
|
|
|
|
Została dostarczona ilustracja przedstawiająca typowe ustawienie serwera FreeIPA.
|
|
|
|
## Uwierzytelnianie
|
|
|
|
Uwierzytelnianie w FreeIPA, wykorzystujące **Kerberos**, odzwierciedla to w **Active Directory**. Dostęp do zasobów domenowych 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 zazwyczaj 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.
|
|
|
|
### **Keyring Unix**
|
|
|
|
Alternatywnie, bilet CCACHE można przechowywać w keyringu Linux, oferując większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów jest zróżnicowany (`KEYRING:nazwa`, `KEYRING:proces:nazwa`, `KEYRING:wątek:nazwa`, `KEYRING:sesja:nazwa`, `KEYRING:trwały:uidnumber`), a `klist` jest zdolny do parsowania tych informacji dla użytkownika. Jednak ponowne użycie biletu CCACHE z keyringu Unix może stanowić wyzwanie, a narzędzia takie jak **Tickey** są dostępne do wydobywania biletów Kerberos.
|
|
|
|
### Keytab
|
|
|
|
Pliki keytab, zawierające podmioty Kerberos i zaszyfrowane klucze, są kluczowe do uzyskiwania ważnych biletów udzielających uprawnień (TGT) bez konieczności znajomości 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, takich jak **KeytabParser**.
|
|
|
|
### Cheatsheet
|
|
|
|
Więcej informacji na temat korzystania z biletów w systemie Linux znajdziesz pod następującym 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ą **ldap** i innych **narzędzi binarnych**, lub **łącząc się z stroną internetową na porcie 443 serwera FreeIPA**.
|
|
{% endhint %}
|
|
|
|
### Hosty, Użytkownicy i Grupy <a href="#id-4b3b" id="id-4b3b"></a>
|
|
|
|
Możliwe jest tworzenie **hostów**, **użytkowników** i **grup**. Hosty i użytkownicy są sortowane do kontenerów zwanych „**Grupy Hostów**” i „**Grupy Użytkowników**” odpowiednio. Są one podobne do **Jednostek Organizacyjnych** (OU).
|
|
|
|
Domyślnie w FreeIPA serwer LDAP pozwala na **anonimowe wiązania**, a duża ilość danych jest wyliczalna **nieuwierzytelniona**. Można wyliczyć wszystkie dostępne dane nieuwierzytelnione:
|
|
```
|
|
ldapsearch -x
|
|
```
|
|
Aby uzyskać **więcej informacji**, musisz użyć **uwierzytelnionej** sesji (sprawdź sekcję Autoryzacja, 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 <username> --all
|
|
ipa usergroup-show <user group> --all
|
|
ipa host-find <host> --all
|
|
ipa hostgroup-show <host group> --all
|
|
```
|
|
{% hint style="info" %}
|
|
Użytkownik **admin** w **FreeIPA** jest odpowiednikiem **administratorów domeny** z **AD**.
|
|
{% endhint %}
|
|
|
|
### Skróty <a href="#id-482b" id="id-482b"></a>
|
|
|
|
Użytkownik **root** z serwera **IPA** ma dostęp do skrótów hasła.
|
|
|
|
* Skrót hasła użytkownika przechowywany jest 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 jest zintegrowany z **AD**.
|
|
|
|
Aby złamać te skróty:
|
|
|
|
• Jeśli FreeIPA jest zintegrowany z AD, **ipaNTHash** jest łatwy do złamania: Należy **odkodować** **base64** -> ponownie zakodować jako **ASCII** szesnastkowy -> John The Ripper lub **hashcat** mogą pomóc w szybkim złamaniu
|
|
|
|
• Jeśli używana jest starsza wersja FreeIPA, a więc używane jest **SSHA512**: Należy odkodować **base64** -> znaleźć skrót SSHA512 -> John The Ripper lub **hashcat** mogą pomóc w złamaniu
|
|
|
|
• Jeśli używana jest nowa wersja FreeIPA, a więc używane jest **PBKDF2\_SHA256**: Należy odkodować **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 to 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
|
|
|
|
<figure><img src="../.gitbook/assets/image (652).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Aby wydobyć skróty, musisz być **rootem na serwerze FreeIPA**, gdzie możesz użyć narzędzia **`dbscan`** do ich wydobycia:
|
|
|
|
<figure><img src="../.gitbook/assets/image (290).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### Reguły HBAC <a href="#id-482b" id="id-482b"></a>
|
|
|
|
To reguły przyznające określone uprawnienia użytkownikom lub hostom w zasobach (hosty, usługi, grupy 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 <hbacrule> --all
|
|
```
|
|
#### Reguły Sudo
|
|
|
|
FreeIPA umożliwia scentralizowaną kontrolę uprawnień **sudo** za pomocą reguł sudo. Te reguły pozwalają lub ograniczają wykonywanie poleceń za pomocą sudo na hostach w domenie. Atakujący mógłby potencjalnie zidentyfikować odpowiednie hosty, użytkowników i dozwolone polecenia, analizując te zbiory 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 <sudorule> --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 oraz Usług. Na przykład, rozważ domyślną rolę "Administratora Użytkownika" w FreeIPA, aby zilustrować tę strukturę.
|
|
|
|
Rola `Administratora Użytkownika` ma następujące uprawnienia:
|
|
|
|
- **Administratorzy Użytkowników**
|
|
- **Administratorzy Grup**
|
|
- **Administratorzy Etapu Użytkownika**
|
|
|
|
Za pomocą poniższych poleceń można wyświetlić role, uprawnienia i pozwolenia:
|
|
```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
|
|
```
|
|
### 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)
|
|
|
|
## Eskalacja uprawnień
|
|
|
|
### ~~Tworzenie użytkownika root~~
|
|
|
|
{% hint style="warning" %}
|
|
Jeśli możesz **utworzyć nowego użytkownika o nazwie `root`**, możesz się pod niego podszyć i będziesz mógł **SSH na dowolną maszynę jako root.**
|
|
|
|
**TO ZOSTAŁO NAPRAWIONE.**
|
|
{% endhint %}
|
|
|
|
Możesz sprawdzić szczegółowe wyjaśnienie w [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
|
|
|
|
## Odnośniki
|
|
|
|
* [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)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](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.
|
|
|
|
</details>
|