# 2049 - Pentesting NFS Service {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## **Informazioni di base** **NFS** è un sistema progettato per **client/server** che consente agli utenti di accedere senza problemi ai file su una rete come se questi file fossero situati all'interno di una directory locale. Un aspetto notevole di questo protocollo è la sua mancanza di **meccanismi di autenticazione** o **autorizzazione** integrati. Invece, l'autorizzazione si basa su **informazioni del file system**, con il server incaricato di tradurre accuratamente **le informazioni utente fornite dal client** nel **formato di autorizzazione** richiesto dal file system, seguendo principalmente la **sintassi UNIX**. L'autenticazione si basa comunemente su **identificatori `UID`/`GID` UNIX e appartenenze ai gruppi**. Tuttavia, sorge una sfida a causa della potenziale discrepanza nelle **mappature `UID`/`GID`** tra client e server, lasciando spazio a nessuna verifica aggiuntiva da parte del server. Di conseguenza, il protocollo è più adatto per l'uso all'interno di **reti fidate**, data la sua dipendenza da questo metodo di autenticazione. **Porta predefinita**: 2049/TCP/UDP (eccetto la versione 4, richiede solo TCP o UDP). ``` 2049/tcp open nfs 2-3 (RPC #100003 ``` ### Versioni - **NFSv2**: Questa versione è riconosciuta per la sua ampia compatibilità con vari sistemi, segnando la sua importanza con operazioni iniziali prevalentemente su UDP. Essendo la **più vecchia** della serie, ha gettato le basi per sviluppi futuri. - **NFSv3**: Introdotto con una serie di miglioramenti, NFSv3 si è ampliato rispetto al suo predecessore supportando dimensioni di file variabili e offrendo meccanismi di reporting degli errori migliorati. Nonostante i suoi progressi, ha affrontato limitazioni nella piena compatibilità retroattiva con i client NFSv2. - **NFSv4**: Una versione fondamentale nella serie NFS, NFSv4 ha portato una suite di funzionalità progettate per modernizzare la condivisione di file attraverso le reti. I miglioramenti notevoli includono l'integrazione di Kerberos per **alta sicurezza**, la capacità di attraversare firewall e operare su Internet senza la necessità di portmappers, supporto per le Liste di Controllo degli Accessi (ACL) e l'introduzione di operazioni basate sullo stato. I suoi miglioramenti delle prestazioni e l'adozione di un protocollo stateful distinguono NFSv4 come un avanzamento fondamentale nelle tecnologie di condivisione di file in rete. Ogni versione di NFS è stata sviluppata con l'intento di affrontare le esigenze in evoluzione degli ambienti di rete, migliorando progressivamente sicurezza, compatibilità e prestazioni. ## Enumerazione ### Script nmap utili ```bash nfs-ls #List NFS exports and check permissions nfs-showmount #Like showmount -e nfs-statfs #Disk statistics and info from NFS share ``` ### Moduli Metasploit utili ```bash scanner/nfs/nfsmount #Scan NFS mounts and list permissions ``` ### Mounting Per sapere **quale cartella** ha il server **disponibile** per il montaggio, puoi chiederglielo usando: ```bash showmount -e ``` Poi montalo usando: ```bash mount -t nfs [-o vers=2] : -o nolock ``` Dovresti specificare di **utilizzare la versione 2** perché non ha **alcuna** **autenticazione** o **autorizzazione**. **Esempio:** ```bash mkdir /mnt/new_back mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ``` ## Permessi Se monti una cartella che contiene **file o cartelle accessibili solo da alcuni utenti** (tramite **UID**). Puoi **creare** **localmente** un utente con quel **UID** e utilizzando quel **utente** sarai in grado di **accedere** al file/cartella. ## NSFShell Per elencare facilmente, montare e cambiare UID e GID per avere accesso ai file puoi usare [nfsshell](https://github.com/NetDirect/nfsshell). [Ottimo tutorial su NFSShell.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) ## File di configurazione ``` /etc/exports /etc/lib/nfs/etab ``` ### Impostazioni pericolose - **Permessi di Lettura e Scrittura (`rw`):** Questa impostazione consente sia la lettura che la scrittura nel file system. È essenziale considerare le implicazioni di concedere un accesso così ampio. - **Utilizzo di Porte Insicure (`insecure`):** Quando abilitato, questo consente al sistema di utilizzare porte superiori a 1024. La sicurezza delle porte al di sopra di questo intervallo può essere meno rigorosa, aumentando il rischio. - **Visibilità dei File System Annidati (`nohide`):** Questa configurazione rende visibili le directory anche se un altro file system è montato sotto una directory esportata. Ogni directory richiede la propria voce di esportazione per una gestione adeguata. - **Proprietà dei File di Root (`no_root_squash`):** Con questa impostazione, i file creati dall'utente root mantengono il loro UID/GID originale di 0, ignorando il principio del minimo privilegio e potenzialmente concedendo permessi eccessivi. - **Non Squashing di Tutti gli Utenti (`no_all_squash`):** Questa opzione garantisce che le identità degli utenti siano preservate in tutto il sistema, il che potrebbe portare a problemi di permessi e controllo degli accessi se non gestito correttamente. ## Escalation dei privilegi utilizzando le misconfigurazioni NFS [NFS no\_root\_squash e no\_all\_squash escalation dei privilegi](../linux-hardening/privilege-escalation/nfs-no\_root\_squash-misconfiguration-pe.md) ## HackTricks Comandi Automatici ``` 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.xyz/pentesting/nfs-service-pentesting Entry_2: Name: Nmap Description: Nmap with NFS Scripts Command: nmap --script=nfs-ls.nse,nfs-showmount.nse,nfs-statfs.nse -p 2049 {IP} ``` {% hint style="success" %} Impara e pratica AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Impara e pratica GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Supporta HackTricks * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)! * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
{% endhint %}