необходимо получить доступ к методу hsqldb stati c, но получить java. sql .SQLSyntaxErrorException: пользователю не хватает привилегий или объект не найден - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь получить доступ к методу deserialize stati c в классе hsqldb (2.5.1) InOutUtil. Когда я запускаю его java -cp hsqldb.jar:. testcode

, я получаю:

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: org.hsqldb.lib.InOutUtil.deserialize
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source)
    at testcode.main(testcode.java:58)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: org.hsqldb.lib.InOutUtil.deserialize
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.result.Result.getException(Unknown Source)
    ... 4 more

Код:

...

connection = DriverManager.getConnection(dburl, "sa", "");
statement = connection.createStatement();
statement.execute("call \"java.lang.System.setProperty\"('org.apache.commons.collections.enableUnsafeSerialization','true')");
statement.execute("call \"org.hsqldb.lib.InOutUtil.deserialize\"('" + my_object +"');");
    
...

Это оскорбительная строка, которая вызывает исключение:

statement.execute("call \"org.hsqldb.lib.InOutUtil.deserialize\"('" + my_object +"');");

Я пытаюсь воспроизвести этот эксплойт https://github.com/Critical-Start/Team-Ares/tree/master/CVE-2020-5902 на локальном экземпляре hsqldb.

Не уверен, что Я делаю не так. Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

Эксплойт, на который вы ссылаетесь, относится к HSQLDB версии 1.8.0, которая устарела с момента выпуска версии 2.0 в 2010 году. Тем не менее, аспекты инфраструктуры безопасности остаются такими же до последней версии Hyper SQL.

  1. Пользователь базы данных даже с учетными данными администратора базы данных не может выполнить любой произвольный метод stati c, который находится в пути к классам сервера базы данных. Системный администратор, запускающий сервер базы данных, может выдать список разрешенных c stati c методов, которым разрешено запускать как вызываемые процедуры, используя системное свойство hsqldb.method_class_names Java со списком. См .: http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_jrt_access_control

  2. Перечисленные безопасные методы c могут быть затем преобразованы в SQL вызываемые процедуры только с помощью учетных данных DBA. Привилегии EXECUTE для процедур предоставляются администратором баз данных.

  3. Версии 2.x Hyper SQL обычно улучшают старую структуру безопасности, например, позволяют использовать безопасный пароль ha sh алгоритмов , политики проверки и сохранения паролей, включая внешнюю аутентификацию через LDAP и другие платформы.

...