TryHackMe – Writeup – Ninja Skills

2020-08-22 von Mario

On the platform tryhackme.com you can test your IT and Security skills.

An exciting challenge is the machine called ninjaskills.

Let’s start the machine and check the tasks.

 

Ninja Skills

Answer the questions about the following files:

  • 8V2L
  • bny0
  • c4ZX
  • D8B3
  • FHl1
  • oiMO
  • PFbD
  • rmfX
  • SRSq
  • uqyw
  • v2Vb
  • X1Uy

 

After logging into the computer,I look around to find the files.

There is an interesting folder “files”, but the folder is empty. As the next step I created a text file “search.txt”.

touch search.txt

After that, I added the filenames we want to find.

find / 2>/dev/null | grep -F -f search.txt > found.txt

The file “found.txt” contains the path and the file names.

 

#1 Which of the above files are owned by the best-group group (enter the answer separated by spaces in alphabetical order)

cat found.txt | while read line; do ls -al $line; done

 

#2 Which of these files contain an IP address?

cat found.txt | while read line; do echo $line; cat $line | 
grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}"; done

 

#3 Which file has the SHA1 hash of 9d54da7584015647ba052173b84d45e8007eba94

cat found.txt | while read line; do echo $line; sha1sum $line | 
grep 9d54da7584015647ba052173b84d45e8007eba94; done

 

#4 Which file contains 230 lines?

cat found.txt | while read line; do echo $line; wc -l $line; done

I didn’t find a file with 230 lines, but on closer inspection, one file is missing. ;)

 

#5 Which file’s owner has an ID of 502?

cat found.txt | while read line; do ls -al $line; done

 

#6 Which file is executable by everyone?

cat found.txt | while read line; do ls -n $line; done

Kategorie: IT-Security Schlagwörter: ,

0x00sec.dev: Exercise 1

2020-04-15 von Mario

Auf der Seite ctf.0x00sec.org werden CTF Spiele veröffentlicht. Für die erste Aufgabe hier ein writeup.

Challenge

Analyse

Da auf der Seite keine hilfreichen Informationen zu finden sind, wird der Quelltext der Seite untersucht.

Der Kommentar gibt einen Hinweis, an welcher Stelle gesucht werden soll.

</body>
  <!-- TODO: -->
  <!-- * Remove the git directory after publishing -->
</html>

Bei einem GIT Repository wird per default ein Ordner mit dem Namen “.git” angelegt. Weiterhin wird automatisch eine Struktur erstellt. Ein Versuch “https://exercise-1.0x00sec.dev/.git/” aufzurufen, ergab folgendes:

Die Anzeige der Fehlermeldung ist gut. Warum? Dadurch ist ersichtlich, dass der Ordner “.git” vorhanden ist.

Als nächstes kann jede einzelne Möglichkeit von weiteren Dateien oder Ordnern probiert werden, welche in der Dokumentation von GIT zu finden ist. Manuell macht das aber keinen Spaß. Das Tool “gitdumper” ist für diese Aufgabe perfekt geeignet.

 

Durchführung

Herunterladen des Tools “gitdumper” und starten.

./gitdumper.sh https://exercise-1.0x00sec.dev/.git/ DEST_FOLDER
Parameter Beschreibung
DEST_FOLDER Der Ordnername gibt an, wo die heruntergeladenen Dateien lokal gespeichert werden sollen.

 

Die Ausgabe von “gitdumper” stellt sich wie folgt dar:

Mit dem Befehl “tree” kann danach eine übersichtliche Darstellung der heruntergeladenen Daten erzeugt werden.

Die einzelnen Commits werden bei GIT gepackt (ZIP), um Speicherplatz zu sparen. Die relevanten Informationen befinden sich im Ordner “objects”. Für das Entpacken habe ich ein kleines Script geschrieben:

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import zlib  # A compression / decompression library

ROOT_DIR = "/EDIT_ME_PATH_TO_FOLDER/.git/objects/"

def readFile(path_to_file):

	compressed_content = open(path_to_file, 'rb').read()
	decompressed_content = zlib.decompress(compressed_content)
	print("--- BOF --- ")
	print(decompressed_content)
	print("--- EOF --- ")


def main():
	for root, subdirs, files in os.walk(ROOT_DIR):
		for file in files:
			tmp_file = os.path.join(root, file)
			print(tmp_file)
			readFile(tmp_file)


if __name__ == "__main__":
	main()

Das Script gibt die gepackten Daten aus. Zuvor muss die Variable “ROOT_DIR” auf den Ort der heruntergeladenen Daten entsprechend angepasst werden. Daraufhin das Script ausführen:

./zip_to_text.py

Da die Ausgabe etwas unübersichtlich ist, den Befehl erweitern:

./zip_to_text.py | grep Pass

Das sieht doch sehr gut aus. Hier findet ein Vergleich zwischen Username und Passwort statt, wobei das Passwort als SHA256 HASH abgelegt ist.

 

Den HASH-Wert gilt es zu cracken. Dafür kann eine beliebige Plattform verwendet werden.

Nach einigen Sekunden wurde der Originalwert des HASH (Result) angezeigt. Jetzt sind die Informationen für den Usernamen “admin” und für das Passwort “l33tsupah4x0r” bekannt und der Login kann durchgeführt werden.

 

Nach der Anmeldung wird das Flag “flag{g1t-dump1ng-i5-c00l}” angezeigt und die Aufgabe ist abgeschlossen.

Kategorie: IT-Security Schlagwörter: , , ,