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}}
|
||
|
||
## Temel Bilgiler
|
||
|
||
FreeIPA, esas olarak **Unix** ortamları için Microsoft Windows **Active Directory**'ye açık kaynaklı bir **alternatif**dir. Active Directory'ye benzer bir yönetim için tam bir **LDAP dizini** ile MIT **Kerberos** Anahtar Dağıtım Merkezi'ni birleştirir. CA ve RA sertifika yönetimi için Dogtag **Sertifika Sistemi**'ni kullanarak, akıllı kartlar da dahil olmak üzere **çok faktörlü** kimlik doğrulamayı destekler. Unix kimlik doğrulama süreçleri için SSSD entegre edilmiştir.
|
||
|
||
## Parmak İzi
|
||
|
||
### Dosyalar ve Ortam Değişkenleri
|
||
|
||
- `/etc/krb5.conf` dosyası, alan kaydı için gerekli Kerberos istemci bilgilerini saklar. Bu, KDC'lerin ve yönetici sunucularının konumlarını, varsayılan ayarları ve eşlemeleri içerir.
|
||
- IPA istemcileri ve sunucuları için sistem genelindeki varsayılan ayarlar `/etc/ipa/default.conf` dosyasında ayarlanır.
|
||
- Alan içindeki ana bilgisayarların kimlik doğrulama süreçleri için `/etc/krb5.keytab` konumunda bir `krb5.keytab` dosyasına sahip olması gerekir.
|
||
- Kerberos kimlik doğrulamasıyla ilgili belirli dosyalara ve ayarlara işaret eden çeşitli ortam değişkenleri (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) kullanılır.
|
||
|
||
### İkili Dosyalar
|
||
|
||
`ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` ve `kvno` gibi araçlar, FreeIPA alanlarını yönetmek, Kerberos biletlerini işlemek, şifreleri değiştirmek ve hizmet biletleri almak gibi işlevler için merkezi öneme sahiptir.
|
||
|
||
### Ağ
|
||
|
||
Tipik bir FreeIPA sunucu kurulumu gösteren bir illüstrasyon sağlanmıştır.
|
||
|
||
## Kimlik Doğrulama
|
||
|
||
FreeIPA'daki kimlik doğrulama, **Kerberos**'u kullanarak **Active Directory**'deki gibi çalışır. Alan kaynaklarına erişim, FreeIPA alan yapılandırmasına bağlı olarak çeşitli konumlarda saklanabilen geçerli bir Kerberos biletini gerektirir.
|
||
|
||
### **CCACHE Bilet Dosyaları**
|
||
|
||
CCACHE dosyaları, genellikle **`/tmp`** dizininde **600** izinleriyle saklanır ve Kerberos kimlik bilgilerini depolamak için ikili formatlardır; bu, kullanıcıların düz metin şifreleri olmadan kimlik doğrulama yapmalarını sağlar. Bir CCACHE biletini ayrıştırmak için `klist` komutu kullanılabilir ve geçerli bir CCACHE Biletini yeniden kullanmak, `KRB5CCNAME`'i bilet dosyasının yoluna dışa aktarmayı içerir.
|
||
|
||
### **Unix Anahtarlığı**
|
||
|
||
Alternatif olarak, CCACHE Biletleri Linux anahtarlığında saklanabilir ve bilet yönetimi üzerinde daha fazla kontrol sağlar. Bilet saklama kapsamı değişir (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), `klist` bu bilgiyi kullanıcı için ayrıştırabilir. Ancak, Unix anahtarlığından bir CCACHE Biletini yeniden kullanmak zorluklar çıkarabilir; Kerberos biletlerini çıkarmak için **Tickey** gibi araçlar mevcuttur.
|
||
|
||
### Keytab
|
||
|
||
Kerberos ilkelerini ve şifrelenmiş anahtarları içeren keytab dosyaları, geçerli bilet verme biletleri (TGT) almak için kritik öneme sahiptir ve ilkenin şifresini gerektirmez. Keytab dosyalarından kimlik bilgilerini ayrıştırmak ve yeniden kullanmak, `klist` gibi yardımcı programlar ve **KeytabParser** gibi betikler ile kolayca gerçekleştirilebilir.
|
||
|
||
### Hızlı Referans
|
||
|
||
Linux'ta biletleri nasıl kullanacağınız hakkında daha fazla bilgi bulabilirsiniz:
|
||
|
||
{{#ref}}
|
||
privilege-escalation/linux-active-directory.md
|
||
{{#endref}}
|
||
|
||
## Sayım
|
||
|
||
> [!WARNING]
|
||
> **ldap** ve diğer **ikili** araçlar aracılığıyla veya **FreeIPA sunucusunun 443 numaralı portundaki web sayfasına bağlanarak** **sayım** gerçekleştirebilirsiniz.
|
||
|
||
### Ana Bilgisayarlar, Kullanıcılar ve Gruplar <a href="#id-4b3b" id="id-4b3b"></a>
|
||
|
||
**Ana bilgisayarlar**, **kullanıcılar** ve **gruplar** oluşturmak mümkündür. Ana bilgisayarlar ve kullanıcılar, sırasıyla “**Ana Bilgisayar Grupları**” ve “**Kullanıcı Grupları**” olarak adlandırılan kapsayıcılara ayrılır. Bunlar, **Organizasyonel Birimler** (OU) ile benzerdir.
|
||
|
||
FreeIPA'da varsayılan olarak, LDAP sunucusu **anonim bağlamalara** izin verir ve büyük bir veri yelpazesi **kimlik doğrulamasız** olarak sayılabilir. Bu, kimlik doğrulamasız olarak mevcut olan tüm verileri sayabilir:
|
||
```
|
||
ldapsearch -x
|
||
```
|
||
Daha **fazla bilgi** almak için **kimlik doğrulamalı** bir oturum kullanmanız gerekir (kimlik doğrulamalı bir oturum hazırlamak için Kimlik Doğrulama bölümüne bakın).
|
||
```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"
|
||
```
|
||
Bir alan katılımlı makineden **kurulu ikili dosyaları** kullanarak alanı listeleyebilirsiniz:
|
||
```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]
|
||
> **FreeIPA**'nın **admin** kullanıcısı, **AD**'den **domain admins** ile eşdeğerdir.
|
||
|
||
### Hashes <a href="#id-482b" id="id-482b"></a>
|
||
|
||
**IPA server**'daki **root** kullanıcısı, şifre **hash'lerine** erişime sahiptir.
|
||
|
||
- Bir kullanıcının şifre hash'i, “**userPassword**” **attribute**'unda **base64** olarak saklanır. Bu hash **SSHA512** (eski FreeIPA sürümleri) veya **PBKDF2_SHA256** olabilir.
|
||
- Şifre **ipaNTHash** olarak **base64**'te saklanır, eğer sistem **AD** ile **entegrasyon** içindeyse.
|
||
|
||
Bu hash'leri kırmak için:
|
||
|
||
• Eğer freeIPA AD ile entegre ise, **ipaNTHash**'i kırmak kolaydır: **base64**'ü **decode** etmelisiniz -> **ASCII** hex olarak yeniden kodlayın -> John The Ripper veya **hashcat** hızlı bir şekilde kırmanıza yardımcı olabilir.
|
||
|
||
• Eski bir FreeIPA sürümü kullanılıyorsa, **SSHA512** kullanılır: **base64**'ü decode etmelisiniz -> SSHA512 **hash**'ini bulun -> John The Ripper veya **hashcat** kırmanıza yardımcı olabilir.
|
||
|
||
• Yeni bir FreeIPA sürümü kullanılıyorsa, **PBKDF2_SHA256** kullanılır: **base64**'ü decode etmelisiniz -> PBKDF2_SHA256'yı bulun -> **length**'i 256 byte'dır. John 256 bit (32 byte) ile çalışabilir -> SHA-265, pseudo-random fonksiyonu olarak kullanılır, blok boyutu 32 byte'dır -> PBKDF2_SHA256 hash'imizin yalnızca ilk 256 bit'ini kullanabilirsiniz -> John The Ripper veya hashcat kırmanıza yardımcı olabilir.
|
||
|
||
<figure><img src="../images/image (655).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Hash'leri çıkarmak için **FreeIPA sunucusunda root** olmanız gerekir, burada **`dbscan`** aracını kullanarak bunları çıkarabilirsiniz:
|
||
|
||
<figure><img src="../images/image (293).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
||
|
||
Kullanıcılara veya hostlara kaynaklar (hostlar, hizmetler, hizmet grupları...) üzerinde belirli izinler veren kurallardır.
|
||
```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 izinleri** üzerinde merkezi kontrol sağlar. Bu kurallar, alan içindeki hostlarda sudo ile komutların yürütülmesini sağlar veya sınırlar. Bir saldırgan, bu kuralları inceleyerek geçerli hostları, kullanıcıları ve izin verilen komutları belirleyebilir.
|
||
```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
|
||
```
|
||
### Rol Tabanlı Erişim Kontrolü
|
||
|
||
Bir **rol**, çeşitli **ayrıcalıklar** içermektedir ve her biri bir dizi **izin** kapsamaktadır. Bu roller Kullanıcılara, Kullanıcı **Gruplarına**, **Ana Bilgilere**, Ana Bilgi Gruplarına ve Hizmetlere atanabilir. Örneğin, bu yapıyı örneklemek için FreeIPA'daki varsayılan “Kullanıcı Yöneticisi” rolünü ele alalım.
|
||
|
||
`Kullanıcı Yöneticisi` rolü bu ayrıcalıklara sahiptir:
|
||
|
||
- **Kullanıcı Yöneticileri**
|
||
- **Grup Yöneticileri**
|
||
- **Aşama Kullanıcı Yöneticileri**
|
||
|
||
Aşağıdaki komutlarla roller, ayrıcalıklar ve izinler listelenebilir:
|
||
```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
|
||
```
|
||
### Saldırı Senaryosu Örneği
|
||
|
||
[https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) adresinde, alanı tehlikeye atmak için bazı izinlerin nasıl kötüye kullanılacağına dair basit bir örnek bulabilirsiniz.
|
||
|
||
### 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 kullanıcı oluşturma~~
|
||
|
||
> [!WARNING]
|
||
> Eğer **`root` adında yeni bir kullanıcı oluşturabiliyorsanız**, onun kimliğine bürünebilir ve **herhangi bir makineye root olarak SSH ile bağlanabilirsiniz.**
|
||
>
|
||
> **BU DÜZENLENMİŞTİR.**
|
||
|
||
Detaylı bir açıklamayı [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b) adresinde kontrol edebilirsiniz.
|
||
|
||
## Referanslar
|
||
|
||
- [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}}
|