hacktricks/network-services-pentesting/nfs-service-pentesting.md

8.9 KiB

2049 - Pentesting NFS Service

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Informations de base

NFS est un système conçu pour le client/serveur qui permet aux utilisateurs d'accéder facilement à des fichiers sur un réseau comme si ces fichiers étaient situés dans un répertoire local.

Un aspect notable de ce protocole est son absence de mécanismes d'authentification ou d'autorisation intégrés. 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 par le système de fichiers, suivant principalement la syntaxe UNIX.

L'authentification repose généralement sur les identifiants UID/GID UNIX et les appartenances à des groupes. Cependant, un défi se pose en raison du potentiel décalage dans les mappings 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 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, elle nécessite juste 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 le plus ancien de la série, il a jeté les bases pour les développements futurs.

  • NFSv3 : Introduit avec une gamme d'améliorations, NFSv3 s'est étendu par rapport à son prédécesseur en prenant en charge des tailles de fichiers variables et en offrant de meilleurs mécanismes de rapport d'erreurs. Malgré ses avancées, il a rencontré des limitations en matière de compatibilité totale avec les clients NFSv2.

  • NFSv4 : Une version marquante de la série NFS, NFSv4 a apporté un ensemble 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 portmappers, 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 performance et l'adoption d'un protocole orienté état distinguent NFSv4 comme une avancée majeure 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 la performance.

Enumeration

Useful nmap scripts

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

Mounting

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

showmount -e <IP>

Puis montez-le en utilisant :

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

Vous devez spécifier d'utiliser la version 2 car elle n'a aucune authentification ni 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 des dossiers uniquement accessibles par certains utilisateurs (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 facilement l'UID et le GID afin d'accéder aux fichiers, vous pouvez utiliser nfsshell.

Tutoriel NFSShell intéressant.

Config files

/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 dans 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'il est activé, cela permet au système d'utiliser des ports au-dessus de 1024. La sécurité des ports au-dessus de cette plage peut être moins stricte, augmentant le risque.

  • 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é en dessous d'un répertoire exporté. Chaque répertoire nécessite sa propre entrée d'exportation pour une gestion appropriée.

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

  • Non-squash de tous les utilisateurs (no_all_squash): Cette option garantit que les identités des utilisateurs sont préservées à travers le système, ce qui pourrait entraîner des problèmes de permissions et de contrôle d'accès si ce n'est pas correctement géré.

Escalade de privilèges utilisant des mauvaises configurations NFS

NFS no_root_squash et no_all_squash escalade de privilèges

HackTricks Commandes automatiques

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" %} Apprenez et pratiquez le Hacking AWS :HackTricks Formation Expert Red Team AWS (ARTE)
Apprenez et pratiquez le Hacking GCP : HackTricks Formation Expert Red Team GCP (GRTE)

Soutenir HackTricks
{% endhint %}