Я проверяю проект, и я нашел способ ввода данных в запрос. Проект использует Hibernate и этот кусок кода Session.createSqlQuery()
, а затем .list()
Hibernate SQL Injection
SQL-то вроде: «SELECT * FROM tablename ORDER BY column XXXXXX
»
XXXXXX
может быть изменен с помощью Fiddler. Так что я попытался
SELECT * FROM tablename ORDER BY column DESC; truncate table tablename;
К сожалению (ну только для моей попытки инъекции) это не работает, и я получаю:
У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «усечение таблицы имя_таблицы»
Мой вопрос, так как они используют createSQLQuery, они безопасны от инъекции. Если это не так, не могли бы вы привести мне пример, чтобы подчеркнуть эту проблему.
Я попытался с помощью% 08 (Backspace характер), думая, я бы смог удалить предыдущие символы запроса, например (он не работает;))
Спасибо.
После некоторых исследований я, кажется, не будет иметь возможность изменять данные с этой дырой в безопасности, однако использование ORDER BY (CASE WHEN ...)
позволит «сканировать» таблицы и данные.
Очень хороший вопрос, похоже, что HQL и SQL оба не защищены от инъекций, но вы можете избежать этого, прочитайте статью здесь http://software-security.sans.org/developer-how-to/fix -sql-injection-in-java-hibernate – Zeus