mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
187 lines
9.9 KiB
Markdown
187 lines
9.9 KiB
Markdown
# 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 <a href="#id-4b3b" id="id-4b3b"></a>
|
|
|
|
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 <username> --all
|
|
ipa usergroup-show <user group> --all
|
|
ipa host-find <host> --all
|
|
ipa hostgroup-show <host group> --all
|
|
```
|
|
> [!NOTE]
|
|
> Mtumiaji wa **admin** wa **FreeIPA** ni sawa na **domain admins** kutoka **AD**.
|
|
|
|
### Hashes <a href="#id-482b" id="id-482b"></a>
|
|
|
|
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
|
|
|
|
<figure><img src="../images/image (655).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Ili kutoa hashes unahitaji kuwa **root katika server ya FreeIPA**, hapo unaweza kutumia chombo **`dbscan`** kutoa hizo:
|
|
|
|
<figure><img src="../images/image (293).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
|
|
|
|
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 <hbacrule> --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 <sudorule> --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 <role> --all
|
|
ipa privilege-find
|
|
ipa privilege-show <privilege> --all
|
|
ipa permission-find
|
|
ipa permission-show <permission> --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}}
|