# FreeIPA Pentesting
{{#include ../banners/hacktricks-training.md}}
## Basic Information
FreeIPA ni **mbadala** wa chanzo wazi kwa Microsoft Windows **Active Directory**, hasa kwa mazingira ya **Unix**. Inachanganya **LDAP directory** kamili na Kituo cha Usambazaji wa Funguo za MIT **Kerberos** kwa usimamizi unaofanana na Active Directory. Inatumia Mfumo wa **Cheti** wa Dogtag kwa usimamizi wa vyeti vya CA & RA, inasaidia uthibitishaji wa **multi-factor**, ikiwa ni pamoja na kadi za smart. SSSD imeunganishwa kwa michakato ya uthibitishaji wa Unix.
## Fingerprints
### Files & Environment Variables
- Faili katika `/etc/krb5.conf` ndiyo mahali ambapo taarifa za mteja wa Kerberos, zinazohitajika kwa kujiandikisha katika eneo, zinahifadhiwa. Hii inajumuisha maeneo ya KDCs na seva za admin, mipangilio ya chaguo-msingi, na ramani.
- Mipangilio ya chaguo-msingi kwa wateja na seva za IPA imewekwa katika faili iliyoko `/etc/ipa/default.conf`.
- Hosts ndani ya eneo lazima iwe na faili ya `krb5.keytab` katika `/etc/krb5.keytab` kwa michakato ya uthibitishaji.
- Mabadiliko mbalimbali ya mazingira (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) yanatumika kuashiria faili maalum na mipangilio inayohusiana na uthibitishaji wa Kerberos.
### Binaries
Zana kama `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, na `kvno` ni muhimu katika kusimamia maeneo ya FreeIPA, kushughulikia tiketi za Kerberos, kubadilisha nywila, na kupata tiketi za huduma, miongoni mwa kazi nyingine.
### Network
Mchoro umeandaliwa kuonyesha usanidi wa kawaida wa seva ya FreeIPA.
## Authentication
Uthibitishaji katika FreeIPA, ukitumia **Kerberos**, unafanana na ule katika **Active Directory**. Upatikanaji wa rasilimali za eneo unahitaji tiketi halali ya Kerberos, ambayo inaweza kuhifadhiwa katika maeneo mbalimbali kulingana na usanidi wa eneo la FreeIPA.
### **CCACHE Ticket Files**
Faili za CCACHE, ambazo kawaida huhifadhiwa katika **`/tmp`** zikiwa na ruhusa **600**, ni muundo wa binary wa kuhifadhi taarifa za Kerberos, muhimu kwa uthibitishaji bila nywila ya mtumiaji ya maandiko kwa sababu ya kubebeka kwake. Kuchambua tiketi ya CCACHE kunaweza kufanywa kwa kutumia amri ya `klist`, na kutumia tena Tiketi halali ya CCACHE kunahusisha kusafirisha `KRB5CCNAME` hadi kwenye njia ya faili la tiketi.
### **Unix Keyring**
Kwa upande mwingine, Tiketi za CCACHE zinaweza kuhifadhiwa katika funguo za Linux, zikitoa udhibiti zaidi juu ya usimamizi wa tiketi. Mipaka ya uhifadhi wa tiketi inatofautiana (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), huku `klist` ikiwa na uwezo wa kuchambua taarifa hii kwa mtumiaji. Hata hivyo, kutumia tena Tiketi ya CCACHE kutoka funguo za Unix kunaweza kuleta changamoto, huku zana kama **Tickey** zikiwa zinapatikana kwa ajili ya kutoa tiketi za Kerberos.
### Keytab
Faili za keytab, zinazojumuisha wakuu wa Kerberos na funguo zilizofichwa, ni muhimu kwa kupata tiketi halali za kutoa tiketi (TGT) bila kuhitaji nywila ya mkuu. Kuchambua na kutumia tena taarifa kutoka kwa faili za keytab kunaweza kufanywa kwa urahisi kwa kutumia zana kama `klist` na skripti kama **KeytabParser**.
### Cheatsheet
Unaweza kupata maelezo zaidi kuhusu jinsi ya kutumia tiketi katika linux katika kiungo kinachofuata:
{{#ref}}
privilege-escalation/linux-active-directory.md
{{#endref}}
## Enumeration
> [!WARNING]
> Unaweza kufanya **enumeration** kupitia **ldap** na zana nyingine za **binary**, au **kuungana na ukurasa wa wavuti katika bandari 443 ya seva ya FreeIPA**.
### Hosts, Users, and Groups
Inawezekana kuunda **hosts**, **users** na **groups**. Hosts na watumiaji wamepangwa katika vyombo vinavyoitwa “**Host Groups**” na “**User Groups**” mtawalia. Hizi zinafanana na **Organizational Units** (OU).
Kwa chaguo-msingi katika FreeIPA, seva ya LDAP inaruhusu **anonymous binds**, na sehemu kubwa ya data inaweza kuhesabiwa **bila uthibitisho**. Hii inaweza kuhesabu data yote inayopatikana bila uthibitisho:
```
ldapsearch -x
```
Ili kupata **maelezo zaidi** unahitaji kutumia kikao **kilichothibitishwa** (angalia sehemu ya Uthibitishaji kujifunza jinsi ya kuandaa kikao kilichothibitishwa).
```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"
```
Kutoka kwa mashine iliyojiunga na kikoa utaweza kutumia **binaries zilizowekwa** kuhesabu kikoa:
```bash
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find
-------------------
ipa user-show --all
ipa usergroup-show --all
ipa host-find --all
ipa hostgroup-show --all
```
> [!NOTE]
> Mtumiaji wa **admin** wa **FreeIPA** ni sawa na **domain admins** kutoka **AD**.
### Hashes
Mtumiaji wa **root** kutoka kwa **IPA serve**r ana uf access kwa **hashes** za nywila.
- Hash ya nywila ya mtumiaji inahifadhiwa kama **base64** katika “**userPassword**” **attribute**. Hash hii inaweza kuwa **SSHA512** (toleo la zamani la FreeIPA) au **PBKDF2_SHA256**.
- **Nthash** ya nywila inahifadhiwa kama **base64** katika “**ipaNTHash**” ikiwa mfumo una **integration** na **AD**.
Ili kuvunja hizi hashes:
• Ikiwa freeIPA imeunganishwa na AD, **ipaNTHash** ni rahisi kuvunja: Unapaswa **decode** **base64** -> re-encoded kama **ASCII** hex -> John The Ripper au **hashcat** inaweza kukusaidia kuivunja haraka
• Ikiwa toleo la zamani la FreeIPA linatumika, basi **SSHA512** inatumika: Unapaswa decode **base64** -> pata SSHA512 **hash** -> John The Ripper au **hashcat** inaweza kukusaidia kuivunja
• Ikiwa toleo jipya la FreeIPA linatumika, basi **PBKDF2_SHA256** inatumika: Unapaswa decode **base64** -> pata PBKDF2_SHA256 -> **urefu** wake ni 256 byte. John anaweza kufanya kazi na 256 bits (32 byte) -> SHA-265 inatumika kama kazi ya pseudo-random, saizi ya block ni 32 byte -> unaweza kutumia tu bits 256 za kwanza za hash yetu ya PBKDF2_SHA256 -> John The Ripper au hashcat inaweza kukusaidia kuivunja
Ili kutoa hashes unahitaji kuwa **root katika server ya FreeIPA**, hapo unaweza kutumia chombo **`dbscan`** kutoa hizo:
### HBAC-Rules
Kuna sheria ambazo zinatoa ruhusa maalum kwa watumiaji au mwenyeji juu ya rasilimali (wenyeji, huduma, vikundi vya huduma...)
```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 --all
```
#### Sudo-Rules
FreeIPA inaruhusu udhibiti wa kati juu ya **sudo permissions** kupitia sudo-rules. Sheria hizi zinaruhusu au kuzuia utekelezaji wa amri kwa kutumia sudo kwenye mwenyeji ndani ya eneo. Mshambuliaji anaweza kutambua wenyeji, watumiaji, na amri zinazoruhusiwa kwa kuchunguza seti hizi za sheria.
```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 --all
```
### Udhibiti wa Ufikiaji Kulingana na Majukumu
**Jukumu** linajumuisha **privileges** mbalimbali, kila moja ikiwa na mkusanyiko wa **permissions**. Majukumu haya yanaweza kutolewa kwa Watumiaji, Makundi ya Watumiaji, **Hosts**, Makundi ya Hosts, na Huduma. Kwa mfano, fikiria jukumu la “Msimamizi wa Mtumiaji” la default katika FreeIPA ili kuonyesha muundo huu.
Jukumu la `Msimamizi wa Mtumiaji` lina **privileges** hizi:
- **Misimamizi wa Watumiaji**
- **Misimamizi wa Makundi**
- **Misimamizi wa Watumiaji wa Jukwaa**
Kwa amri zifuatazo, inawezekana kuhesabu majukumu, privileges na permissions:
```bash
# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show --all
ipa privilege-find
ipa privilege-show --all
ipa permission-find
ipa permission-show --all
```
### Mfano wa Hali ya Shambulio
Katika [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) unaweza kupata mfano rahisi wa jinsi ya kutumia ruhusa fulani kuathiri eneo.
### 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
### ~~kuunda mtumiaji wa root~~
> [!WARNING]
> Ikiwa unaweza **kuunda mtumiaji mpya kwa jina `root`**, unaweza kujifanya kuwa yeye na utaweza **SSH kwenye mashine yoyote kama root.**
>
> **HII IMEPATWA.**
Unaweza kuangalia maelezo ya kina katika [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
## Marejeleo
- [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}}