Нарушение целостности структуры SQL-запроса
Внедрение SQL-кода (SQL injection) один из распространённых способов взлома ПО, работающего с базами данных, основанный на внедрении в запрос произвольного SQL-кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере. Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах. Разработчик прикладных программ, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия внедрению SQL. Внедрение SQL-кода (SQL injection) один из распространённых способов взлома ПО, работающего с базами данных, основанный на внедрении в запрос произвольного SQL-кода. Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере. Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах. Разработчик прикладных программ, работающих с базами данных, должен знать о таких уязвимостях и принимать меры противодействия внедрению SQL.
... $id = $_REQUEST['id']; $res = mysql_query("SELECT * FROM news WHERE id_news = $id"); WHERE id_news = $id");... SELECT * FROM news WHERE id_news = 5 Если злоумышленник передаст в качестве параметра id строку -1 OR 1=1 id = -1 OR 1=1 SELECT * FROM news WHERE id_news = -1 OR 1=1 SELECT * FROM news WHERE id_news = 5 Если злоумышленник передаст в качестве параметра id строку -1 OR 1=1 id = -1 OR 1=1 SELECT * FROM news WHERE id_news = -1 OR 1=1
Error-based SQL injection Инъекция заведомо некорректного запроса с целью получения ошибки для определения типа и версии используемой СУБД. 1.Определение уязвимостей, специфичных для данной версии. 2.Определение особенностей СУБД. 3.Определение дальнейшего вектора атаки
$res = mysql_query("SELECT id_news, header, body, author FROM news WHERE id_news = ". $_REQUEST['id']); -1 UNION SELECT 1, username, password, 1 FROM admin -1 UNION SELECT 1, username, password, 1 FROM admin SELECT id_news, header, body, author FROM news WHERE id_news = -1 UNION SELECT 1, username, password, 1 FROM admin $res = mysql_query("SELECT id_news, header, body, author FROM news WHERE id_news = ". $_REQUEST['id']); -1 UNION SELECT 1, username, password, 1 FROM admin -1 UNION SELECT 1, username, password, 1 FROM admin SELECT id_news, header, body, author FROM news WHERE id_news = -1 UNION SELECT 1, username, password, 1 FROM admin
Stacked queries SQL injection Если веб-приложение поддерживает последовательные запросы - в уязвимый параметр HTTP-запроса добавляется точка с запятой (;) и следом внедряемый SQL- запрос. SELECT id_news, header, body, author FROM news WHERE id_news = -1; SELECT username,password FROM admin