Спящий SQL-инъекция

Я проверяю проект и нашел способ вводить данные в запрос. В проекте используется Hibernate и для этого фрагмента кода Session.createSqlQuery(), а затем .list()

SQL что-то вроде: "SELECT * FROM tablename ORDER BY column XXXXXX"

XXXXXX можно изменить с помощью Fiddler. Так что я попытался

SELECT * FROM tablename ORDER BY column DESC; truncate table tablename;

К сожалению (ну, только для моей попытки инъекции) это не работает, и я получаю:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «truncate table tablename»

Мой вопрос в том, что, поскольку они используют createSQLQuery, защищены ли они от инъекций. Если это не так, не могли бы вы привести пример, чтобы подчеркнуть проблему.

Я попытался использовать %08 (символ Backspace), думая, что смогу, например, удалить символы предыдущего запроса (это не сработало;))

Спасибо.


После некоторых исследований кажется, что я не смогу изменить данные с помощью этой дыры в безопасности, однако использование ORDER BY (CASE WHEN ...) позволит «сканировать» таблицы и данные.


person Michael Laffargue    schedule 11.10.2013    source источник
comment
Очень хороший вопрос, похоже, что и HQL, и SQL не защищены от инъекции, но вы можете избежать этого, прочитайте статью здесь software-security.sans.org/developer-how-to/   -  person Zeus    schedule 11.10.2013


Ответы (1)


Указано ли имя столбца с помощью параметризованного оператора или вы просто объединяете текст?

пример: в perl::DBI драйверы поддерживают следующий синтаксис:

$dbh->do("SELECt * FROM asdf ORDER BY ?", undef, $order_by);

? существует форма параметризованного оператора, который автоматически очищает ввод.

person cs_alumnus    schedule 18.10.2013
comment
stackoverflow.com/questions/16807399/ и stackoverflow. com/questions/4606505/ предполагает, что драйверы JDBC обрабатывают команды гибернации как параметризованные запросы. Я должен был бы попробовать это, чтобы быть уверенным. - person cs_alumnus; 18.10.2013
comment
Спасибо, но ваши примеры относятся к людям, использующим параметризованные запросы, что здесь не так. - person Michael Laffargue; 18.10.2013