2049 - Pentesting NFS Service

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Informations de base

NFS est un système conçu pour le client/serveur qui permet aux utilisateurs d'accéder de manière transparente aux fichiers sur un réseau comme s'ils se trouvaient dans un répertoire local.

Un aspect notable de ce protocole est son absence de mécanismes intégrés d'authentification ou d'autorisation. Au lieu de cela, l'autorisation repose sur les informations du système de fichiers, le serveur étant chargé de traduire avec précision les informations utilisateur fournies par le client dans le format d'autorisation requis du système de fichiers, suivant principalement la syntaxe UNIX.

L'authentification repose généralement sur les identifiants UNIX UID/GID et les appartenances aux groupes. Cependant, un défi se pose en raison du potentiel de divergence dans les correspondances UID/GID entre les clients et les serveurs, ne laissant aucune place à une vérification supplémentaire par le serveur. Par conséquent, le protocole est le mieux adapté à une utilisation au sein de réseaux de confiance, étant donné sa dépendance à cette méthode d'authentification.

Port par défaut: 2049/TCP/UDP (sauf la version 4, qui nécessite uniquement TCP ou UDP).

2049/tcp open  nfs     2-3 (RPC #100003

Versions

  • NFSv2: Cette version est reconnue pour sa large compatibilité avec divers systèmes, marquant son importance avec des opérations initiales principalement sur UDP. Étant la plus ancienne de la série, elle a posé les bases pour les développements futurs.

  • NFSv3: Introduite avec une série d'améliorations, NFSv3 a étendu son prédécesseur en prenant en charge des tailles de fichiers variables et en offrant des mécanismes améliorés de notification d'erreurs. Malgré ses avancées, elle a rencontré des limitations en termes de compatibilité ascendante complète avec les clients NFSv2.

  • NFSv4: Version phare de la série NFS, NFSv4 a apporté une série de fonctionnalités conçues pour moderniser le partage de fichiers à travers les réseaux. Les améliorations notables incluent l'intégration de Kerberos pour une sécurité élevée, la capacité de traverser les pare-feu et de fonctionner sur Internet sans avoir besoin de mappages de ports, le support des listes de contrôle d'accès (ACL), et l'introduction d'opérations basées sur l'état. Ses améliorations de performances et l'adoption d'un protocole étatique distinguent NFSv4 comme une avancée capitale dans les technologies de partage de fichiers en réseau.

Chaque version de NFS a été développée dans le but de répondre aux besoins évolutifs des environnements réseau, améliorant progressivement la sécurité, la compatibilité et les performances.

Énumération

Scripts nmap utiles

nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share

Modules Metasploit utiles

scanner/nfs/nfsmount #Scan NFS mounts and list permissions

Montage

Pour savoir quel dossier le serveur a disponible pour le montage, vous pouvez le demander en utilisant :

showmount -e <IP>

Ensuite, montez-le en utilisant :

mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock

Vous devriez spécifier d'utiliser la version 2 car elle n'a aucune authentification ou autorisation.

Exemple:

mkdir /mnt/new_back
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock

Permissions

Si vous montez un dossier qui contient des fichiers ou dossiers accessibles uniquement par un utilisateur (par UID). Vous pouvez créer localement un utilisateur avec cet UID et en utilisant cet utilisateur, vous pourrez accéder au fichier/dossier.

NSFShell

Pour lister, monter et changer l'UID et le GID pour avoir accès aux fichiers, vous pouvez utiliser nfsshell.

Tutoriel sympa sur NFSShell.

Fichiers de configuration

/etc/exports
/etc/lib/nfs/etab

Paramètres dangereux

  • Permissions de lecture et d'écriture (rw): Ce paramètre permet à la fois la lecture et l'écriture sur le système de fichiers. Il est essentiel de considérer les implications de l'octroi d'un accès aussi large.

  • Utilisation de ports non sécurisés (insecure): Lorsqu'elle est activée, cela permet au système d'utiliser des ports supérieurs à 1024. La sécurité des ports au-dessus de cette plage peut être moins stricte, augmentant ainsi les risques.

  • Visibilité des systèmes de fichiers imbriqués (nohide): Cette configuration rend les répertoires visibles même si un autre système de fichiers est monté sous un répertoire exporté. Chaque répertoire nécessite sa propre entrée d'exportation pour une gestion adéquate.

  • Propriété des fichiers racine (no_root_squash): Avec ce paramètre, les fichiers créés par l'utilisateur root conservent leur UID/GID d'origine de 0, en ignorant le principe du moindre privilège et en accordant potentiellement des autorisations excessives.

  • Non-écrasement de tous les utilisateurs (no_all_squash): Cette option garantit que les identités des utilisateurs sont préservées dans tout le système, ce qui pourrait entraîner des problèmes de contrôle des autorisations et d'accès s'ils ne sont pas correctement gérés.

Élévation de privilèges en utilisant des erreurs de configuration NFS

Élévation de privilèges NFS no_root_squash et no_all_squash

Commandes automatiques HackTricks

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}
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)!

Last updated