# 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 %}