2049 - Pentesting NFS Service

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Podstawowe informacje

NFS to system zaprojektowany dla klient/serwer, który umożliwia użytkownikom bezproblemowy dostęp do plików przez sieć, tak jakby te pliki znajdowały się w lokalnym katalogu.

Należy zauważyć, że ten protokół nie posiada wbudowanych mechanizmów uwierzytelniania ani autoryzacji. Zamiast tego, autoryzacja opiera się na informacjach o systemie plików, a serwer ma za zadanie dokładnie przetłumaczyć informacje o użytkowniku dostarczone przez klienta na wymagany przez system plików format autoryzacji, przede wszystkim zgodnie z składnią UNIX.

Uwierzytelnianie zwykle opiera się na identyfikatorach UID/GID UNIX i przynależności do grup. Jednak pojawia się wyzwanie związane z potencjalnym niezgodnymi mapowaniami UID/GID między klientami a serwerami, nie pozostawiając miejsca na dodatkową weryfikację przez serwer. W rezultacie, protokół ten najlepiej sprawdza się w zaufanych sieciach, ze względu na swoje poleganie na tej metodzie uwierzytelniania.

Domyślny port: 2049/TCP/UDP (z wyjątkiem wersji 4, która wymaga tylko TCP lub UDP).

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

Wersje

  • NFSv2: Ta wersja jest znana ze swojej szerokiej kompatybilności z różnymi systemami, co potwierdza jej znaczenie dzięki początkowym operacjom przeważnie realizowanym przez UDP. Jako najstarsza w serii, położyła podwaliny pod przyszłe rozwinięcia.

  • NFSv3: Wprowadzona z szeregiem ulepszeń, NFSv3 rozszerzyła swojego poprzednika, obsługując zmienne rozmiary plików i oferując ulepszone mechanizmy raportowania błędów. Pomimo swoich postępów, napotykała ograniczenia w pełnej kompatybilności wstecznej z klientami NFSv2.

  • NFSv4: Wersja przełomowa w serii NFS, NFSv4 przyniosła zestaw funkcji zaprojektowanych do nowoczesnego udostępniania plików w sieciach. Znaczące ulepszenia obejmują integrację Kerberosa dla wysokiego poziomu bezpieczeństwa, zdolność do przekraczania zapór ogniowych i działania w Internecie bez potrzeby portmapperów, obsługę list kontroli dostępu (ACL), oraz wprowadzenie operacji opartych na stanie. Jej ulepszenia wydajnościowe i przyjęcie protokołu stanowego wyróżniają NFSv4 jako przełomowy postęp w technologiach udostępniania plików w sieci.

Każda wersja NFS została opracowana w celu zaspokojenia zmieniających się potrzeb środowisk sieciowych, stopniowo poprawiając bezpieczeństwo, kompatybilność i wydajność.

Wyliczanie

Przydatne skrypty nmap

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

Metasploit to potężne narzędzie do testowania penetracyjnego, które oferuje wiele modułów, które mogą być użyteczne podczas testowania usług sieciowych. Oto kilka przykładowych modułów, które warto znać:

  • auxiliary/scanner/nfs/nfsmount - Moduł ten pozwala na skanowanie i montowanie udziałów NFS.

  • auxiliary/scanner/nfs/nfsenum - Ten moduł umożliwia wykonywanie enumeracji usług NFS, takich jak listowanie katalogów i plików.

  • auxiliary/scanner/nfs/nfs_showmount - Moduł ten pozwala na wykonywanie zapytań showmount w celu uzyskania informacji o dostępnych udziałach NFS.

  • auxiliary/scanner/nfs/nfs_statfs - Ten moduł umożliwia pobieranie informacji statystycznych o udziałach NFS.

  • exploit/linux/nfs/nfsd - Moduł ten pozwala na zdalne wykonanie kodu na serwerze NFS poprzez wykorzystanie podatności w usłudze nfsd.

Pamiętaj, że metasploit oferuje wiele innych modułów, które mogą być przydatne podczas testowania penetracyjnego usług sieciowych.

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

Montowanie

Aby dowiedzieć się, który folder na serwerze jest dostępny do zamontowania, możesz zapytać o to używając:

showmount -e <IP>

Następnie zamontuj go za pomocą:

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

Powinieneś określić, żeby używać wersji 2, ponieważ nie posiada żadnej autoryzacji ani uwierzytelniania.

Przykład:

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 określonego użytkownika (za pomocą UID), możesz lokalnie utworzyć użytkownika o tym UID i używając tego użytkownika będziesz mógł uzyskać dostęp do pliku/folderu.

NSFShell

Aby łatwo wyświetlać, montować i zmieniać UID i GID w celu uzyskania dostępu do plików, możesz użyć nfsshell.

Ładny samouczek NFSShell.

Pliki konfiguracyjne

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

Niebezpieczne ustawienia

  • Uprawnienia do odczytu i zapisu (rw): Ta opcja umożliwia zarówno odczyt, jak i zapis do systemu plików. Należy dokładnie rozważyć konsekwencje udzielenia tak szerokiego dostępu.

  • Użycie niezabezpieczonych portów (insecure): Po włączeniu tej opcji system może korzystać z portów powyżej 1024. Bezpieczeństwo portów powyżej tej wartości może być mniejsze, co zwiększa ryzyko.

  • Widoczność zagnieżdżonych systemów plików (nohide): Ta konfiguracja sprawia, że katalogi są widoczne nawet wtedy, gdy inny system plików jest zamontowany poniżej eksportowanego katalogu. Każdy katalog wymaga własnego wpisu eksportu dla prawidłowego zarządzania.

  • Właścicielstwo plików roota (no_root_squash): Ta opcja powoduje, że pliki utworzone przez użytkownika root zachowują swoje pierwotne UID/GID równa 0, ignorując zasadę najmniejszych uprawnień i potencjalnie nadając nadmierne uprawnienia.

  • Brak tłumienia wszystkich użytkowników (no_all_squash): Ta opcja zapewnia zachowanie tożsamości użytkowników w całym systemie, co może prowadzić do problemów z uprawnieniami i kontrolą dostępu, jeśli nie jest prawidłowo obsługiwana.

Eskalacja uprawnień przy użyciu błędów konfiguracji NFS

Eskalacja uprawnień przy użyciu błędów konfiguracji NFS no_root_squash i no_all_squash

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}
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Last updated