2015-05-01 2 views
1

Я пытаюсь найти способ объединить запрос выбора и обновление с той же инструкцией на сервере MySQL. Это может звучать как повторяющийся вопрос, но моя потребность отличается от моих предшественников.SELECT и UPDATE строки в запросе?

Я действительно ищу одну инструкцию SQL, поскольку я не могу использовать транзакции или разделить их на две части. Цель состоит в том, чтобы обойти меру безопасности, которая позволяет пропустить только один запрос выбора. Это не для чего-то незаконного, это для класса безопасности в моем университете, цель состоит в том, чтобы обойти адаптированную систему, которая была специально сделана уязвимой для SQL-инъекции. Я могу выполнить инъекции и сделать любой выбор, логин с помощью инъекций и т. Д., Но эта часть с обновлением осталась как вызов.

Я пробовал все, что мог, и искал способ их смешивания. Я даже подумал о том, чтобы поместить оператор Update во внутренний запрос, но синтаксис был явно неправильным.

Любые мысли? Если это невозможно, предложения о том, как атаковать цель и производить обновление, более чем приветствуются.


Вот длинный выстрел, это, очевидно, неправильно, но я думал, что это может помочь понять, что я пытаюсь достичь:

SELECT * 
FROM user 
WHERE (name = 'admin') and exists (
UPDATE user 
SET pass='test' 
WHERE name='peter');-- OR email = 'admin') AND pass = ’t’.. 

Цель:

$sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender, 
     FROM USERS_TABLE 
     WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’"); 

Обновление: я принял ответ, который был ближе к 'невозможно'. Но дальнейший поиск по этому вопросу привел к выводу, что это больше связано с API, используемым для соединителя, а также с функцией безопасности СУБД, на самом деле это связано с СУБД и приемлемыми применениями и синтаксисом.

На вопрос о способе вложения инструкции UPDATE в SELECT я обнаружил, что это невозможно - на всякий случай, насколько я знаю.

Об атаке, возможно использование стековых операторов, когда программист использует API, что позволяет такую ​​вещь, которая редко, но существует. В заключение, все это, похоже, нужно было выполнить.

+0

вам нужно включить ваши запросы, если вы хотите какую-либо помощь вообще –

+0

Я больше походил на поиск синтаксиса ..но я приведу пример здесь через секунду, это может помочь .. – Victor

+0

хорошо, вы можете использовать оператор select как источник значений для оператора обновления в общих чертах. –

ответ

1

Я не знаком с MySQL но из моего SQL Server опыта я могу сказать вам, что вы не можете совместить SELECT и UPDATE заявления как в одном запросе.

Более того - любая современная система база данных должна быть достаточно, чтобы предотвратить вас умной, если вы пытаетесь проникнуть в базе данных UPDATE с использованием SELECT заявления и, таким образом, обходя права доступа к БД.

Я уверен, что MySQL не будет глупым, чтобы вы могли обновить, если вы связываете его с запросом SELECT - не говоря уже о том, что это возможно.

Таким образом, на мой взгляд, вы можете гоняться за тупиком здесь, что запрещено/возможно.

+0

Указанный пример создает синтаксическую ошибку. – Gumbo

+0

Спасибо @ муртазат, я боялся этого. Проблема в том, что на терминале или взаимодействии через какой-то интерфейс мы, как правило, можем строить транзакции и, конечно, отправлять несколько операторов. Я согласен с вами, и на самом деле это может быть так. Но люди приходят со странными способами и функциями, минуя эти механизмы - я думал, что стоит спросить. – Victor

Смежные вопросы