Я проверяю проект и нашел способ вводить данные в запрос. В проекте используется 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 ...)
позволит «сканировать» таблицы и данные.