# 2049 - Pentesting Servicio NFS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
## **Información Básica**
**NFS** es un sistema diseñado para **cliente/servidor** que permite a los usuarios acceder sin problemas a archivos a través de una red como si estos archivos estuvieran ubicados dentro de un directorio local.
Un aspecto notable de este protocolo es su falta de **mecanismos de autenticación** o **autorización integrados**. En su lugar, la autorización se basa en **información del sistema de archivos**, siendo el servidor el encargado de traducir con precisión la **información de usuario proporcionada por el cliente** al formato de **autorización requerido por el sistema de archivos**, siguiendo principalmente la **sintaxis UNIX**.
La autenticación comúnmente se basa en **identificadores y membresías de grupo UNIX `UID`/`GID`**. Sin embargo, surge un desafío debido a la posible falta de coincidencia en los **mapeos de `UID`/`GID`** entre clientes y servidores, lo que no deja espacio para verificación adicional por parte del servidor. En consecuencia, el protocolo es más adecuado para su uso dentro de **redes de confianza**, dada su dependencia de este método de autenticación.
**Puerto predeterminado**: 2049/TCP/UDP (excepto la versión 4, que solo necesita TCP o UDP).
```
2049/tcp open nfs 2-3 (RPC #100003
```
### Versiones
- **NFSv2**: Esta versión es reconocida por su amplia compatibilidad con varios sistemas, marcando su importancia con operaciones iniciales predominantemente sobre UDP. Siendo la **más antigua** de la serie, sentó las bases para futuros desarrollos.
- **NFSv3**: Introducida con una serie de mejoras, NFSv3 amplió a su predecesora al admitir tamaños de archivo variables y ofrecer mecanismos mejorados de informe de errores. A pesar de sus avances, enfrentó limitaciones en la plena compatibilidad con clientes NFSv2.
- **NFSv4**: Una versión emblemática en la serie NFS, NFSv4 presentó una serie de características diseñadas para modernizar el intercambio de archivos en redes. Las mejoras notables incluyen la integración de Kerberos para **alta seguridad**, la capacidad de atravesar firewalls y operar a través de Internet sin necesidad de mapeadores de puertos, soporte para Listas de Control de Acceso (ACLs) y la introducción de operaciones basadas en estado. Sus mejoras de rendimiento y la adopción de un protocolo con estado distinguen a NFSv4 como un avance fundamental en las tecnologías de intercambio de archivos en red.
Cada versión de NFS ha sido desarrollada con la intención de abordar las necesidades en evolución de los entornos de red, mejorando progresivamente la seguridad, la compatibilidad y el rendimiento.
## Enumeración
### Scripts útiles de nmap
```bash
nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share
```
### Módulos útiles de Metasploit
```bash
scanner/nfs/nfsmount #Scan NFS mounts and list permissions
```
### Montaje
Para saber **qué carpeta** tiene el servidor **disponible** para montar, puedes preguntarle usando:
```bash
showmount -e
```
Luego montarlo usando:
```bash
mount -t nfs [-o vers=2] : -o nolock
```
Debes especificar **usar la versión 2** porque no tiene **ninguna** **autenticación** ni **autorización**.
**Ejemplo:**
```bash
mkdir /mnt/new_back
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
```
## Permisos
Si montas una carpeta que contiene **archivos o carpetas solo accesibles por algún usuario** (por **UID**). Puedes **crear** **localmente** un usuario con ese **UID** y usar ese **usuario** para poder **acceder** al archivo/carpeta.
## NSFShell
Para listar, montar y cambiar el UID y GID fácilmente para tener acceso a los archivos, puedes usar [nfsshell](https://github.com/NetDirect/nfsshell).
[¡Tutorial útil de NFSShell!](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)
## Archivos de configuración
```
/etc/exports
/etc/lib/nfs/etab
```
### Configuraciones peligrosas
- **Permisos de Lectura y Escritura (`rw`):** Esta configuración permite tanto la lectura como la escritura en el sistema de archivos. Es esencial considerar las implicaciones de otorgar un acceso tan amplio.
- **Uso de Puertos Inseguros (`insecure`):** Cuando está habilitado, esto permite que el sistema utilice puertos por encima de 1024. La seguridad de los puertos por encima de este rango puede ser menos estricta, aumentando el riesgo.
- **Visibilidad de Sistemas de Archivos Anidados (`nohide`):** Esta configuración hace que los directorios sean visibles incluso si otro sistema de archivos está montado debajo de un directorio exportado. Cada directorio requiere su propia entrada de exportación para una gestión adecuada.
- **Propietario de Archivos Raíz (`no_root_squash`):** Con esta configuración, los archivos creados por el usuario root mantienen su UID/GID original de 0, ignorando el principio de privilegio mínimo y potencialmente otorgando permisos excesivos.
- **No Anulación de Todos los Usuarios (`no_all_squash`):** Esta opción asegura que las identidades de usuario se conserven en todo el sistema, lo que podría provocar problemas de permisos y control de acceso si no se manejan correctamente.
## Escalada de privilegios utilizando configuraciones incorrectas de NFS
[Escalada de privilegios de NFS no\_root\_squash y no\_all\_squash](../linux-hardening/privilege-escalation/nfs-no\_root_squash-misconfiguration-pe.md)
## Comandos automáticos de 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}
```
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.