ld.so privesc exploit example
Przygotuj środowisko
W poniższym rozdziale znajdziesz kod plików, które będziemy używać do przygotowania środowiska
W pliku libcustom.c
znajduje się przykład kodu biblioteki dynamicznej, która może być użyta do eskalacji uprawnień. Ta biblioteka dynamiczna jest skompilowana z flagą -fPIC
, co oznacza, że jest ona niezależna od pozycji w pamięci.
Kod biblioteki dynamicznej zawiera funkcję evil_function()
, która jest wywoływana przez program główny. Funkcja ta wykonuje operację, która wymaga podwyższonych uprawnień, takich jak otwarcie pliku /etc/shadow
w trybie do odczytu.
Aby wykorzystać tę bibliotekę dynamiczną do eskalacji uprawnień, należy dodać ścieżkę do katalogu zawierającego tę bibliotekę do pliku konfiguracyjnego ld.so.conf
. Następnie należy uruchomić program główny, który wywołuje funkcję evil_function()
. W wyniku tego, funkcja evil_function()
zostanie wykonana z podwyższonymi uprawnieniami, umożliwiając dostęp do chronionych zasobów systemowych.
Utwórz te pliki na swoim komputerze w tym samym folderze.
Skompiluj bibliotekę:
gcc -shared -o libcustom.so -fPIC libcustom.c
Skopiuj
libcustom.so
do/usr/lib
:sudo cp libcustom.so /usr/lib
(uprawnienia roota)Skompiluj plik wykonywalny:
gcc sharedvuln.c -o sharedvuln -lcustom
Sprawdź środowisko
Sprawdź, czy libcustom.so jest ładowana z /usr/lib i czy możesz wykonać plik binarny.
Wykorzystanie
W tym scenariuszu załóżmy, że ktoś utworzył podatne wpisy wewnątrz pliku w /etc/ld.so.conf/.
Narażony folder to /home/ubuntu/lib (w którym mamy dostęp do zapisu). Pobierz i skompiluj poniższy kod wewnątrz tej ścieżki:
Teraz, gdy utworzyliśmy złośliwą bibliotekę libcustom w nieprawidłowej ścieżce, musimy poczekać na ponowne uruchomienie lub na wykonanie przez użytkownika root polecenia ldconfig
(jeśli możesz wykonać to polecenie jako sudo lub ma ustawiony bit suid, będziesz w stanie wykonać je samodzielnie).
Po tym zdarzeniu ponownie sprawdź, z jakiego miejsca ładowana jest biblioteka libcustom.so
przez plik wykonywalny sharevuln
:
Jak widać, jest ładowane z /home/ubuntu/lib
, a jeśli jakikolwiek użytkownik je uruchomi, zostanie uruchomiona powłoka:
Zauważ, że w tym przykładzie nie podnieśliśmy uprawnień, ale modyfikując wykonywane polecenia i oczekując, aż użytkownik root lub inny uprzywilejowany użytkownik uruchomi podatny plik binarny, będziemy mogli podnieść uprawnienia.
Inne błędy konfiguracji - Ta sama podatność
W poprzednim przykładzie sfabrykowaliśmy błąd konfiguracji, w którym administrator ustawił folder bez uprawnień w pliku konfiguracyjnym wewnątrz /etc/ld.so.conf.d/
.
Ale istnieją inne błędy konfiguracji, które mogą spowodować tę samą podatność. Jeśli masz uprawnienia do zapisu w jakimś pliku konfiguracyjnym wewnątrz /etc/ld.so.conf.d
, w folderze /etc/ld.so.conf.d
lub w pliku /etc/ld.so.conf
, możesz skonfigurować tę samą podatność i ją wykorzystać.
Wykorzystanie 2
Załóżmy, że masz uprawnienia sudo dla ldconfig
.
Możesz wskazać ldconfig
, skąd mają być ładowane pliki konfiguracyjne, więc możemy z tego skorzystać, aby spowodować, że ldconfig
załaduje dowolne foldery.
Więc stwórzmy potrzebne pliki i foldery, aby załadować "/tmp":
Teraz, jak wskazano w poprzednim wykorzystaniu, utwórz złośliwą bibliotekę wewnątrz /tmp
.
I na koniec, załaduj ścieżkę i sprawdź, skąd jest ładowana biblioteka binarna:
Jak widać, posiadając uprawnienia sudo dla ldconfig
, można wykorzystać tę samą podatność.
Nie znalazłem niezawodnego sposobu na wykorzystanie tej podatności, jeśli ldconfig
jest skonfigurowany z bitem suid. Pojawia się następujący błąd: /sbin/ldconfig.real: Nie można utworzyć tymczasowego pliku cache /etc/ld.so.cache~: Brak dostępu
Odwołania
Maszyna Dab w HTB
Last updated