NFS no_root_squash/no_all_squash misconfiguration PE
Przeczytaj plik _ /etc/exports _, jeśli znajdziesz katalog skonfigurowany jako no_root_squash, będziesz mógł uzyskać do niego dostęp jako klient i zapisywać wewnątrz tego katalogu tak, jakbyś był lokalnym użytkownikiem root na maszynie.
no_root_squash: Ta opcja daje uprawnienia użytkownikowi root na kliencie do dostępu do plików na serwerze NFS jako root. Może to prowadzić do poważnych zagrożeń dla bezpieczeństwa.
no_all_squash: Jest to podobna opcja do no_root_squash, ale dotyczy użytkowników nie będących rootem. Wyobraź sobie, że masz powłokę jako użytkownik nobody; sprawdzasz plik /etc/exports; opcja no_all_squash jest obecna; sprawdzasz plik /etc/passwd; emulujesz użytkownika nie będącego rootem; tworzysz plik suid jako tego użytkownika (poprzez montowanie za pomocą nfs). Wykonaj suid jako użytkownik nobody i stań się innym użytkownikiem.
Eskalacja uprawnień
Eksploitacja zdalna
Jeśli znalazłeś tę podatność, możesz ją wykorzystać:
Zamontuj ten katalog na maszynie klienta i jako root skopiuj do zamontowanego folderu binarny plik /bin/bash i nadaj mu uprawnienia SUID, a następnie wykonaj z maszyny ofiary ten binarny plik bash.
Montowanie tego katalogu na maszynie klienta i jako root kopiowanie skompilowanego payloadu do zamontowanego folderu, który wykorzysta uprawnienia SUID, nadaje mu prawa SUID i wykonuje na maszynie ofiary ten plik binarny (możesz tutaj znaleźć kilka payloadów C SUID).
Lokalne wykorzystanie
Zauważ, że jeśli możesz utworzyć tunel z twojego komputera do komputera ofiary, nadal możesz użyć zdalnej wersji, aby wykorzystać podwyższenie uprawnień, tunelując wymagane porty.
Następujący trik jest w przypadku, gdy plik /etc/exports
wskazuje na adres IP. W tym przypadku nie będziesz w stanie w żadnym przypadku użyć zdalnego wykorzystania i będziesz musiał wykorzystać ten trik.
Innym wymaganym warunkiem, aby wykorzystanie działało, jest to, że eksport wewnątrz /etc/export
musi używać flagi insecure
.
--Nie jestem pewien, czy jeśli /etc/export
wskazuje na adres IP, ten trik zadziała--
Podstawowe informacje
Scenariusz polega na wykorzystaniu zamontowanego udziału NFS na lokalnym komputerze, wykorzystując luki w specyfikacji NFSv3, które umożliwiają klientowi określenie swojego uid/gid, co potencjalnie umożliwia nieautoryzowany dostęp. Wykorzystanie polega na użyciu libnfs, biblioteki umożliwiającej fałszowanie wywołań RPC NFS.
Kompilacja biblioteki
Kroki kompilacji biblioteki mogą wymagać dostosowania w zależności od wersji jądra. W tym konkretnym przypadku wywołania systemowe fallocate zostały zakomentowane. Proces kompilacji obejmuje następujące polecenia:
Przeprowadzanie ataku
Atak polega na stworzeniu prostego programu w języku C (pwn.c
), który podnosi uprawnienia do roota, a następnie uruchamia powłokę. Program jest kompilowany, a wynikowy plik binarny (a.out
) jest umieszczany na udziale z suid root, używając ld_nfs.so
do podrobienia uid w wywołaniach RPC:
Skompiluj kod ataku:
Umieść atak na udziale i zmodyfikuj jego uprawnienia, podrobiąc uid:
Uruchom atak, aby uzyskać uprawnienia roota:
Bonus: NFShell do dyskretnego dostępu do plików
Po uzyskaniu dostępu roota, aby komunikować się z udziałem NFS bez zmieniania właściciela (aby uniknąć pozostawiania śladów), używany jest skrypt w języku Python (nfsh.py). Skrypt ten dostosowuje uid, aby pasował do uid pliku, z którym się komunikuje, umożliwiając interakcję z plikami na udziale bez problemów z uprawnieniami:
This code snippet makes a POST request to the OpenAI API to translate the given English text to Polish. The YOUR_API_KEY
placeholder should be replaced with your actual API key. The translated text is then printed to the console.
Odwołania
Last updated