Атаки путем внедрения кода SQL включают вставку или «внедрение» SQL-запросов через клиентский ввод в приложение. Успешная атака такого типа может быть использована для считывания конфиденциальной информации из базы данных и ее изменения или удаления. В самых крайних случаях она позволяет выдавать системные команды.
Ниже приведен опасный фрагмент кода, который можно использовать для выполнения атаки путем внедрения кода SQL:
ВЫБЕРИТЕ * ИЗ пользователей ГДЕ имя = имя_пользователя;
Переменная "userName" извлекается из пользователя. Если злоумышленник называет 'OR' 1 '='1' в качестве своего имени пользователя, это приведет к принудительному выбору правильного имени пользователя, поскольку выражение '1' = '1' всегда истинно.
Для тестирования уязвимостей sql-инъекцийможно использовать средство sqlmap, которое автоматически может находить и использовать возможность внедрения SQL-запросов. Он поддерживает шесть методов внедрения sql:логические, слепые, основанные на ошибках, запросы UNION,накопительные запросы и атаки OOB. Позволяет атаковать базы данных MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB и Informix.
На рисунке ниже показан пример использования sqlmap,который с помощью эвристических тестов обнаружил, что параметр id может быть уязвим для атаки sql-инъекции в тестируемом запросе.