mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
215 lines
16 KiB
Markdown
215 lines
16 KiB
Markdown
# FreeIPA Pentesting
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## Basic Information
|
||
|
||
FreeIPA є відкритим **альтернативою** Microsoft Windows **Active Directory**, в основному для **Unix** середовищ. Він поєднує в собі повний **LDAP каталог** з MIT **Kerberos** Центром Розподілу Ключів для управління, подібним до Active Directory. Використовуючи систему сертифікатів Dogtag для управління сертифікатами CA та RA, він підтримує **багатофакторну** аутентифікацію, включаючи смарт-картки. SSSD інтегровано для процесів аутентифікації Unix.
|
||
|
||
## Fingerprints
|
||
|
||
### Files & Environment Variables
|
||
|
||
* Файл за адресою `/etc/krb5.conf` є місцем, де зберігається інформація клієнта Kerberos, необхідна для реєстрації в домені. Це включає місця розташування KDC та адміністративних серверів, налаштування за замовчуванням та відображення.
|
||
* Системні за замовчуванням для клієнтів та серверів IPA встановлюються у файлі, розташованому за адресою `/etc/ipa/default.conf`.
|
||
* Хости в домені повинні мати файл `krb5.keytab` за адресою `/etc/krb5.keytab` для процесів аутентифікації.
|
||
* Різні змінні середовища (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) використовуються для вказівки на конкретні файли та налаштування, що стосуються аутентифікації Kerberos.
|
||
|
||
### Binaries
|
||
|
||
Інструменти, такі як `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` та `kvno`, є центральними для управління доменами FreeIPA, обробки квитків Kerberos, зміни паролів та отримання сервісних квитків, серед інших функцій.
|
||
|
||
### Network
|
||
|
||
Надається ілюстрація, щоб зобразити типову конфігурацію сервера FreeIPA.
|
||
|
||
## Authentication
|
||
|
||
Аутентифікація в FreeIPA, використовуючи **Kerberos**, відображає таку в **Active Directory**. Доступ до ресурсів домену вимагає дійсного квитка Kerberos, який може зберігатися в різних місцях залежно від конфігурації домену FreeIPA.
|
||
|
||
### **CCACHE Ticket Files**
|
||
|
||
Файли CCACHE, зазвичай зберігаються в **`/tmp`** з **600** правами доступу, є бінарними форматами для зберігання облікових даних Kerberos, важливими для аутентифікації без відкритого пароля користувача завдяки їх портативності. Аналіз квитка CCACHE можна виконати за допомогою команди `klist`, а повторне використання дійсного квитка CCACHE передбачає експорт `KRB5CCNAME` до шляху файлу квитка.
|
||
|
||
### **Unix Keyring**
|
||
|
||
Альтернативно, квитки CCACHE можуть зберігатися в ключовій системі Linux, що пропонує більше контролю над управлінням квитками. Обсяг зберігання квитків варіюється (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), при цьому `klist` здатний аналізувати цю інформацію для користувача. Однак повторне використання квитка CCACHE з ключової системи Unix може бути складним, з такими інструментами, як **Tickey**, доступними для витягування квитків Kerberos.
|
||
|
||
### Keytab
|
||
|
||
Файли keytab, що містять принципали Kerberos та зашифровані ключі, є критично важливими для отримання дійсних квитків на надання квитків (TGT) без необхідності пароля принципала. Аналіз та повторне використання облікових даних з файлів keytab можна легко виконати за допомогою утиліт, таких як `klist`, та скриптів, таких як **KeytabParser**.
|
||
|
||
### Cheatsheet
|
||
|
||
Ви можете знайти більше інформації про те, як використовувати квитки в linux за наступним посиланням:
|
||
|
||
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
|
||
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
|
||
{% endcontent-ref %}
|
||
|
||
## Enumeration
|
||
|
||
{% hint style="warning" %}
|
||
Ви можете виконати **перерахування** через **ldap** та інші **бінарні** інструменти, або **підключившись до веб-сторінки на порту 443 сервера FreeIPA**.
|
||
{% endhint %}
|
||
|
||
### Hosts, Users, and Groups <a href="#id-4b3b" id="id-4b3b"></a>
|
||
|
||
Можна створювати **хости**, **користувачів** та **групи**. Хости та користувачі сортуються в контейнери, звані “**Групи Хостів**” та “**Групи Користувачів**” відповідно. Це подібно до **Організаційних Одиниць** (OU).
|
||
|
||
За замовчуванням у FreeIPA сервер LDAP дозволяє **анонімні прив'язки**, і велика частина даних є перерахованою **неаутентифікованою**. Це може перерахувати всі дані, доступні неаутентифікованим:
|
||
```
|
||
ldapsearch -x
|
||
```
|
||
Щоб отримати **більше інформації**, вам потрібно використовувати **автентифіковану** сесію (перегляньте розділ Аутентифікація, щоб дізнатися, як підготувати автентифіковану сесію).
|
||
```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"
|
||
```
|
||
З машини, приєднаної до домену, ви зможете використовувати **встановлені двійкові файли** для перерахунку домену:
|
||
```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" %}
|
||
Користувач **admin** у **FreeIPA** є еквівалентом **domain admins** з **AD**.
|
||
{% endhint %}
|
||
|
||
### Hashes <a href="#id-482b" id="id-482b"></a>
|
||
|
||
Користувач **root** з **IPA serve**r має доступ до паролів **hashes**.
|
||
|
||
* Парольний хеш користувача зберігається як **base64** в атрибуті “**userPassword**”. Цей хеш може бути **SSHA512** (старі версії FreeIPA) або **PBKDF2\_SHA256**.
|
||
* **Nthash** пароля зберігається як **base64** в “**ipaNTHash**”, якщо система має **інтеграцію** з **AD**.
|
||
|
||
Щоб зламати ці хеші:
|
||
|
||
• Якщо freeIPA інтегровано з AD, **ipaNTHash** легко зламати: Вам слід **декодувати** **base64** -> повторно закодувати його як **ASCII** hex -> John The Ripper або **hashcat** можуть допомогти вам швидко його зламати
|
||
|
||
• Якщо використовується стара версія FreeIPA, то використовується **SSHA512**: Вам слід декодувати **base64** -> знайти SSHA512 **hash** -> John The Ripper або **hashcat** можуть допомогти вам його зламати
|
||
|
||
• Якщо використовується нова версія FreeIPA, то використовується **PBKDF2\_SHA256**: Вам слід декодувати **base64** -> знайти PBKDF2\_SHA256 -> його **довжина** 256 байт. John може працювати з 256 бітами (32 байти) -> SHA-265 використовується як псевдовипадкова функція, розмір блоку 32 байти -> ви можете використовувати лише перші 256 біт нашого PBKDF2\_SHA256 хешу -> John The Ripper або hashcat можуть допомогти вам його зламати
|
||
|
||
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Щоб витягти хеші, вам потрібно бути **root на сервері FreeIPA**, там ви можете використовувати інструмент **`dbscan`** для їх витягування:
|
||
|
||
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
||
|
||
Це правила, які надають конкретні дозволи користувачам або хостам на ресурси (хости, сервіси, групи сервісів...)
|
||
```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 дозволяє централізований контроль над **sudo permissions** через sudo-правила. Ці правила дозволяють або обмежують виконання команд з sudo на хостах у домені. Зловмисник може потенційно визначити відповідні хости, користувачів та дозволені команди, досліджуючи ці набори правил.
|
||
```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
|
||
```
|
||
### Контроль доступу на основі ролей
|
||
|
||
**Роль** складається з різних **привілеїв**, кожен з яких охоплює колекцію **дозволів**. Ці ролі можуть бути призначені Користувачам, Групам Користувачів, **Хостам**, Групам Хостів та Сервісам. Наприклад, розглянемо роль за замовчуванням “Адміністратор Користувачів” у FreeIPA, щоб проілюструвати цю структуру.
|
||
|
||
Роль `Адміністратор Користувачів` має ці привілеї:
|
||
|
||
* **Адміністратори Користувачів**
|
||
* **Адміністратори Груп**
|
||
* **Адміністратори Користувачів Стадії**
|
||
|
||
За допомогою наступних команд можна перерахувати ролі, привілеї та дозволи:
|
||
```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
|
||
```
|
||
### Attack Scenario Example
|
||
|
||
В [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) ви можете знайти простий приклад того, як зловживати деякими правами для компрометації домену.
|
||
|
||
### 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
|
||
|
||
### ~~створення користувача root~~
|
||
|
||
{% hint style="warning" %}
|
||
Якщо ви можете **створити нового користувача з ім'ям `root`**, ви можете видавати себе за нього, і ви зможете **SSH на будь-яку машину як root.**
|
||
|
||
**ЦЕ БУЛО ВИПРАВЛЕНО.**
|
||
{% endhint %}
|
||
|
||
Ви можете перевірити детальне пояснення в [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
|
||
|
||
## References
|
||
|
||
* [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)
|
||
|
||
{% hint style="success" %}
|
||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|