У меня есть веб-приложение, которое я пытаюсь «сломать». Существует страница входа, требующая ввода имени пользователя и пароля.Допустим, у меня есть таблица Auser
, в которой хранится информация об имени пользователя в MySQL.
Когда я нажимаю «Войти» после ввода учетных данных, он выполняет следующую строку кода:
String sql = "select object(o) from Auser as o where ausername='" + username + "'";
Теперь язнаю, что не использование preparedStatement
делает запрос SQL уязвимым для внедрения SQL, и я хочу выполнить такой трюк.Я создал фиктивную таблицу с именем test
с целью удаления этой таблицы с помощью команды впрыска.
Я пробовал различные способы, например, при вводе имени пользователя (root - это имя пользователя):
root` DROP TABLE test;
И это не сработало.Есть ли способ сделать мою инъекцию успешной?
Обновление :
Просто дополнительная информация, мой столбец имени пользователя VARCHAR(255)
, и мой метод получения имени пользователя ниже:
public Auser get(String username, boolean moreInfo) {
try {
Auser u = null;
String sql = "select object(o) from Auser as o where ausername='" + username + "'";
List resList = em.createQuery(sql).getResultList();
if (resList == null) { // null check for sql query / library error
msg = CoreUtil.wrapMsg(CoreUtil.FUNC_ERROR,
this.getClass().getName(), "get[" + username + "]", "query error AUSER.");
} else if (resList.isEmpty()) {
msg = "User " + username + " not found.";
} else {
u = (Auser) resList.get(0);
}
return u;
} catch (Exception e) {
msg = CoreUtil.wrapMsg(CoreUtil.FUNC_ERROR,
this.getClass().getName(), "get[" + username + "]", e.getMessage());
return null;
}
}
Кажется, что каждое решение, которое я пробовал, продолжает выдавать IllegalArgumetnException
, и таблица все еще остается. Я просто хочу использовать уязвимости моей программы, это может быть любой вид инъекций, будь то удаление таблицы,возвращение всей информации о пользователях и т. д.