Isis
04.02.2016, 14:18
Как проводить инъекции в HQL написано здесь (http://blog.h3xstream.com/2014/02/hql-for-pentesters.html).
Доступные функции при проведении инъекций в HQL - http://www.h2database.com/html/functions.html
Провести инъекции можно на все таблицы данных независимо от наличия прав доступа к ним. Если на сайте база под ReadOnly юзером, мы все равно можем обращаться к другим таблицам.
Суть уязвимости заключается в обходе HQL парсера. Он считает что
XXnon-breaking-spaceXX это 1 символ, а база данных видит в нем подзапрос.
Таким образом если мы заменим пробел на \u00A0, то сможем выполнить любой запрос.
Например:
query=' and (select password from users where id=1)=0 or ''='
Выведет ошибку HQL на недостаток доступа или о том, что надо установить resultSet scroll.
А если мы поправим запрос так:
http://hsto.org/files/14d/857/6fa/14d8576fa27c4db1a03e2f450155cef2.png
Запрос картинкой потому что WAF античата не даёт создать тему с таким запросом
Запрос можно взять тут (https://forum.xeksec.com/f4/t88607/).
Где X заменим на \u00A0, то парсер пропустит данный запрос и обратится к базе, которая нам всё покажет.
Доступные функции при проведении инъекций в HQL - http://www.h2database.com/html/functions.html
Провести инъекции можно на все таблицы данных независимо от наличия прав доступа к ним. Если на сайте база под ReadOnly юзером, мы все равно можем обращаться к другим таблицам.
Суть уязвимости заключается в обходе HQL парсера. Он считает что
XXnon-breaking-spaceXX это 1 символ, а база данных видит в нем подзапрос.
Таким образом если мы заменим пробел на \u00A0, то сможем выполнить любой запрос.
Например:
query=' and (select password from users where id=1)=0 or ''='
Выведет ошибку HQL на недостаток доступа или о том, что надо установить resultSet scroll.
А если мы поправим запрос так:
http://hsto.org/files/14d/857/6fa/14d8576fa27c4db1a03e2f450155cef2.png
Запрос картинкой потому что WAF античата не даёт создать тему с таким запросом
Запрос можно взять тут (https://forum.xeksec.com/f4/t88607/).
Где X заменим на \u00A0, то парсер пропустит данный запрос и обратится к базе, которая нам всё покажет.