2049 - Pentesting NFS Service
Reading time: 10 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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 ninobody
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
naGID
yoyote inatambulika lakini0
inakandamizwa kuwanobody
(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.
showmount -e <IP>
Maneno muhimu ya nmap
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
scanner/nfs/nfsmount #Scan NFS mounts and list permissions
nfs_analyze
Chombo hiki kutoka 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:
showmount -e <IP>
Kisha pandisha kwa kutumia:
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:
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 kitaweza kutuma kila wakati UID na GID zinazohitajika kufikia faili.
Kuinua Privilege ya SUID
Angalia ukurasa:
NFS no_root_squash/no_all_squash misconfiguration PE
Kutoroka kutoka kwa exports
Katika makala hii nzuri 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 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.
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
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}
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.