mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
215 lines
18 KiB
Markdown
215 lines
18 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 Certificate System** για τη διαχείριση πιστοποιητικών CA & RA, υποστηρίζει **πολλαπλούς παράγοντες** αυθεντικοποίησης, συμπεριλαμβανομένων των έξυπνων καρτών. Το SSSD είναι ενσωματωμένο για διαδικασίες αυθεντικοποίησης Unix.
|
||
|
||
## Fingerprints
|
||
|
||
### Files & Environment Variables
|
||
|
||
* Το αρχείο στο `/etc/krb5.conf` είναι όπου αποθηκεύονται οι πληροφορίες του πελάτη Kerberos, απαραίτητες για την εγγραφή στο τομέα. Αυτό περιλαμβάνει τις τοποθεσίες των KDCs και των διακομιστών διαχείρισης, τις προεπιλεγμένες ρυθμίσεις και τους χάρτες.
|
||
* Οι προεπιλεγμένες ρυθμίσεις για τους πελάτες και τους διακομιστές 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 keyring μπορεί να προκαλέσει προκλήσεις, με εργαλεία όπως το **Tickey** διαθέσιμα για την εξαγωγή εισιτηρίων Kerberos.
|
||
|
||
### Keytab
|
||
|
||
Τα αρχεία keytab, που περιέχουν Kerberos principals και κρυπτογραφημένα κλειδιά, είναι κρίσιμα για την απόκτηση έγκυρων εισιτηρίων χορήγησης εισιτηρίων (TGT) χωρίς να χρειάζεται ο κωδικός πρόσβασης του principal. Η ανάλυση και η επαναχρησιμοποίηση διαπιστευτηρίων από αρχεία 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" %}
|
||
Μπορείτε να εκτελέσετε την **enumeration** μέσω **ldap** και άλλων **binary** εργαλείων, ή **συνδέοντας στη σελίδα web στην πόρτα 443 του διακομιστή FreeIPA**.
|
||
{% endhint %}
|
||
|
||
### Hosts, Users, and Groups <a href="#id-4b3b" id="id-4b3b"></a>
|
||
|
||
Είναι δυνατή η δημιουργία **hosts**, **users** και **groups**. Οι υπολογιστές και οι χρήστες ταξινομούνται σε κοντέινερ που ονομάζονται “**Host Groups**” και “**User Groups**” αντίστοιχα. Αυτά είναι παρόμοια με τις **Οργανωτικές Μονάδες** (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 server** έχει πρόσβαση στους κωδικούς πρόσβασης **hashes**.
|
||
|
||
* Ο κωδικός πρόσβασης hash ενός χρήστη αποθηκεύεται ως **base64** στο “**userPassword**” **attribute**. Αυτός ο hash μπορεί να είναι **SSHA512** (παλιές εκδόσεις του FreeIPA) ή **PBKDF2\_SHA256**.
|
||
* Ο **Nthash** του κωδικού αποθηκεύεται ως **base64** στο “**ipaNTHash**” αν το σύστημα έχει **integration** με το **AD**.
|
||
|
||
Για να σπάσετε αυτούς τους hashes:
|
||
|
||
• Αν το freeIPA είναι ενσωματωμένο με το AD, ο **ipaNTHash** είναι εύκολο να σπάσει: Πρέπει να **decode** **base64** -> να το ξανακωδικοποιήσετε ως **ASCII** hex -> ο John The Ripper ή το **hashcat** μπορούν να σας βοηθήσουν να το σπάσετε γρήγορα
|
||
|
||
• Αν χρησιμοποιείται παλιά έκδοση του FreeIPA, τότε χρησιμοποιείται **SSHA512**: Πρέπει να αποκωδικοποιήσετε **base64** -> να βρείτε τον SSHA512 **hash** -> ο John The Ripper ή το **hashcat** μπορούν να σας βοηθήσουν να το σπάσετε
|
||
|
||
• Αν χρησιμοποιείται νέα έκδοση του FreeIPA, τότε χρησιμοποιείται **PBKDF2\_SHA256**: Πρέπει να αποκωδικοποιήσετε **base64** -> να βρείτε PBKDF2\_SHA256 -> το **length** του είναι 256 byte. Ο John μπορεί να δουλέψει με 256 bits (32 byte) -> το SHA-265 χρησιμοποιείται ως η ψευδο-τυχαία συνάρτηση, το μέγεθος μπλοκ είναι 32 byte -> μπορείτε να χρησιμοποιήσετε μόνο τα πρώτα 256 bit του hash PBKDF2\_SHA256 -> ο John The Ripper ή το hashcat μπορούν να σας βοηθήσουν να το σπάσετε
|
||
|
||
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Για να εξάγετε τους hashes πρέπει να είστε **root στον FreeIPA server**, εκεί μπορείτε να χρησιμοποιήσετε το εργαλείο **`dbscan`** για να τους εξάγετε:
|
||
|
||
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
||
|
||
Υπάρχουν οι κανόνες που παρέχουν συγκεκριμένες άδειες σε χρήστες ή hosts πάνω σε πόρους (hosts, υπηρεσίες, ομάδες υπηρεσιών...)
|
||
```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-rules. Αυτοί οι κανόνες επιτρέπουν ή περιορίζουν την εκτέλεση εντολών με sudo σε hosts εντός του τομέα. Ένας επιτιθέμενος θα μπορούσε δυνητικά να εντοπίσει τους εφαρμοστέους hosts, χρήστες και επιτρεπόμενες εντολές εξετάζοντας αυτά τα σύνολα κανόνων.
|
||
```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
|
||
```
|
||
### Έλεγχος Πρόσβασης Βασισμένος σε Ρόλους
|
||
|
||
Ένας **ρόλος** αποτελείται από διάφορα **προνόμια**, το καθένα από τα οποία περιλαμβάνει μια συλλογή **αδειών**. Αυτοί οι ρόλοι μπορούν να ανατεθούν σε Χρήστες, Ομάδες Χρηστών, **Hosts**, Ομάδες Hosts και Υπηρεσίες. Για παράδειγμα, εξετάστε τον προεπιλεγμένο ρόλο “Διαχειριστής Χρηστών” στο 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
|
||
```
|
||
### Σενάριο Επίθεσης Παράδειγμα
|
||
|
||
Στο [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) μπορείτε να βρείτε ένα απλό παράδειγμα για το πώς να εκμεταλλευτείτε κάποιες άδειες για να συμβιβάσετε το domain.
|
||
|
||
### 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)
|
||
|
||
## Αναφορές
|
||
|
||
* [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" %}
|
||
Μάθετε & εξασκηθείτε στο 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">\
|
||
Μάθετε & εξασκηθείτε στο 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>Υποστήριξη HackTricks</summary>
|
||
|
||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|