От логинов до SQL: какие бреши в web-приложениях ищут хакеры и как их устранить

От логинов до SQL: какие бреши в web-приложениях ищут хакеры и как их устранить

Изображение: recraft

Сегодня веб-приложения остаются основой для функционирования бизнеса. Их стабильность влияет как на финансовую, так и репутационную составляющие организации. Но также внешние ресурсы компаний являются привлекательной целью для злоумышленников. По данным представителей сервиса WAF ГК «Солар», за 2025 год общее количество кибератак на веб-приложения выросло на 89% в сравнении с 2024 годом. Учитывалась статистика по организациям из разных сфер, в том числе госсектора, логистики и транспорта, ритейла, финансов, промышленности.

Успешность такой кибератаки зависит в том числе от наличия уязвимостей в веб-приложениях. Ими злоумышленники могут пользоваться, чтобы получить доступ к системе, а затем ее компрометировать. Компания «Анлим», центр компетенций по информационной безопасности, не первый год специализируется на пентесте (от англ. penetration test). Это имитация действий хакера, целью которой является компрометация системы, нередко с помощью ее слабых сторон, в том числе и в веб-приложениях. За время многочисленных проектов по взлому ИТ-инфраструктуры специалисты компании «Анлим» назвали три наиболее распространенных уязвимости, а также рассказали о способах их устранения.


Перечисление пользователей

Уязвимость по перечислению пользователей (user enumeration) является, пожалуй, наиболее частой в веб-приложениях. По крайней мере по количеству использований в проектах компании «Анлим». Она позволяет злоумышленникам, анализируя ответы сервера, выявлять уже существующие логины и выполнять атаку Брутфорс со 100% эффективностью. За счет подобного можно получить доступ к личному аккаунту пользователя, а затем продолжить тестирование приложения уже с большим количеством прав.

Самыми явными показателями того, что уязвимость «Перечисление пользователей» есть в системе, являются:

  • Разные ответы сервера. Например, «Пользователь не найден» или «Неверный пароль» при существующем логине;
  • Долгое время ответа сервера. Например, 50 миллисекунд, если пользователь зарегистрирован в системе и 2000 миллисекунд – если не найден.

XSS

Межсайтовый скриптинг (XSS) – уязвимость веб-приложений, при которой злоумышленник внедряет вредоносный скрипт (преимущественно JavaScript) в страницу, просматриваемую пользователем. При открытии браузер выполняет эту команду, воспринимая ее в качестве легитимной части кода. Существуют и иные виды XSS-уязвимостей, но такая является наиболее классической и легко воспроизводимой.

Среди потенциальных угроз от наличия XSS-уязвимостей в веб-приложениях выделяют следующее:

  • Хищение учетных данных: кража cookies (особенно сессионных) и их отправка на подконтрольный злоумышленнику сервер;
  • Перехват сессии: использование украденных cookies для выполнения действий от имени жертвы (смена пароля, перевод средств, публикация контента);
  • Фишинг: подмена содержимого страницы для кражи паролей, данных банковских карт;
  • Распространение вредоносного ПО: перенаправление на сайты, эксплуатирующие уязвимости браузера.

SQL

SQL-инъекция – это уязвимость, при которой злоумышленник внедряет произвольный SQL-код в запрос к базе данных. За счет таких действий можно изменить логику запроса или выполнить произвольные команды, что приводит к компрометации данных.

Как действует SQL-инъекция? Представим, что пользователь заходит на сайт, вводит логин «username» и пароль «0000». В свою очередь в базу данных web-приложения приходит подобный запрос: «Найди запись, где имя = ‘username’ И пароль = ‘0000’. Однако злоумышленник может внести изменение в эту команду, написав «Найди запись, где имя = ‘admin’ И пароль = ‘0000’». Сочетание двух дефисов обозначает начало комментария. Все, что после них, игнорируется. В итоге система не будет проверять пароль и пропустит пользователя только под логином «admin».

Наличие SQL-уязвимостей может нести ряд потенциальных угроз:

  • Несанкционированный доступ к информации – кража личной информации, паролей, платежных данных;
  • Модификация данных – изменение записей, подмена балансов, добавление учетных записей администраторов;
  • Удаление данных – полное или частичное уничтожение информации;
  • Эскалация привилегий – получение контроля над системой управления базами данных, а через нее – над операционной системой сервера.

Шаги по устранению

Чтобы избавиться от уязвимости по перечислению пользователей рекомендуется создать унифицированные сообщения на формах аутентификации, страницах восстановления паролей и формы регистрации. То есть они не будут зависеть от того, существует ли пользователь или нет. Также можно проверить конфигурацию, чтобы сделать время отклика одинаковым. Это поможет избежать анализа на основе длительности ответа.

При этом для уязвимостей XSS и SQL основным методом по устранению выступают санитизация кода – это комплекс мер по обработке пользовательского ввода (перед использованием данных в запросах к базам данных) и вывода (перед вставкой в HTML), чтобы избежать внедрения вредоносной команды.

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

Если рассматривать XSS-уязвимость, то санитизация кода, в основном, происходит на выходе, то есть при формировании HTML. Для этого нужно экранировать все данные, вставляемые в страницу:

  • Внутри HTML-текста: «<» в «<»;
  • Внутри атрибутов тегов: кавычки и другие служебные символы;
  • Внутри JavaScript-блоков: экранирование, чтоб данные не сломали скрипт.

При этом можно также применять безопасные HTML-фильтры, если требуется разрешить пользователям использовать форматирование, например, в комментариях. К ним, предположим, относятся библиотеки типа DOMPurify.

Если же нужно устранить SQL-уязвимость, то основной способ санитизации — использование параметризованных запросов (prepared statements), либо ORM-фреймворков. В этом случае обработка на уровне драйвера базы данных гарантирует, что переданные значения никогда не будут выполнены как SQL-код.

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


Современные киберугрозы становятся куда сложнее, а киберпреступники используют передовые технологии для взлома систем. Без регулярного тестирования на проникновение компании рискуют потерять конфиденциальные данные и репутацию. Также есть большая вероятность понести значительные финансовые убытки или столкнуться с остановкой бизнес-процессов. Важно, что главная цель пентеста – продемонстрировать проблему, которая может нанести реальный ущерб, рассказать о рисках и путях ее решения.

Компания «Анлим»
Автор: Компания «Анлим»
«Анлим» – интегратор качественных решений для информационной безопасности. Работает на рынке с 2012 года. Все эти годы команда развивает свои компетенции и расширяет портфель решений, чтобы помогать государственным и коммерческим организациям строить жизнеспособные системы информационной безопасности.
Комментарии: