Веб-пентест: OWASP Top 10, тестирование API и поиск логических багов
Как эта тема продолжает предыдущие статьи курса
В прошлых статьях вы построили фундамент (сети, Linux/Windows, HTTP, инструменты) и научились работать методологически (scope, OSINT, сканирование, перечисление и артефакты). Теперь мы применяем это к самой частой практике в коммерческом пентесте: проверке веб-приложений и API.
На уровне Middle от вас ждут не только умения «прогнать сканер», а способности:
быстро собрать картину приложения (роли, потоки, критичные данные);
находить типовые уязвимости из индустриальных чек-листов;
тестировать API так же уверенно, как веб-интерфейс;
находить логические баги (business logic), которые автоматикой почти не ловятся;
писать воспроизводимые доказательства и рекомендации.Ключевые ориентиры:
OWASP Top 10 2021
OWASP API Security Top 10
OWASP ASVS
PortSwigger Web Security Academy> Работайте только в легальном контуре. Даже безобидный на вид тест может нарушить правила, если выходит за рамки scope или создаёт нагрузку.
Картина веб-приложения: что именно мы тестируем
Веб-система почти всегда состоит из нескольких частей:
браузерный фронтенд (HTML/JS);
бэкенд (HTTP API, серверная логика);
база данных и кеши;
внешние интеграции (платежи, почта, SMS, SSO);
хранилища файлов (локальные или облачные);
инфраструктурные компоненты (reverse proxy, WAF, CDN).!Где пентестер перехватывает и анализирует запросы и какие типовые компоненты есть у веб-системы
На практике это означает: почти любая проверка сводится к контролю над входными данными (параметры, заголовки, куки, тело запроса) и проверке того, как приложение:
аутентифицирует пользователя;
авторизует действие;
валидирует и обрабатывает вход;
пишет/читает данные;
взаимодействует с внешними сервисами.Методология веб-пентеста: поток работы Middle
Ниже — рабочий, воспроизводимый процесс, который удобно превращать в артефакты и отчёт.
Уточнить scope именно для веб
- домены и поддомены, окружения (prod/stage/dev), IP, пути;
- разрешены ли переборы, сканеры, нагрузка;
- есть ли тестовые аккаунты для разных ролей.
Собрать карту приложения
- основные разделы и бизнес-функции;
- роли и разрешения;
- критичные операции (платежи, смена email, выдача прав, выгрузки).
Базовая техническая разведка
- технологии, заголовки, куки, политика безопасности браузера;
- точки входа: формы, загрузки файлов, webhooks, API.
Проверки по OWASP Top 10
- не «всё подряд», а приоритизация по поверхности и рискам.
Отдельный трек: API
- аутентификация, авторизация, массовое назначение, rate limit.
Логика и злоупотребления
- проверка инвариантов (что
не должно быть возможно ни при каких условиях).
Доказательства и рекомендации
- точный запрос/ответ, шаги воспроизведения, влияние и исправление.
OWASP Top 10: как использовать список правильно
OWASP Top 10 — это не «чек-лист из 10 пунктов», а классификация самых распространённых и значимых классов рисков.
Ниже — OWASP Top 10 (2021) и практический взгляд пентестера: как искать и какие признаки.
| Категория OWASP | Что это на практике | Где часто проявляется |
|---|---|---|
| Broken Access Control | пользователь делает то, что не должен | IDOR, админские функции, смена чужих данных |
| Cryptographic Failures | утечки из-за слабой криптографии или её отсутствия | HTTP без TLS, слабые настройки cookies, хранение секретов |
| Injection | интерпретация данных как команд/запросов | SQL/NoSQL инъекции, OS command injection |
| Insecure Design | риск из-за неверной архитектуры/логики | отсутствие лимитов, неверные роли, опасные сценарии |
| Security Misconfiguration | неправильные настройки | лишние методы, debug, открытые панели |
| Vulnerable and Outdated Components | известные уязвимости в зависимостях | старые CMS, библиотеки, контейнеры |
| Identification and Authentication Failures | проблемы входа/сессий | слабые пароли, фиксация сессий, отсутствие MFA |
| Software and Data Integrity Failures | риск из-за цепочки поставки и целостности | небезопасные обновления, неподписанные артефакты |
| Security Logging and Monitoring Failures | атаки не замечаются | отсутствие логов входа, алертов, трассировки |
| SSRF | сервер делает запросы куда не должен | превью URL, импорты по ссылке, webhooks |
Broken Access Control: база, которую проверяют всегда
Access control — это ответ на вопрос: разрешено ли этому пользователю выполнить это действие над этим объектом. Самая частая ошибка: разработчик проверил «пользователь залогинен», но не проверил «это его объект».
Что тестировать:
вертикальная эскалация: доступ к админ-функциям от обычного пользователя;
горизонтальная: доступ к данным других пользователей (IDOR);
обход ограничений через прямые вызовы API;
манипуляции ролями в токенах/профиле.Практические приёмы:
меняйте идентификаторы объектов (id, userId, accountId) и смотрите, выдаёт ли система чужие данные;
сравнивайте поведение UI и прямого API: UI может скрывать кнопку, но API всё равно доступно;
фиксируйте матрицу ролей: «роль → действие → ожидаемый результат».Injection: когда входные данные становятся кодом
Инъекция — это ситуация, когда приложение передаёт ваши данные в интерпретатор (SQL, shell, шаблонизатор) без правильной обработки.
Что важно для Middle:
подтверждать не только ошибкой, но и контролируемым эффектом (в рамках разрешённого);
понимать, какой именно интерпретатор участвует (SQL или NoSQL, bash или PowerShell);
помнить, что WAF и фильтры могут давать ложные ощущения защиты.Источники для практики техники и паттернов:
PortSwigger: SQL injectionSSRF: запросы с сервера как отдельная поверхность
SSRF появляется, когда сервер делает исходящие запросы по данным пользователя.
Где искать:
«загрузить по ссылке», «импортировать из URL», «сгенерировать превью»;
webhooks и интеграции, куда приложение отправляет запросы;
обработка изображений/документов с внешними ссылками.Что проверять:
можно ли заставить сервер ходить на внутренние адреса;
можно ли получить метаданные облака (если система в облаке и это в scope);
есть ли allowlist доменов и как она обходится.Материал:
PortSwigger: SSRFIdentification and Authentication Failures: вход, токены, сессии
Цель теста — не «подобрать пароль», а проверить, что механизм идентификации и сессии не позволяет:
входить без знания секрета;
фиксировать или подменять сессию;
сохранять токены небезопасно;
обходить MFA, если оно заявлено.Что собирать как артефакты:
параметры cookies (например, наличие HttpOnly, Secure, разумного времени жизни);
поведение logout (сессия реально инвалидируется или только удаляется cookie в браузере);
политика повторных попыток и rate limit.Security Misconfiguration: «всё лишнее — риск»
Проверяйте:
включён ли debug и подробные ошибки;
открыты ли административные панели;
какие HTTP-методы разрешены;
есть ли опасные заголовки и утечки версий.Инструментально это часто начинается с ручного curl и перехвата в Burp.
Тестирование API: как не пропустить главные классы ошибок
API — это не «что-то отдельное»: чаще всего именно API и есть реальный интерфейс управления данными. UI лишь вызывает эндпоинты.
Ориентир для системного подхода:
OWASP API Security Top 10Базовая карта API
Перед активными тестами соберите:
базовые URL (например, /api/v1/), версии API;
тип аутентификации: cookie session, JWT, OAuth2;
какие роли есть и какие эндпоинты доступны;
форматы: JSON, XML, multipart (загрузки).Источники истины:
Swagger/OpenAPI (/swagger, /openapi.json), если доступно;
трафик в прокси (Burp/ZAP) во время обычной работы;
мобильное приложение, если оно в scope.Критичный класс: BOLA (Broken Object Level Authorization)
BOLA — это API-вариант IDOR: объект доступен по идентификатору, но сервер не проверяет, что он принадлежит пользователю.
Практика теста:
найдите запрос вида GET /api/orders/12345;
создайте второй аккаунт;
замените идентификатор на заказ второго аккаунта;
проверьте чтение и модификацию (GET, PATCH, DELETE).Важно фиксировать, какие данные утекли и какое действие выполнено.
Аутентификация и токены в API
Что часто ломается:
принятие токена «в любом месте» (например, и в cookie, и в header), что расширяет поверхность атаки;
неправильная проверка подписи JWT или использование небезопасных настроек;
слишком долгоживущие refresh-токены;
отсутствие привязки сессии к контексту (например, устройство, IP) там, где это требуется моделью угроз.Полезная практика: проверить, что сервер отклоняет запросы при:
отсутствующем токене;
поддельном токене;
токене другого пользователя;
токене с истёкшим сроком.Mass Assignment: когда сервер принимает лишние поля
Ошибка возникает, когда API принимает JSON и автоматически мапит поля на модель, позволяя менять то, что менять нельзя.
Пример ситуации:
клиент отправляет { "name": "Alice" };
вы добавляете { "role": "admin" } или { "isPaid": true };
сервер «послушно» применяет.Как тестировать:
сравните поля в ответе и в запросе;
попробуйте добавить поля, похожие на системные (role, isAdmin, status, price, ownerId);
смотрите, появились ли изменения в профиле/объекте после запроса.Rate limiting и защита от перебора
API часто забывают защищать лимитами даже когда UI защищён.
Проверяйте:
есть ли лимиты на login, reset password, OTP;
блокируются ли агрессивные запросы к «дорогим» эндпоинтам;
корректны ли ответы при превышении лимита.Важно: любой тест на лимиты согласуйте с Rules of Engagement, чтобы не устроить DoS.
Валидация входных данных и схемы
Что проверять:
типы (строка вместо числа, массив вместо объекта);
граничные значения (пусто, очень длинно, отрицательно);
неожиданные поля;
вложенные структуры.Это помогает находить не только баги, но и возможные инъекции или обходы логики.
Логические баги: как мыслит Middle
Логический баг — это нарушение бизнес-правил, когда технически всё «работает», но злоумышленник получает выгоду из неверной последовательности действий или пропущенной проверки.
Автоматические сканеры почти всегда слабы здесь, потому что:
нужен контекст ролей и процесса;
важна последовательность шагов;
результат может быть финансовым или операционным, а не техническим.Подход «инварианты и злоупотребления»
Сформулируйте инварианты: что должно быть истинно всегда.
Примеры инвариантов:
пользователь не может получить скидку больше установленного лимита;
цена товара не может стать отрицательной;
один и тот же купон нельзя применить дважды;
нельзя оплатить заказ чужой картой от имени другого пользователя;
нельзя менять роль через пользовательский интерфейс или API.Дальше придумайте злоупотребления:
поменять порядок шагов (сначала «подтвердить», потом «изменить»);
повторить запрос (replay) после успешного действия;
сделать гонку (race condition) параллельными запросами;
подменить идентификаторы объектов в критичных местах;
обойти UI и вызвать API напрямую.!Ментальная модель, как системно искать бизнес-логические уязвимости
Race condition: когда два запроса побеждают систему
Race condition появляется, если приложение не ожидает одновременных действий.
Типовые примеры:
двойное списание или двойная выдача бонуса;
обход лимита на применение купона;
покупка товара по старой цене при одновременном обновлении.Как тестируют аккуратно:
находят критичный запрос (например, «применить купон»);
пытаются отправить его параллельно (в Burp это часто делают через инструменты для повторной отправки и параллелизма);
проверяют эффект на балансе/заказе.Важно: такие тесты особенно легко превращаются в DoS или порчу данных, поэтому их нужно согласовать и выполнять в тестовой среде или на тестовых сущностях.
Признаки логических уязвимостей в интерфейсе и API
Сигналы, на которые стоит реагировать:
критичные параметры приходят от клиента (например, price, role, isVerified);
сервер «верит» данным фронтенда без перепроверки;
в ответах видны лишние поля, которые «как будто внутренние»;
один и тот же эндпоинт используется разными ролями без явной матрицы разрешений;
есть много переходов состояний (draft → confirmed → paid → shipped), но нет явных проверок.Практика в лаборатории: минимальный безопасный набор действий
Ниже — что стоит отработать на учебном стенде (например, OWASP Juice Shop), не выходя в «опасные» техники.
Настройте перехват трафика
- браузер → Burp/ZAP → приложение.
Составьте карту приложения
- роли, ключевые функции, список эндпоинтов.
Отработайте проверку авторизации
- минимум два аккаунта;
- попытки доступа к чужим объектам.
Отработайте базовый трек API
- поиск OpenAPI/Swagger;
- проверка BOLA и mass assignment.
Отработайте один сценарий логического теста
- повтор запроса (replay) на критичное действие;
- тест изменения порядка шагов.
Как оформлять находки, чтобы это было уровнем Middle
Минимальный стандарт описания уязвимости (в заметках и в отчёте):
Контекст
- где найдено (URL/эндпоинт), какая роль, какие предусловия.
Шаги воспроизведения
- последовательность действий и точный запрос (метод, путь, параметры).
Фактический результат
- что произошло (данные утекли, действие выполнено).
Ожидаемый результат
- что должно было быть.
Влияние
- какие риски для бизнеса и безопасности.
Рекомендация
- конкретное исправление (проверка авторизации на сервере, allowlist, валидация схем, транзакции/блокировки при гонках).
Полезный ориентир для требований к контролям:
OWASP ASVSЧто должно получиться после этой статьи
После освоения материала вы должны уметь:
использовать OWASP Top 10 как карту рисков и приоритизации, а не как «список ради списка»;
тестировать API на BOLA, mass assignment, ошибки аутентификации и отсутствие лимитов;
строить карту ролей и объектов и проверять авторизацию системно;
искать логические баги через инварианты, последовательность шагов и повторы запросов;
оформлять находки с воспроизводимостью и понятным влиянием.