mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
181 lines
11 KiB
Markdown
181 lines
11 KiB
Markdown
# 2049 - Pentesting NFS Service
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## **Msingi wa Taarifa**
|
||
|
||
**NFS** ni mfumo ulioandaliwa kwa ajili ya **mteja/server** ambao unawawezesha watumiaji kufikia faili kwa urahisi kupitia mtandao kana kwamba faili hizi ziko ndani ya saraka ya ndani.
|
||
|
||
**Bandari ya Kawaida**: 2049/TCP/UDP (isipokuwa toleo la 4, inahitaji tu TCP au UDP).
|
||
```
|
||
2049/tcp open nfs 2-3 (RPC #100003
|
||
```
|
||
### Authentication
|
||
|
||
Sifa inayojulikana ya itifaki hii ni ukosefu wa kawaida wa **authentication** au **authorization mechanisms** zilizojengwa ndani. Badala yake, mamlaka inategemea **habari za mfumo wa faili**, ambapo seva inawajibika kwa kutafsiri kwa usahihi **habari za mtumiaji zinazotolewa na mteja** katika **muundo wa mamlaka** unaohitajika na mfumo wa faili, hasa ikifuatilia **UNIX syntax**.
|
||
|
||
Authentication kwa kawaida inategemea **UNIX `UID`/`GID` identifiers na uanachama wa vikundi**. Hata hivyo, changamoto inatokea kutokana na uwezekano wa kutofautiana katika **`UID`/`GID` mappings** kati ya wateja na seva, na kuacha nafasi yoyote ya uthibitisho wa ziada na seva. Zaidi ya hayo, maelezo haya yanatumwa na mteja na kuaminika na seva, hivyo mteja mbaya anaweza kuweza **kujifanya kuwa mtumiaji mwingine akituma `uid` na `gid` zenye mamlaka zaidi**.
|
||
|
||
**Hata hivyo, kumbuka kwamba kwa kawaida haiwezekani kujifanya kuwa `UID` 0 (root) kwa kutumia NFS. Zaidi kuhusu hii katika sehemu ya squashing.**
|
||
|
||
#### Hosts
|
||
|
||
Kwa mamlaka bora (au baadhi) unaweza kubainisha **hosts** ambazo zinaweza kufikia NFS share. Hii inaweza kufanywa katika faili ya Linux `/etc/exports`. Kwa mfano:
|
||
```
|
||
/PATH/TO/EXPORT CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ...
|
||
/media/disk/share 192.168.2.123(rw,sec=krb5p:krb5i)
|
||
```
|
||
As you can see, it allows to configure a specific **IP** or **hostname** to access the share. Only that address will be able to access the share.
|
||
|
||
### Versions
|
||
|
||
- **NFSv2**: Toleo hili linatambulika kwa ufanisi wake mpana na mifumo mbalimbali, likionyesha umuhimu wake katika operesheni za awali hasa juu ya UDP. Kwa kuwa ni **ya zamani** katika mfululizo, ilianzisha msingi wa maendeleo ya baadaye.
|
||
|
||
- **NFSv3**: Ilianzishwa kwa mabadiliko mbalimbali, NFSv3 ilipanua juu ya mtangulizi wake kwa kusaidia ukubwa wa faili tofauti na kutoa mifumo bora ya kuripoti makosa. Licha ya maendeleo yake, ilikabiliwa na vikwazo katika ufanisi wa kurudi nyuma kwa wateja wa NFSv2.
|
||
|
||
- **NFSv4**: Toleo muhimu katika mfululizo wa NFS, NFSv4 ilileta seti ya vipengele vilivyoundwa kuboresha ushirikiano wa faili katika mitandao. Maboresho makubwa ni pamoja na ujumuishaji wa Kerberos kwa **usalama wa juu**, uwezo wa kupita moto na kufanya kazi juu ya Mtandao bila haja ya portmappers, msaada wa Orodha za Udhibiti wa Ufikiaji (ACLs), na kuanzishwa kwa operesheni za msingi wa hali. Maboresho yake ya utendaji na kupitishwa kwa itifaki ya hali inafanya NFSv4 kuwa maendeleo muhimu katika teknolojia za ushirikiano wa faili mtandaoni.
|
||
- Kumbuka kwamba ni ajabu sana kupata mwenyeji wa Linux NFS ukisaidia uthibitishaji wa kerberos.
|
||
|
||
Kila toleo la NFS limeandaliwa kwa nia ya kukabiliana na mahitaji yanayobadilika ya mazingira ya mtandao, ikiongeza usalama, ufanisi, na utendaji.
|
||
|
||
### Squashing
|
||
|
||
Kama ilivyotajwa hapo awali, NFS kwa kawaida itategemea `uid` na `gid` za mteja ili kufikia faili (ikiwa kerberos haitumiki). Hata hivyo, kuna baadhi ya mipangilio ambayo inaweza kuwekwa kwenye seva ili **kubadilisha tabia hii**:
|
||
|
||
- **all_squash**: Inakandamiza ufikiaji wote ikitafsiri kila mtumiaji na kundi kuwa **`nobody`** (65534 unsigned / -2 signed). Hivyo, kila mtu ni `nobody` na hakuna watumiaji wanaotumika.
|
||
- **root_squash/no_all_squash**: Hii ni ya kawaida kwenye Linux na **inakanusha ufikiaji tu na uid 0 (root)**. Hivyo, `UID` na `GID` yoyote inatambulika lakini `0` inakandamizwa kuwa `nobody` (hivyo hakuna uigaji wa root unaowezekana).
|
||
- **no_root_squash**: Mipangilio hii ikiwa imewezeshwa haikandamizi hata mtumiaji wa root. Hii inamaanisha kwamba ikiwa unakandamiza saraka na mipangilio hii unaweza kuifikia kama root.
|
||
|
||
### Subtree check
|
||
|
||
Inapatikana tu kwenye Linux. man(5) exports inasema: "Ikiwa saraka ndogo ya mfumo wa faili inasafirishwa, lakini mfumo mzima wa faili haujasafirishwa, basi kila wakati ombi la NFS linapofika, seva lazima ikague si tu kwamba faili inayofikiwa iko katika mfumo wa faili unaofaa (ambayo ni rahisi) bali pia kwamba iko katika mti wa kusafirishwa (ambayo ni ngumu zaidi). Ukaguzi huu unaitwa ukaguzi wa subtree."
|
||
|
||
Katika Linux **kipengele cha `subtree_check` kimezimwa** kwa kawaida.
|
||
|
||
## Enumeration
|
||
|
||
### Showmount
|
||
|
||
Hii inaweza kutumika ili **kupata taarifa kutoka kwa seva ya NFSv3**, kama orodha ya **exports**, nani anayeruhusiwa **kufikia** hizi exports, na wateja gani wameunganishwa (ambayo inaweza kuwa si sahihi ikiwa mteja anajitenga bila kumwambia seva).
|
||
Katika **wateja wa NFSv4 wanapata moja kwa moja /export** na kujaribu kufikia exports kutoka hapo, wakishindwa ikiwa ni batili au isiyoidhinishwa kwa sababu yoyote.
|
||
|
||
Ikiwa zana kama `showmount` au moduli za Metasploit hazionyeshi taarifa kutoka kwa bandari ya NFS, huenda ni seva ya NFSv4 ambayo haisaidii toleo la 3.
|
||
```bash
|
||
showmount -e <IP>
|
||
```
|
||
### Maneno muhimu ya nmap
|
||
```bash
|
||
nfs-ls #List NFS exports and check permissions
|
||
nfs-showmount #Like showmount -e
|
||
nfs-statfs #Disk statistics and info from NFS share
|
||
```
|
||
### Moduli muhimu ya metasploit
|
||
```bash
|
||
scanner/nfs/nfsmount #Scan NFS mounts and list permissions
|
||
```
|
||
### nfs_analyze
|
||
|
||
Chombo hiki kutoka [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) kinaweza kutumika kupata data nyingi kutoka kwa seva ya NFS kama **mounts**, toleo za NFS zinazoungwa mkono, IP zilizounganishwa, na hata kama inawezekana **kutoroka kutoka kwa exports** kwenda kwa folda nyingine katika FS au **kama `no_root_squash` imewezeshwa**.
|
||
|
||
## Mounting
|
||
|
||
Ili kujua **ni folda ipi** ambayo seva ina **inapatikana** kwa ajili ya kukupatia, unaweza kuomba kwa kutumia:
|
||
```bash
|
||
showmount -e <IP>
|
||
```
|
||
Kisha pandisha kwa kutumia:
|
||
```bash
|
||
mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock
|
||
```
|
||
Unapaswa kubainisha **tumia toleo la 2** kwa sababu halina **uthibitishaji** au **idhinishaji** yoyote.
|
||
|
||
**Mfano:**
|
||
```bash
|
||
mkdir /mnt/new_back
|
||
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
|
||
```
|
||
## Mashambulizi
|
||
|
||
### Kuamini UID na GID
|
||
|
||
Kwa kweli, tatizo pekee hapa ni kwamba kwa kawaida haiwezekani kujifanya kuwa root (`UID` 0). Hata hivyo, inawezekana kujifanya kuwa mtumiaji mwingine yeyote au ikiwa `no_root_squash` imewezeshwa unaweza pia kujifanya kuwa root.
|
||
|
||
- Ikiwa unakata folder ambayo ina **faili au folda zinazopatikana tu na mtumiaji fulani** (kwa **UID**). Unaweza **kuunda** **katika** **mitaa** mtumiaji mwenye **UID** hiyo na kwa kutumia **mtumiaji** huyo utaweza **kufikia** faili/folda hiyo.
|
||
- Chombo **`fuse_nfs`** kutoka [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) kitaweza kutuma kila wakati UID na GID zinazohitajika kufikia faili.
|
||
|
||
### Kuinua Privilege ya SUID
|
||
|
||
Angalia ukurasa:
|
||
|
||
{{#ref}}
|
||
../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
|
||
{{#endref}}
|
||
|
||
### Kutoroka kutoka kwa exports
|
||
|
||
Katika [makala hii nzuri](https://www.hvs-consulting.de/en/nfs-security-identifying-and-exploiting-misconfigurations/) inawezekana kuona kwamba inawezekana **kutoroka kutoka kwa exports ili kufikia folda nyingine katika FS**.
|
||
|
||
Hivyo, ikiwa export inasafirisha folda ambayo ni **subfolder** ya **faili nzima ya mfumo** inawezekana kufikia faili nje ya export ikiwa **`subtree_check`** imezimwa. Na ime **zimwa kwa kawaida katika Linux**.
|
||
|
||
Kwa mfano, ikiwa seva ya NFS inasafirisha `/srv/` na `/var/` iko katika mfumo huo huo wa faili, inawezekana kusoma logi kutoka `/var/log/` au kuhifadhi webshell katika `/var/www/`.
|
||
|
||
Zaidi ya hayo, kumbuka kwamba kwa kawaida mtumiaji tu wa root (0) anapojulikana kuwa na ulinzi dhidi ya kujifananisha (angalia sehemu ya Squash). Hata hivyo, ikiwa faili ni **miliki ya root lakini kundi si 0, inawezekana kufikia hiyo**. Kwa mfano, faili `/etc/shadow` inamilikiwa na root lakini kundi ni `shadow` (gid 42 kwenye Debian). Hivyo, inawezekana kuisoma kwa kawaida!
|
||
|
||
Chombo **`nfs_analyze`** kutoka [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) kimejengwa kusaidia shambulio hili dhidi ya mifumo ya faili ext4, xfs, btrfs katika toleo la 3 (inapaswa pia kuwa inawezekana katika v4).
|
||
|
||
### NSFShell
|
||
|
||
Ili orodhesha kwa urahisi, kuunganisha na kubadilisha UID na GID ili kuwa na ufikiaji wa faili unaweza kutumia [nfsshell](https://github.com/NetDirect/nfsshell).
|
||
|
||
[Mafunzo mazuri ya NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)
|
||
|
||
## Faili za Config
|
||
```
|
||
/etc/exports
|
||
/etc/lib/nfs/etab
|
||
```
|
||
## Dangerous settings
|
||
|
||
- **Read and Write Permissions (`rw`):** Mipangilio hii inaruhusu kusoma na kuandika kwenye mfumo wa faili. Ni muhimu kuzingatia athari za kutoa ufikiaji mpana kama huu.
|
||
|
||
- **Use of Insecure Ports (`insecure`):** Wakati imewezeshwa, hii inaruhusu mfumo kutumia bandari zilizo juu ya 1024. Usalama wa bandari zilizo juu ya kiwango hiki unaweza kuwa dhaifu, kuongeza hatari.
|
||
|
||
- **Visibility of Nested File Systems (`nohide`):** Mipangilio hii inafanya saraka kuonekana hata kama mfumo mwingine wa faili umewekwa chini ya saraka iliyosambazwa. Kila saraka inahitaji kuingia kwake mwenyewe kwa usimamizi sahihi.
|
||
|
||
- **Root Files Ownership (`no_root_squash`):** Kwa mipangilio hii, faili zinazoundwa na mtumiaji wa root zinahifadhi UID/GID yao ya awali ya 0, bila kuzingatia kanuni ya haki ndogo na huenda ikatoa ruhusa nyingi.
|
||
|
||
- **Non-Squashing of All Users (`no_all_squash`):** Chaguo hili linahakikisha kwamba vitambulisho vya watumiaji vinahifadhiwa katika mfumo mzima, ambayo inaweza kusababisha matatizo ya ruhusa na udhibiti wa ufikiaji ikiwa haitashughulikiwa ipasavyo.
|
||
|
||
## Privilege Escalation using NFS misconfigurations
|
||
|
||
[NFS no_root_squash and no_all_squash privilege escalation](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md)
|
||
|
||
## HackTricks Automatic Commands
|
||
```
|
||
Protocol_Name: NFS #Protocol Abbreviation if there is one.
|
||
Port_Number: 2049 #Comma separated if there is more than one.
|
||
Protocol_Description: Network File System #Protocol Abbreviation Spelled out
|
||
|
||
Entry_1:
|
||
Name: Notes
|
||
Description: Notes for NFS
|
||
Note: |
|
||
NFS is a system designed for client/server that enables users to seamlessly access files over a network as though these files were located within a local directory.
|
||
|
||
#apt install nfs-common
|
||
showmount 10.10.10.180 ~or~showmount -e 10.10.10.180
|
||
should show you available shares (example /home)
|
||
|
||
mount -t nfs -o ver=2 10.10.10.180:/home /mnt/
|
||
cd /mnt
|
||
nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in
|
||
|
||
https://book.hacktricks.wiki/en/network-services-pentesting/nfs-service-pentesting.html
|
||
|
||
Entry_2:
|
||
Name: Nmap
|
||
Description: Nmap with NFS Scripts
|
||
Command: nmap --script=nfs-ls.nse,nfs-showmount.nse,nfs-statfs.nse -p 2049 {IP}
|
||
```
|
||
{{#include ../banners/hacktricks-training.md}}
|