NFS (Network File System)

🧠 Introduction

Le Network File System (NFS) est un protocole développé par Sun Microsystems permettant d'accéder à des systÚmes de fichiers distants comme s'ils étaient locaux. NFS est principalement utilisé dans les environnements Linux/Unix et ne peut pas communiquer directement avec des serveurs SMB. Il repose sur le protocole ONC-RPC/SUN-RPC, exposé sur les ports TCP/UDP 111, et utilise XDR pour garantir l'interopérabilité entre systÚmes.

đŸ§± Versions du protocole

Version
Fonctionnalités principales

NFSv2

Fonctionne sur UDP, support étendu mais ancien.

NFSv3

Supporte fichiers de tailles variables, meilleurs rapports d'erreurs.

NFSv4

Authentification par utilisateur (Kerberos), support des ACLs, fonctionnement via firewall, opérations avec état, port unique 2049 TCP.

NFSv4.1

Support du multipathing (session trunking) et de l'accÚs parallÚle distribué (pNFS).

🔐 Authentification & SĂ©curitĂ©

NFS ne dispose pas de mĂ©canisme propre d'authentification. Il dĂ©lĂšgue cela Ă  RPC (ONC-RPC). L'autorisation repose sur les UID/GID UNIX. Cela suppose que le client et le serveur partagent les mĂȘmes mappages UID/GID, faute de quoi des incohĂ©rences d'accĂšs peuvent apparaĂźtre.

NFS est donc recommandé uniquement dans des réseaux de confiance.

⚙ Configuration par dĂ©faut

La configuration se fait via le fichier /etc/exports. Chaque ligne y indique :

  • Le rĂ©pertoire exportĂ©

  • Les hĂŽtes autorisĂ©s

  • Les options d'accĂšs

Exemple :

/mnt/nfs 10.129.14.0/24(sync,no_subtree_check)

Options courantes :

Option
Description

rw

Lecture/écriture

ro

Lecture seule

sync

Écriture synchronisĂ©e (plus sĂ»r mais plus lent)

async

Écriture asynchrone

secure

N'utilise que les ports < 1024

insecure

Autorise les ports > 1024 (dangereux)

no_subtree_check

Ne vérifie pas la hiérarchie interne des dossiers

root_squash

EmpĂȘche root d'avoir les droits root sur le montage

⚠ ParamĂštres Ă  risque

Option
Description

rw

Risque d'écriture malveillante si non contrÎlée

insecure

Expose le service à des ports non privilégiés

nohide

Affiche les montages sous-jacents (potentielle fuite de données)

no_root_squash

Donne les droits root aux clients (extrĂȘmement dangereux)

đŸ§Ș Commandes pratiques

🔧 Exporter un rĂ©pertoire

echo '/mnt/nfs 10.129.14.0/24(sync,no_subtree_check)' >> /etc/exports
systemctl restart nfs-kernel-server
exportfs

📰 Scanner le service avec Nmap

nmap -p111,2049 -sV -sC <IP CIBLE>
nmap --script nfs* -p111,2049 <IP CIBLE>

🔍 Lister les partages

showmount -e <IP CIBLE>

📁 Monter un partage NFS

mkdir target-NFS
sudo mount -t nfs <IP CIBLE>:/ ./target-NFS/ -o nolock

🌐 Visualiser droits et propriĂ©taires

ls -l mnt/nfs/   # Avec noms
ls -n mnt/nfs/   # Avec UID/GID

❌ DĂ©monter le partage

cd ..
sudo umount ./target-NFS

🔐 Escalade potentielle

Une mauvaise configuration (ex: no_root_squash) permet d'utiliser NFS pour copier des fichiers avec des droits Ă©levĂ©s, injecter des scripts SUID ou exĂ©cuter des binaires sensibles. Le mapping UID/GID peut aussi ĂȘtre exploitĂ© si les identifiants du serveur sont rĂ©pliquĂ©s localement.

📚 Ressources utiles


Enumerate the NFS service and submit the contents of the flag.txt in the "nfs" share as the answer.

$ showmount -e aca.htb
Export list for aca.htb:
/var/nfs      10.0.0.0/8
/mnt/nfsshare 10.0.0.0/8

Ici, nous allons devoir récupérer le contenu de /var/nfs :

$ sudo mount -t nfs 10.129.120.130:/var/nfs ./target-NFS/ -o nolock

$ ls target-NFS/
flag.txt

$ cat target-NFS/flag.txt 
HTB{hjglmvtkjhlkfuhgi734zthrie7rjmdze}

Maintenant le fichier récupéré, nous observons son contenu et observons le FLAG associé :

HTB{hjglmvtkjhlkfuhgi734zthrie7rjmdze}

Enumerate the NFS service and submit the contents of the flag.txt in the "nfsshare" share as the answer.

Afin d'obtenir le flag de nfsshare, nous devons en premier lieu unmount le précédent dossier :

$ sudo umount target-NFS 

Ensuite, nous rĂ©alisons les mĂȘme Ă©tapes que prĂ©cĂ©demment :

$ sudo mount -t nfs 10.129.120.130:/mnt/nfsshare ./target-NFS/ -o nolock┌─[eu-academy-1]─[10.10.14.141]─[htb-ac-1811357@htb-t6qemtokxr]─[~]

$ cat target-NFS/flag.txt 
HTB{8o7435zhtuih7fztdrzuhdhkfjcn7ghi4357ndcthzuc7rtfghu34}

Nous obtenons ainsi le contenu du fichier flag.txt dans nfsshare :

HTB{8o7435zhtuih7fztdrzuhdhkfjcn7ghi4357ndcthzuc7rtfghu34}

Mis Ă  jour