mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
212 lines
13 KiB
Markdown
212 lines
13 KiB
Markdown
# FreeIPA Pentesting
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hackleme becerilerinizi sıfırdan kahraman seviyesine kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile</strong>!</summary>
|
||
|
||
HackTricks'ı desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)'ı **takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek** paylaşın.
|
||
|
||
</details>
|
||
|
||
## Temel Bilgiler
|
||
|
||
FreeIPA, öncelikle **Unix** ortamları için Microsoft Windows **Active Directory**'ye bir açık kaynaklı **alternatif**tir. Active Directory'ye benzer şekilde, yönetim için bir MIT **Kerberos** Anahtar Dağıtım Merkezi ile birlikte tam bir **LDAP dizini** birleştirir. CA ve RA sertifika yönetimi için Dogtag **Certificate System** kullanarak, akıllı kartlar da dahil olmak üzere **çok faktörlü** kimlik doğrulama 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ı, etki alanına kaydolmak için gereken Kerberos istemci bilgilerini depolayan yerdir. 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 genelinde varsayılanlar, `/etc/ipa/default.conf` konumunda bulunan dosyada ayarlanır.
|
||
- Etki alanındaki ana bilgisayarlar, kimlik doğrulama süreçleri için `/etc/krb5.keytab` konumunda bir `krb5.keytab` dosyasına sahip olmalıdır.
|
||
- Çeşitli ortam değişkenleri (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`), Kerberos kimlik doğrulamasıyla ilgili belirli dosyalara ve ayarlara işaret etmek için kullanılır.
|
||
|
||
### İkili Dosyalar
|
||
|
||
`ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` ve `kvno` gibi araçlar, FreeIPA etki alanlarını yönetme, Kerberos biletleriyle ilgili işlemler yapma, şifreleri değiştirme ve hizmet biletleri alma gibi işlevlerde merkezi bir rol oynar.
|
||
|
||
### Ağ
|
||
|
||
Tipik bir FreeIPA sunucusu kurulumunu göstermek için bir görsel sağlanmaktadır.
|
||
|
||
## Kimlik Doğrulama
|
||
|
||
FreeIPA'da **Kerberos** kullanarak kimlik doğrulama, **Active Directory** ile benzerlik gösterir. Etki alanı kaynaklarına erişim için geçerli bir Kerberos bileti gereklidir ve bu bilet, FreeIPA etki alanı yapılandırmasına bağlı olarak çeşitli konumlarda depolanabilir.
|
||
|
||
### **CCACHE Bilet Dosyaları**
|
||
|
||
CCACHE dosyaları, taşınabilirlikleri nedeniyle kullanıcının düz metin parolası olmadan kimlik doğrulama için önemli olan Kerberos kimlik bilgilerini depolamak için kullanılan **`/tmp`** gibi genellikle **600** izinli ikili formatlardır. Bir CCACHE bileti ayrıştırmak için `klist` komutu kullanılabilir ve geçerli bir CCACHE Biletini yeniden kullanmak için `KRB5CCNAME`'i bilet dosyasının yoluna ihraç etmek gereklidir.
|
||
|
||
### **Unix Anahtar Halkası**
|
||
|
||
Alternatif olarak, CCACHE Biletleri Linux anahtar halkasında depolanabilir ve bu, bilet yönetimi konusunda daha fazla kontrol sağlar. Bilet depolama kapsamı değişir (`KEYRING:ad`, `KEYRING:süreç:ad`, `KEYRING:iş parçacığı:ad`, `KEYRING:oturum:ad`, `KEYRING:kalıcı:uidnumarası`) ve kullanıcı için bu bilgileri ayrıştırmak için `klist` kullanılabilir. Bununla birlikte, Unix anahtar halkasından bir CCACHE Biletini yeniden kullanmak zorluklar yaratabilir ve Kerberos biletlerini çıkarmak için **Tickey** gibi araçlar mevcuttur.
|
||
|
||
### Keytab
|
||
|
||
Kerberos prensiplerini ve şifrelenmiş anahtarları içeren keytab dosyaları, prensibin parolasına ihtiyaç duymadan geçerli bir bilet alma işlemi için kritiktir. Keytab dosyalarından kimlik bilgilerini ayrıştırmak ve yeniden kullanmak, `klist` gibi yardımcı programlar ve **KeytabParser** gibi betiklerle kolayca gerçekleştirilebilir.
|
||
|
||
### Hile Kağıdı
|
||
|
||
Linux'ta biletleri nasıl kullanacağınız hakkında daha fazla bilgiyi aşağıdaki bağlantıda bulabilirsiniz:
|
||
|
||
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
|
||
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
|
||
{% endcontent-ref %}
|
||
|
||
## Numaralandırma
|
||
|
||
{% hint style="warning" %}
|
||
Numaralandırmayı **ldap** ve diğer **ikili** araçlar aracılığıyla veya FreeIPA sunucusunun **443 numaralı bağlantı noktasına** bağlanarak gerçekleştirebilirsiniz.
|
||
{% endhint %}
|
||
|
||
### Ana Bilgisayarlar, Kullanıcılar ve Gruplar <a href="#4b3b" 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ı" adı verilen konteynerlara yerleştirilir. Bunlar, **Organizasyon Birimleri** (OU) ile benzerdir.
|
||
|
||
FreeIPA'da, LDAP sunucusu varsayılan olarak **anonim bağlantılara** izin verir ve **kimlik doğrulama yapılmadan** büyük bir veri yelpazesi numaralandırılabilir. Bu, kimlik doğrulamasız olarak mevcut olan tüm verileri numaralandırabilir:
|
||
```
|
||
ldapsearch -x
|
||
```
|
||
Daha fazla bilgi almak için bir **kimlik doğrulama** oturumu kullanmanız gerekmektedir (bir kimlik doğrulama oturumu nasıl hazırlanacağını öğrenmek 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 etki alanına katılmış bir makineden, etki alanını sıralamak için **kurulu ikili dosyaları** kullanabilirsiniz:
|
||
```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" %}
|
||
**FreeIPA**'nın **admin** kullanıcısı, **AD**'deki **domain adminleri**ne eşdeğerdir.
|
||
{% endhint %}
|
||
|
||
### Hashler <a href="#482b" id="482b"></a>
|
||
|
||
**IPA sunucusu**ndaki **root** kullanıcısı, şifre **hash'lerine** erişebilir.
|
||
|
||
- Bir kullanıcının şifre hash'i "userPassword" **özniteliğinde** **base64** olarak saklanır. Bu hash, **SSHA512** (eski FreeIPA sürümleri) veya **PBKDF2\_SHA256** olabilir.
|
||
- Şifrenin **Nthash**i, sistem **AD** ile **entegre** ise "ipaNTHash" olarak **base64** olarak saklanır.
|
||
|
||
Bu hash'leri kırmak için:
|
||
|
||
- FreeIPA AD ile entegre ise, **ipaNTHash** kolayca kırılabilir: **Base64**'ü **çözümle** -> ASCII hex olarak **yeniden kodla** -> John The Ripper veya **hashcat** hızlıca kırmanıza yardımcı olabilir.
|
||
|
||
- Eski bir FreeIPA sürümü kullanılıyorsa, **SSHA512** kullanılır: **Base64**'ü **çözümle** -> SSHA512 **hash'ini** bul -> 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**'ü **çözümle** -> PBKDF2\_SHA256'yı bul -> uzunluğu 256 bayttır. John, 256 bit (32 bayt) ile çalışabilir -> Pseudo-rastgele işlev olarak SHA-265 kullanılır, blok boyutu 32 bayttır -> PBKDF2\_SHA256 hash'inin sadece ilk 256 bitini kullanabilirsiniz -> John The Ripper veya hashcat kırmanıza yardımcı olabilir.
|
||
|
||
<figure><img src="../.gitbook/assets/image (33).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
Hash'leri çıkarmak için **FreeIPA sunucusunda root** olmanız gerekmektedir, burada **`dbscan`** aracını kullanarak bunları çıkarabilirsiniz:
|
||
|
||
<figure><img src="../.gitbook/assets/image (196).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
### HBAC-Kuralları <a href="#482b" id="482b"></a>
|
||
|
||
Bu kurallar, kullanıcılara veya kaynaklara (sunucular, hizmetler, hizmet grupları...) 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-Kuralları
|
||
|
||
FreeIPA, sudo-kuralları aracılığıyla merkezi kontrol sağlayarak **sudo izinlerini** etkinleştirir. Bu kurallar, etki alanı içindeki ana bilgisayarlarda sudo ile komutların yürütülmesini izin verir veya sınırlar. Bir saldırgan, bu kuralları inceleyerek ilgili ana bilgisayarları, kullanıcıları ve izin verilen komutları tespit edebilir.
|
||
```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çeren bir dizi **izin**i kapsar. Bu roller, Kullanıcılara, Kullanıcı **Gruplarına**, **Sunuculara**, Sunucu Gruplarına ve Hizmetlere atanabilir. Örneğin, bu yapıyı açıklamak için FreeIPA'daki varsayılan "Kullanıcı Yöneticisi" rolünü düşünelim.
|
||
|
||
`Kullanıcı Yöneticisi` rolü şu ayrıcalıklara sahiptir:
|
||
|
||
* **Kullanıcı Yöneticileri**
|
||
* **Grup Yöneticileri**
|
||
* **Aşama Kullanıcı Yöneticileri**
|
||
|
||
Aşağıdaki komutlarla rolleri, ayrıcalıkları ve izinleri sıralamak mümkündür:
|
||
```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ı Senaryo Ö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, bir alanı tehlikeye atmak için bazı izinleri kötüye nasıl kullanacağınızın basit bir örneğini 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)
|
||
|
||
## Privilege Escalation (Privesc)
|
||
|
||
### ~~root kullanıcısı oluşturma~~
|
||
|
||
{% hint style="warning" %}
|
||
Eğer **`root`** adında yeni bir kullanıcı oluşturabilirseniz, onun yerine geçebilir ve herhangi bir makineye **root olarak SSH** ile bağlanabilirsiniz.
|
||
|
||
**BU DÜZELTİLDİ.**
|
||
{% endhint %}
|
||
|
||
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 bulabilirsiniz.
|
||
|
||
## 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)
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hackleme konusunda sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>'ı öğrenin!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **tanıtmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** takip edin.**
|
||
* Hacking hilelerinizi [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek paylaşın.
|
||
|
||
</details>
|