Абсолютно типичная история для начинающего хакера (пентестера) это атака через внедрение зловредного кода с использованием промежуточного прокси-сервера.
Метод основан на перехвате кода между пользователем и атакуемым сайтом. На машину хакера ставится прокси-сервер, который перехватывает команды от пользователя и встраивает в него зловредный SQL-код, затем анализируется полученный код от атакуемого сайта.
Если представить атаку схематически, то выглядит это примерно так:
Здесь в качестве атакующего (attacker) выступает прокси-сервер, в нашем случае это специализированный инструмент пентестера — Burp Suite. Проблем с установкой этой системы обычно не возникает. Приложение написано на языке Java, поэтому для установки необходимо предварительно скачать и установить к себе на машину JDK и JRE.
Рекомендую пользоваться официальным зеркалом. Проверять систему можно на тестовом сайте SecureShop, это специально созданный для начинающих сайт для тестирования уязвимостей веб-приложений.
Для перехвата трафика удобно установить программу SwichyOmega для установки прокси-сервера, настроенного на BURPSUITE под профилем BURP.
После этих настроек весь трафик будет проходить через ваш прокси-сервер. Где, анализируя, можно обнаружить уязвимости любого сайта. После чего делаются первые попытки встроить свой код в запрос к сайту.
Здесь можно запускать уже непосредственно проверки. Встроенных проверок достаточно много. Непосредственно коснемся ручной проверки, чтобы воспроизвести ту или иную проблему безопасности.
Проверяем, что наш прокси работает и перехватывает все запросы. В браузере обращаемся к сайту Google. И видим, что возвращается ошибка 404, а все потому, что мы осуществили подмену этого запроса и пропустили его через наш прокси, который работает в пассивном режиме.
Все, что проходит сейчас через прокси, можно наблюдать в папке Target. В окне Issues можно посмотреть все проблемы уязвимости сайтов, которые находит приложение.
Внедрение в код SQL-инъекции вызывает изменение в логике выполнения SQL-запроса, изначально он выглядел так:
Но если через наш прокси передать в качестве параметра customerName строку c условием OR 1=1, то выполнится запрос и выведутся балансы всех пользователей в базе, поскольку выражение 1=1 всегда истинно, и вычисления происходят по кратчайшему пути. Метод инъекции кода SQL основан на:
- Смешение недоверенных пользовательских данных и кода/конструкций языка
- Возможные контексты — SQL, HTML, XML/XSLT, OS, LDAP, HTTP
внедрение части SQL-конструкции из входных данных в легитимный запрос к СУБД
Атака
Итоговый SQL-запрос
Здесь была рассмотрена SQL-инъекция с внедрением в строковый параметр. Чаще всего используются следующие конструкции для внедрения в строковый параметр:
Но существует еще несколько конструкций SQL, позволяющих внедрять свой код для поиска уязвимостей сайтов. Это использование оператора UNION, позволяющего объединять результаты нескольких запросов, UNION + group concat() – эта конструкция позволяет объединять несколько конструкций в одну, расщепление SQL-запроса и экранирование хвоста запроса.
Все эти конструкции по сути выполняют манипуляции с подстановкой в параметры дополнительных символов, в простейшем случае одинарной (реже двойной или обратной) кавычки. Если поведение страницы аномальное, до подстановки инъекции и после подстановки различается ответ, то страница уязвима для этого типа атаки.
Аномальным считается любое поведение сайта, при котором страницы, получаемые до и после подстановки инъекции, различаются, но при этом не выведена страница о неверном формате параметров.