Ich veröffentliche weiterhin Lösungen, die zur weiteren Verarbeitung von der HackTheBox- Site gesendet wurden . Ich hoffe, dass dies zumindest jemandem hilft, sich im Bereich der Informationssicherheit zu entwickeln. In diesem Artikel nutzen wir eine Sicherheitsanfälligkeit in Json.Net aus und erfahren, wie Sie unsere Berechtigungen für SYSTEM erhöhen können, wenn wir über die Berechtigung SeImpersonatePrivilege verfügen.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 einem privaten Netzwerk mit Personen landen, die sich mit Informationssicherheit auskennen :)Organisationsinformationen, - , :
- PWN;
- (Crypto);
- c (Network);
- (Reverse Engineering);
- (Stegano);
- WEB-.
, , , .
, ,
Telegram . , ,
.
. , - , .
Nachrichtendienst
Dieser Computer hat eine IP-Adresse 10.10.10.158, die ich zu / etc / hosts hinzufüge.10.10.10.158 json.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.158 --rate=500
Als Nächstes müssen Sie weitere Informationen zu bekannten Ports sammeln. Verwenden Sie dazu nmap mit der Option -A.nmap json.htb -p49156,49154,49152,47001,80,137,49153,139,49155,135,445,49158,5985,6666,21
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 json.htb -p80,139,135,445,5985,6666,21
Mal sehen, was im Web. Infolgedessen wird die Seite geladen und erst dann werden wir zur Autorisierungsseite weitergeleitet.
Wir könnten das umgehen, aber admin: admin erlaubt uns, uns anzumelden.
Auf der Website selbst gibt es nichts Interessantes, und bei dem Versuch, zumindest etwas zu finden, halten wir uns an Cookies.
Decodiere Base64.echo "eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" | base64 -d ; echo
Das heißt, der Kennwortwert ist MD5 aus dem Administratorkennwort.
Weiter nichts interessantes. Wenn Sie Burp öffnen und die Anforderung abfangen, finden Sie einen interessanten HTTP-Header.
Und zu diesem Zeitpunkt hing ich, bis mir gesagt wurde, ich solle „die Bedeutung brechen“. In solchen Fällen müssen Sie natürlich Fehler machen und die API-Reaktion in drei Zuständen beobachten: wahr, falsch und fehlerhaft. Aber aus irgendeinem Grund habe ich es verpasst.Einstiegspunkt
Und dann wurde festgestellt, dass der Server Fehler ausgibt, wenn fehlerhafte Daten in einem seltsamen HTTP-Header übertragen werden (einige der Zeichen löschen). Nachfolgend sind die Daten aufgeführt, die der Server mit einem normalen Headerwert und mit ein bis vier gelöschten Zeichen zurückgibt.
Im letzteren Fall erhalten wir einen interessanten Fehler. Da das JSON-Objekt nicht mehr funktioniert, können wir dies mit ysoserial ausnutzen . Wir werden das ObjectDataProvider-Gadget für Json.Net verwenden und den Befehl ping ausführen, um die Annahme der Sicherheitsanfälligkeit zu überprüfen.
Aktivieren Sie nun tcpdump mit einem ICMP-Protokollfilter, um Ping abzufangen.
Beim Abfangen einer Anfrage ändern wir den Header.
Und wir bekommen den Ping, der bestellt wurde.
BENUTZER
Jetzt müssen Sie dasselbe mit dem Lastmesser tun. Zuerst generieren wir eine Last und öffnen einen Listener.
Öffnen Sie nun den lokalen SMB-Server, von dem aus der Ladevorgang gestartet wird.
Jetzt serialisieren wir wieder die notwendigen Daten, als Befehl starten wir unsere Last von unserem Server.
Wir sehen eine erfolgreiche Verbindung zum SMB-Server und eine erfolgreich geladene Meterpreter-Sitzung.
Und lesen Sie die Benutzerdatei.WURZEL
Zunächst betrachten wir die Informationen über den Benutzer, unter dem wir arbeiten.
Der Benutzer hat das SeImpersonatePrivilege-Privileg aktiviert (das Recht "Identitätswechsel des Clients nach Authentifizierung"). Wie Microsoft sagt :Wenn Sie einem Benutzer das Recht "Nach der Authentifizierung als Client ausgeben" zuweisen, können Programme, die im Auftrag dieses Benutzers gestartet wurden, sich als Client ausgeben. Die Verwendung dieses Parameters verhindert, dass sich nicht autorisierte Server als Clients ausgeben, die mithilfe von RPC-Prozeduren oder Named Pipes eine Verbindung zu diesen Servern herstellen.
Tatsache ist, dass wir unsere Rechte an SYSTEM erhöhen können. Eine vollständige Studie finden Sie hier . Die folgenden Berechtigungen sind von dieser Sicherheitsanfälligkeit betroffen:- SeImpersonatePrivilege
- SeAssignPrimaryPrivilege
- Setcbprivilege
- SeBackupPrivilege
- SeRestorePrivilege
- SeCreateTokenPrivilege
- SeLoadDriverPrivilege
- SeTakeOwnershipPrivilege
- SeDebugPrivilege
Lassen Sie uns eine weitere Last generieren und einen Listener dafür ausführen.
Für den Betrieb werden wir Juicy Potato verwenden . Als Parameter müssen Sie jedoch die CLSID des Kontos für das Zielsystem angeben, wir werden sie auch aus dem Repository übernehmen . Aber zuerst wollen wir sehen, was für ein System.
Und jetzt schauen wir uns die CLSID an.
Laden Sie die Dateien auf den Zielhost hoch.
Führen Sie nun Juicy Potato aus und teilen Sie ihm mit, wie der Prozess erstellt wird (CreateProcessWithTokenW oder CreateProcessAsUser, Parameter -t), Prozessdatei (-p), Überwachungsport (-l) und CLSID (-c).
Der Prozess wurde erfolgreich erstellt und wir sehen die erstellte Metterpreter-Sitzung.
Und wir bekommen das SYSTEM-Konto.Sie können sich uns per Telegramm anschließen. 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.