2015-12-15 3 views
0

im пытается узнать и понять mysql injection, я создал демоверсию.mysql_query inject - заменить возвращенное поле

SELECT ret_variable FROM data WHERE name = '".$name."' AND age = ".$age; 

затем if(ret_variable == 2){something} но запрос первоначально возвращает 1, и мне нужно, чтобы заставить его выход 2

Как изменить $age переменных для установки пользовательского выходного поля для ret_variable (только в ответ)? Я пробовал несколько способов с OR, но не wroked.

ответ

0

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

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

возраст и ret_value = 2

Это создаст следующий запрос:

SELECT ret_variable FROM data WHERE name = 'John' AND age = age AND ret_value = 2; 

Принцип впрыска тузд является такого рода манипуляции запроса. Но вы не можете принудительно вернуть значение, если в базе данных нет строки с этим значением для ret_variable, и вы можете как-то выбрать эту строку.

Когда вы не знаете имя (или нет записи вашего известного имени с ret_variable из 2), это невозможно.

Поскольку оператор AND имеет приоритет над оператором OR, вы не можете манипулировать запросом, чтобы дать 2 как ret_variable. Это потому, что имя = '?' часть всегда будет терпеть неудачу.

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