# 2049 - Pentesting NFS Service {{#include ../banners/hacktricks-training.md}} ## **Podstawowe informacje** **NFS** to system zaprojektowany dla **klient/serwer**, który umożliwia użytkownikom bezproblemowy dostęp do plików w sieci, tak jakby te pliki znajdowały się w lokalnym katalogu. Ciekawym aspektem tego protokołu jest brak wbudowanych **mechanizmów uwierzytelniania** lub **autoryzacji**. Zamiast tego, autoryzacja opiera się na **informacjach o systemie plików**, a serwer ma za zadanie dokładnie przetłumaczyć **dostarczone przez klienta informacje o użytkowniku** na wymagany przez system plików **format autoryzacji**, głównie zgodnie z **składnią UNIX**. Uwierzytelnianie zazwyczaj opiera się na **identyfikatorach `UID`/`GID` UNIX i członkostwie w grupach**. Jednakże, pojawia się problem z powodu potencjalnych niezgodności w **mapowaniach `UID`/`GID`** między klientami a serwerami, co nie pozostawia miejsca na dodatkową weryfikację przez serwer. W związku z tym, protokół najlepiej nadaje się do użycia w **zaufanych sieciach**, biorąc pod uwagę jego zależność od tej metody uwierzytelniania. **Domyślny port**: 2049/TCP/UDP (z wyjątkiem wersji 4, potrzebuje tylko TCP lub UDP). ``` 2049/tcp open nfs 2-3 (RPC #100003 ``` ### Wersje - **NFSv2**: Ta wersja jest znana z szerokiej kompatybilności z różnymi systemami, co podkreśla jej znaczenie w początkowych operacjach głównie przez UDP. Jako **najstarsza** w serii, położyła fundamenty pod przyszłe rozwój. - **NFSv3**: Wprowadzona z szeregiem ulepszeń, NFSv3 rozszerzyła możliwości swojego poprzednika, wspierając zmienne rozmiary plików i oferując ulepszone mechanizmy raportowania błędów. Pomimo swoich postępów, napotkała ograniczenia w pełnej kompatybilności wstecznej z klientami NFSv2. - **NFSv4**: Kamieni milowy w serii NFS, NFSv4 wprowadziła zestaw funkcji zaprojektowanych w celu modernizacji udostępniania plików w sieciach. Znaczące ulepszenia obejmują integrację Kerberos dla **wysokiego bezpieczeństwa**, zdolność do przechodzenia przez zapory ogniowe i działania przez Internet bez potrzeby korzystania z portmapperów, wsparcie dla list kontroli dostępu (ACL) oraz wprowadzenie operacji opartych na stanie. Ulepszenia wydajności i przyjęcie protokołu stanowego wyróżniają NFSv4 jako kluczowy postęp w technologiach udostępniania plików w sieci. Każda wersja NFS została opracowana z zamiarem zaspokojenia ewoluujących potrzeb środowisk sieciowych, stopniowo poprawiając bezpieczeństwo, kompatybilność i wydajność. ## Enumeracja ### Użyteczne skrypty nmap ```bash nfs-ls #List NFS exports and check permissions nfs-showmount #Like showmount -e nfs-statfs #Disk statistics and info from NFS share ``` ### Przydatne moduły metasploit ```bash scanner/nfs/nfsmount #Scan NFS mounts and list permissions ``` ### Montowanie Aby dowiedzieć się, **który folder** jest **dostępny** na serwerze do zamontowania, możesz zapytać go używając: ```bash showmount -e ``` Następnie zamontuj to używając: ```bash mount -t nfs [-o vers=2] : -o nolock ``` Powinieneś określić, aby **używać wersji 2**, ponieważ nie ma **żadnej** **autoryzacji** ani **uwierzytelniania**. **Przykład:** ```bash mkdir /mnt/new_back mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ``` ## Uprawnienia Jeśli zamontujesz folder, który zawiera **pliki lub foldery dostępne tylko dla niektórego użytkownika** (według **UID**). Możesz **utworzyć** **lokalnie** użytkownika z tym **UID** i używając tego **użytkownika** będziesz mógł **uzyskać dostęp** do pliku/folderu. ## NSFShell Aby łatwo wylistować, zamontować i zmienić UID oraz GID, aby uzyskać dostęp do plików, możesz użyć [nfsshell](https://github.com/NetDirect/nfsshell). [Nice NFSShell tutorial.](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/) ## Pliki konfiguracyjne ``` /etc/exports /etc/lib/nfs/etab ``` ### Niebezpieczne ustawienia - **Uprawnienia do odczytu i zapisu (`rw`):** To ustawienie pozwala na zarówno odczyt, jak i zapis w systemie plików. Ważne jest, aby rozważyć konsekwencje przyznawania tak szerokiego dostępu. - **Użycie niebezpiecznych portów (`insecure`):** Po włączeniu, to pozwala systemowi na korzystanie z portów powyżej 1024. Bezpieczeństwo portów powyżej tego zakresu może być mniej rygorystyczne, co zwiększa ryzyko. - **Widoczność zagnieżdżonych systemów plików (`nohide`):** Ta konfiguracja sprawia, że katalogi są widoczne, nawet jeśli inny system plików jest zamontowany poniżej eksportowanego katalogu. Każdy katalog wymaga własnego wpisu eksportu dla prawidłowego zarządzania. - **Własność plików root (`no_root_squash`):** Przy tym ustawieniu pliki tworzone przez użytkownika root zachowują swój oryginalny UID/GID równy 0, ignorując zasadę najmniejszych uprawnień i potencjalnie przyznając nadmierne uprawnienia. - **Brak zbijania wszystkich użytkowników (`no_all_squash`):** Ta opcja zapewnia, że tożsamości użytkowników są zachowywane w całym systemie, co może prowadzić do problemów z uprawnieniami i kontrolą dostępu, jeśli nie jest prawidłowo obsługiwane. ## Eskalacja uprawnień przy użyciu błędnych konfiguracji NFS [NFS no_root_squash i no_all_squash eskalacja uprawnień](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md) ## Automatyczne polecenia 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} ``` {{#include ../banners/hacktricks-training.md}}