2015-09-05 2 views
0

Ниже приведен пример учебник инъекции SQL:, что SQL Injection может сделать, чтобы навредить вам

SELECT id FROM table WHERE username = '$username' AND password = '$password' 

, если ваш сайт не защищает от инъекции SQL, вы можете просто отправить в пароле = anything' OR 'x'='x в качестве входа и входа в систему без пароля. легко.

злоумышленник может также пройти в '; DROP TABLE table;, чтобы отбросить стол из базы данных. И, конечно, если соединение sql имеет разрешение DROP, но оно не будет работать. Также злоумышленники, вероятно, хотят получить больше преимуществ, выполняя что-то другое, кроме просто отбрасывая таблицу.

Итак, вопрос в том, могут ли злоумышленники совершать атаки, чтобы сделать UPDATE на столе, получить структуру на всех таблицах, таблицах списков или db, только атакуя эту уязвимость?

p.s: не то, что я хочу, чтобы использовать его, чтобы нападать на людей, но я любопытное интересно, что может произойти в худшем случае на моем дб ..

+0

Связанный: [mysql инъекции повреждения?] (Http://stackoverflow.com/q/15731983/53114) – Gumbo

ответ

1

Потенциально, конечно. Если вы можете ввести DROP TABLE table; в исполняемый оператор SQL, вы можете так же легко ввести оператор UPDATE, который изменил бы все строки любых таблиц, которые вам нужны. Вы можете также часто добавить или изменить SELECT заявление, чтобы показать вам информацию, которая вас интересует. Например, если у вас есть запрос, как

select name 
    from people 
where person_id = '$person' 

вы могли бы привнести что-то вроде

anything` union all select table_name from information_schema.tables 

в выступить с заявкой типа

select name 
    from people 
where person_id = 'anything' 
union all 
select table_name 
    from information_schema.tables 

, чтобы показать вам все таблицы. Вы можете сделать то же самое, чтобы получить список столбцов в таблицах, а затем начать выполнение запросов, чтобы узнать, какие данные находятся в разных таблицах.

+0

получил. но в большинстве случаев он не вернет вам результаты запроса. подобный запрос, возможно, является лишь средним шагом к логину, поэтому вы регистрируетесь, когда инъекция прошла успешно. также таблица DROP похожа, когда вы знаете, что сайт перестает работать, тогда вы знаете, что инъекция работает. так могут ли они все еще, скажем, запросить и всю информацию db таким образом? –

+0

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

+0

для многих случаев использования запрос является одним промежуточным шагом к более поздним страницам. например, для входа в систему, процесс - это запрос для соответствия => вход в систему и перенаправление для вас, когда профиль найден сервер даст вам статус 401 или 500, если учетные данные неверны. в обоих случаях вы не увидите промежуточные результаты запроса ..? –