mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
187 lines
10 KiB
Markdown
187 lines
10 KiB
Markdown
# FreeIPA Pentesting
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
## Podstawowe informacje
|
|
|
|
FreeIPA jest otwartoźródłową **alternatywą** dla Microsoft Windows **Active Directory**, głównie dla środowisk **Unix**. Łączy kompletny **katalog LDAP** z systemem dystrybucji kluczy MIT **Kerberos** do zarządzania, podobnie jak Active Directory. Wykorzystując system **Certificate System** Dogtag do zarządzania certyfikatami CA i RA, wspiera **uwierzytelnianie wieloskładnikowe**, w tym karty inteligentne. SSSD jest zintegrowany z procesami uwierzytelniania Unix.
|
|
|
|
## Odciski
|
|
|
|
### Pliki i zmienne środowiskowe
|
|
|
|
- Plik w `/etc/krb5.conf` to miejsce, gdzie przechowywane są informacje klienta Kerberos, niezbędne do rejestracji w domenie. Obejmuje to lokalizacje KDC i serwerów administracyjnych, domyślne ustawienia i mapowania.
|
|
- Domyślne ustawienia 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 `/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 na konkretne pliki i ustawienia związane z uwierzytelnianiem Kerberos.
|
|
|
|
### Binaries
|
|
|
|
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 serwisowych, wśród innych funkcji.
|
|
|
|
### Sieć
|
|
|
|
Przedstawiono ilustrację, aby zobrazować typową konfigurację serwera FreeIPA.
|
|
|
|
## Uwierzytelnianie
|
|
|
|
Uwierzytelnianie w FreeIPA, wykorzystujące **Kerberos**, odzwierciedla to 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, zazwyczaj przechowywane w **`/tmp`** z uprawnieniami **600**, są formatami binarnymi do przechowywania poświadczeń Kerberos, ważnymi dla uwierzytelniania bez hasła w postaci tekstowej użytkownika z powodu ich przenośności. Analizowanie 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, bilety CCACHE mogą być przechowywane w keyringu Linuksa, oferując większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów różni się (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), przy czym `klist` jest w stanie analizować te informacje dla użytkownika. Jednak ponowne użycie biletu CCACHE z keyringu Unix może stwarzać wyzwania, a narzędzia takie jak **Tickey** są dostępne do ekstrakcji biletów Kerberos.
|
|
|
|
### Keytab
|
|
|
|
Pliki keytab, zawierające główne zasady Kerberos i zaszyfrowane klucze, są kluczowe do uzyskania ważnych biletów przyznawania biletów (TGT) bez potrzeby znajomości hasła głównego. Analizowanie 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
|
|
|
|
Możesz znaleźć więcej informacji na temat używania biletów w Linuksie w następującym linku:
|
|
|
|
{{#ref}}
|
|
privilege-escalation/linux-active-directory.md
|
|
{{#endref}}
|
|
|
|
## Enumeracja
|
|
|
|
> [!WARNING]
|
|
> Możesz przeprowadzić **enumerację** za pomocą **ldap** i innych narzędzi **binarnych**, lub **łącząc się z stroną internetową na porcie 443 serwera FreeIPA**.
|
|
|
|
### 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ą sortowani w kontenerach zwanych “**Grupami Hostów**” i “**Grupami Użytkowników**” odpowiednio. Są one podobne do **Jednostek Organizacyjnych** (OU).
|
|
|
|
Domyślnie w FreeIPA serwer LDAP pozwala na **anonimowe połączenia**, a duża część danych jest enumerowana **bez uwierzytelnienia**. To może enumerować wszystkie dostępne dane bez uwierzytelnienia:
|
|
```
|
|
ldapsearch -x
|
|
```
|
|
Aby uzyskać **więcej informacji**, musisz użyć **uwierzytelnionej** sesji (sprawdź sekcję Uwierzytelnianie, 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 maszyny dołączonej do domeny będziesz mógł użyć **zainstalowanych binarek** do enumeracji 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
|
|
```
|
|
> [!NOTE]
|
|
> Użytkownik **admin** w **FreeIPA** jest odpowiednikiem **administratorów domeny** z **AD**.
|
|
|
|
### Hashes <a href="#id-482b" id="id-482b"></a>
|
|
|
|
Użytkownik **root** z serwera **IPA** ma dostęp do **hashy** haseł.
|
|
|
|
- Hash hasła użytkownika jest przechowywany jako **base64** w atrybucie “**userPassword**”. Ten hash może być **SSHA512** (stare wersje FreeIPA) lub **PBKDF2_SHA256**.
|
|
- **Nthash** hasła jest przechowywany jako **base64** w “**ipaNTHash**”, jeśli system ma **integrację** z **AD**.
|
|
|
|
Aby złamać te hashe:
|
|
|
|
• Jeśli freeIPA jest zintegrowany z AD, **ipaNTHash** jest łatwy do złamania: Należy **dekodować** **base64** -> ponownie zakodować jako **ASCII** hex -> John The Ripper lub **hashcat** mogą pomóc w szybkim złamaniu
|
|
|
|
• Jeśli używana jest stara wersja FreeIPA, to używany jest **SSHA512**: Należy dekodować **base64** -> znaleźć hash SSHA512 -> John The Ripper lub **hashcat** mogą pomóc w złamaniu
|
|
|
|
• Jeśli używana jest nowa wersja FreeIPA, to używany jest **PBKDF2_SHA256**: Należy dekodować **base64** -> znaleźć PBKDF2_SHA256 -> jego **długość** to 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 hasha PBKDF2_SHA256 -> John The Ripper lub hashcat mogą pomóc w złamaniu
|
|
|
|
<figure><img src="../images/image (655).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Aby wyodrębnić hashe, musisz być **rootem na serwerze FreeIPA**, tam możesz użyć narzędzia **`dbscan`** do ich wyodrębnienia:
|
|
|
|
<figure><img src="../images/image (293).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
|
|
|
Są to zasady, które przyznają określone uprawnienia użytkownikom lub hostom do zasobów (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
|
|
```
|
|
#### Sudo-Rules
|
|
|
|
FreeIPA umożliwia centralne zarządzanie **uprawnieniami sudo** za pomocą reguł sudo. Reguły te pozwalają lub ograniczają wykonywanie poleceń z sudo na hostach w obrębie domeny. Atakujący może potencjalnie 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 <sudorule> --all
|
|
```
|
|
### Kontrola dostępu oparta na rolach
|
|
|
|
**Rola** składa się z różnych **uprawnień**, z których każde obejmuje zbiór **zezwolenia**. 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ż domyślną rolę „Administrator Użytkowników” w FreeIPA, aby zobrazować tę strukturę.
|
|
|
|
Rola `Administrator Użytkowników` ma te uprawnienia:
|
|
|
|
- **Administratorzy Użytkowników**
|
|
- **Administratorzy Grup**
|
|
- **Administratorzy Użytkowników Etapowych**
|
|
|
|
Za pomocą następujących poleceń można wyliczyć role, uprawnienia i zezwolenia:
|
|
```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 nadużyć niektóre uprawnienia, aby skompromitować 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
|
|
|
|
### ~~tworzenie użytkownika root~~
|
|
|
|
> [!WARNING]
|
|
> Jeśli możesz **utworzyć nowego użytkownika o nazwie `root`**, możesz się nim podszyć i będziesz mógł **SSH do dowolnej maszyny jako root.**
|
|
>
|
|
> **TO ZOSTAŁO POPRAWIONE.**
|
|
|
|
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)
|
|
|
|
## Odniesienia
|
|
|
|
- [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}}
|