Я нашёл баг - что дальше? Гайд для новичков

Окей, ты тыкал в приложение, крутил запросы в Burp Suite, и бац - что-то сломалось не так, как должно было. Ты видишь чужие данные, обходишь авторизацию или выполняешь SQL-запрос. Сердце колотится. Что делать? Куда бежать? Кому писать? Сейчас разберём по шагам, чтобы не облажаться. 🎯

Шаг 0: Стоп! Не делай херню

Прежде чем радоваться и репортить, запомни три железных правила:

НЕ ТРОГАЙ ЧУЖИЕ ДАННЫЕ: Нашёл доступ к базе? Не скачивай, не копируй, не сливай. Посмотрел 2-3 записи для proof-of-concept - и всё, хватит. 🚫

НЕ ЛОМАЙ ПРОДАКШН: Не удаляй данные, не делай DoS, не спамь запросами. Твоя задача - показать, что баг существует, а не устроить апокалипсис.

НЕ ТРЕЩИ О НАХОДКЕ: Не постишь в соцсети "Йоу, я взломал Яндекс!". Не хвастаешься друзьям с деталями. Это называется responsible disclosure - нашёл, зарепортил, заткнулся до фикса.

Нарушишь эти правила - превратишься из баг-хантера в подозреваемого по статье 272 УК РФ. Не надо так. ⚖️

Шаг 1: Убедись, что это реально баг

Иногда то, что кажется багом, на самом деле - фича или ты что-то не так понял. Проверь:

Воспроизводимость

Можешь повторить баг 3 раза подряд? Если да - окей, это реальная уязвимость. Если сработало один раз из десяти - возможно, это race condition или нужны специфичные условия. Опиши их.

Пример:
Нашёл IDOR: меняешь user_id=123 на user_id=124 и видишь чужой профиль. Попробуй с разными ID, с разными аккаунтами. Работает стабильно? Баг подтверждён! ✅

Это в scope программы?

Открой правила Bug Bounty программы и проверь:

Что в scope: Обычно основной домен, мобильные приложения, API
Что вне scope: Тестовые поддомены, старые версии, сторонние интеграции

Нашёл XSS в test.example.com, а в scope только example.com? К сожалению, это out of scope, не зарепортишь. 😢

Это действительно уязвимость?

Некоторые вещи кажутся багами, но ими не являются:

НЕ БАГ:

  • Missing security headers (типа X-Frame-Options) без реального impact
  • Отсутствие rate limiting само по себе (нужно показать атаку)
  • Self-XSS (ты можешь заxssить только себя)
  • Информация в HTML-комментариях, если она публичная

РЕАЛЬНЫЙ БАГ:

  • Stored XSS (затрагивает других пользователей)
  • IDOR с доступом к приватным данным
  • SQL Injection с реальной эксплуатацией
  • Authentication bypass

Если сомневаешься - всё равно репорть, но объясни impact. Пусть сами решат. 🤷‍♀️

Шаг 2: Собери доказательства

Твой репорт без proof-of-concept - это просто слова. Нужны железобетонные доказательства.

Скриншоты

Делай скрины каждого шага:

  • Начальное состояние
  • Твои действия (запрос в Burp, команда в консоли)
  • Результат (доступ получен, данные видны, код выполнился)

Лайфхак: Используй инструменты типа Flameshot (Linux) или ShareX (Windows) для быстрых скринов с аннотациями. Стрелочки, подчёркивания - это визуально помогает. 📸

HTTP-запросы и ответы

Копируй RAW запросы из Burp Suite. Формат должен быть такой:

POST /api/user/profile HTTP/1.1
Host: example.com
Cookie: session=abc123
Content-Type: application/json
{"user_id": 124}

И ответ:

HTTP/1.1 200 OK
Content-Type: application/json
{"name": "Ivan Petrov", "email": "ivan@secret.com", "phone": "+79991234567"}

Это показывает точно, что и как ты делал. 🔍

Видео (опционально, но круто)

Для сложных багов или bug chains запиши видео. Покажи весь процесс от начала до конца. Используй OBS Studio или SimpleScreenRecorder. Загрузи на YouTube (unlisted) или Google Drive.

Когда нужно видео:

  • Bug chain из 3+ шагов
  • Race condition (нужно показать timing)
  • Сложная эксплуатация, которую сложно объяснить текстом

PoC-скрипт (для продвинутых)

Если баг можно эксплуатировать скриптом — приложи код. Но комментируй каждую строку, чтобы понятно было.

import requests
# Эксплуатация IDOR в API профилей
def exploit_idor(target_user_id):
url = f"https://example.com/api/user/{target_user_id}"
cookies = {"session": "твоя_сессия"}

response = requests.get(url, cookies=cookies)
print(response.json())
# Получаем данные пользователя с ID 124
exploit_idor(124)

Это показывает, что ты не просто нажал кнопку, а понимаешь, что делаешь. Респект! 💪

Шаг 3: Оцени серьёзность (severity)

Компании платят по-разному в зависимости от критичности бага. Нужно понимать, что ты нашёл.

Классификация по severity

Critical (критичный):

  • Remote Code Execution (RCE)
  • SQL Injection с доступом ко всей базе
  • Authentication bypass (полный доступ без пароля)
  • Массовая утечка персональных данных

High (высокий):

  • Stored XSS на главной странице
  • IDOR с доступом к приватным данным
  • SSRF с доступом к внутренним сервисам
  • Payment bypass (обход оплаты)

Medium (средний):

  • Reflected XSS
  • IDOR с доступом к несенситивным данным
  • CSRF на важных действиях
  • Information disclosure (утечка email'ов, версий ПО)

Low (низкий):

  • Open redirect
  • Missing security headers с минимальным impact
  • CSRF на неважных действиях
  • Self-XSS

Informational (информационный):

  • Missing best practices без реальной атаки
  • Интересные находки, но без эксплуатации

Не завышай severity - компания всё равно пересмотрит. Лучше быть честным. 🎯

Impact — главное слово

Severity зависит от impact'а. Задай себе вопросы:

  • Сколько пользователей затронуто? (один, тысячи, все?)
  • Какие данные скомпрометированы? (публичные, приватные, финансовые?)
  • Насколько легко эксплуатировать? (один клик или нужна сложная цепочка?)
  • Какой ущерб можно нанести? (украсть данные, угнать аккаунты, заработать денег незаконно?)

Чем больше impact — тем выше severity и выплата. 💰

Шаг 4: Напиши качественный репорт

Это самая важная часть. Хороший репорт = быстрое принятие + щедрая выплата. Плохой репорт = duplicate/informative/closed.

Структура идеального репорта

  1. Заголовок (Title)

Краткое описание бага. Без воды.

✅ Хорошо: "IDOR в API /user/profile позволяет читать личные данные любого пользователя"
❌ Плохо: "Нашёл баг в вашем приложении"

  1. Краткое описание (Summary)

2-3 предложения о сути бага.

Пример:
"Обнаружена уязвимость Insecure Direct Object Reference в API endpoint /api/user/profile. Изменяя параметр user_id в запросе, атакующий может получить доступ к личным данным любого пользователя, включая email, телефон и адрес."

  1. Severity

Твоя оценка: Critical/High/Medium/Low. Объясни почему.

Пример:
"Severity: High. Уязвимость затрагивает все 500,000+ пользователей платформы и позволяет массово скрапить персональные данные."

  1. Шаги воспроизведения (Steps to Reproduce)

Пошаговая инструкция. Пиши так, чтобы джуниор-разработчик мог повторить.

Пример:

Шаг 1: Зарегистрируйся в приложении и авторизуйся
Шаг 2: Перехвати запрос к /api/user/profile в Burp Suite
Шаг 3: Измени параметр user_id=123 на user_id=124
Шаг 4: Отправь запрос
Шаг 5: Наблюдай доступ к профилю пользователя с ID 124
  1. Proof of Concept

HTTP-запросы, скрины, видео, код. Всё, что собрал на шаге 2.

  1. Impact

Что может сделать атакующий? К чему это приведёт?

Пример:
"Атакующий может:

  • Скрапить email и телефоны всех пользователей для фишинга
  • Получить адреса доставки для целевых атак
  • Продать базу данных на чёрном рынке
  • Нарушить GDPR, что грозит штрафами до €20M"
  1. Рекомендации по исправлению (Remediation)

Не обязательно, но показывает твой профессионализм.

Пример:
"Рекомендуется добавить проверку прав доступа на backend:

  • Проверять, что user_id в запросе совпадает с ID авторизованного пользователя
  • Внедрить access control list (ACL) для ресурсов
  • Логировать попытки доступа к чужим данным"

Язык репорта

Для российских компаний: Пиши на русском. Грамотно, без мата (как бы ни хотелось 😅). Технические термины можно на английском.

Для западных компаний: Английский. Если не уверен в языке - используй DeepL или GPT для вычитки.

Общее правило: Профессионально, но человечно. Не пиши как робот, но и не как в чате с кентами.

Шаг 5: Отправь репорт

Куда слать твой шедевр?

Платформы Bug Bounty

Standoff Bug Bounty:
Регистрируешься на платформе, выбираешь программу, жмёшь "Создать репорт", заполняешь форму.

HackerOne/Bugcrowd:
Аналогично. Находишь программу, Submit Report, заполняешь.

Прямые программы (Яндекс, VK):
Обычно есть форма на сайте или email типа security@company.com.

Что будет дальше?

Ответ "Triaged": Ура! Баг подтверждён, его будут фиксить. Жди выплату. 🎉

Ответ "Duplicate": Кто-то уже нашёл до тебя. Обидно, но нормально. В следующий раз успеешь первым.

Ответ "Informative": Баг есть, но не критичный. Возможно, дадут символическую награду или спасибо.

Ответ "N/A" (Not Applicable): Это не баг или out of scope. Учись и копай дальше.

Ответ "Need More Info": Не хватает деталей. Дополни репорт скринами/шагами.

Молчание: Некоторые компании отвечают долго (неделями). Терпение. 🕐

Шаг 6: Жди фикса и выплату

Сроки

Быстрые компании: Яндекс, VK - 1-2 недели до ответа, 2-4 недели до фикса и выплаты
Средние: Standoff программы - 2-4 недели
Медленные: Некоторые западные компании - месяцами тянут

Выплата

После фикса тебе придёт уведомление о выплате. Способы:

Российские компании:

  • Перевод на карту (нужны паспортные данные)
  • Самозанятый (НПД) - даёшь ИНН, получаешь на счёт
  • ИП - по договору

Западные компании:

  • PayPal (если не заблокирован для РФ)
  • Крипта (Bitcoin, USDT)
  • Bugcrowd Payments (через посредников)

Сроки выплат: от недели до месяца после фикса. 💸

Disclosure

Когда баг зафиксят, можешь попросить разрешение на публичный disclosure (опубликовать write-up). Некоторые компании разрешают, некоторые нет. Респект и репутация растут с публикациями, но не нарушай NDA.

Шаг 7: Если что-то пошло не так

Репорт игнорируют

Подожди 2 недели, потом напиши follow-up. Если через месяц тишина - попробуй другие каналы (соцсети компании, личка их security team).

Отказались платить

Если баг реальный, но компания говорит "спасибо, но не заплатим" - это бывает. Не все программы платят за все баги. Читай правила программы.

Тебя обвиняют в атаке

Если соблюдал правила программы, не трогал чужие данные и был в scope - ты защищён. Если вышел за рамки - готовься оправдываться. Вот почему важно читать Terms & Conditions.

Конфликт с компанией

Если считаешь, что тебя обманули (занизили severity, не заплатили) - можешь:

  • Написать в поддержку платформы (HackerOne, Standoff)
  • Попросить медиацию
  • Публично (аккуратно!) описать ситуацию (last resort)

Бонус: Чек-лист перед отправкой

Прежде чем жать "Submit", проверь:

✅ Баг воспроизводится стабильно
✅ Это в scope программы
✅ Есть чёткие шаги воспроизведения
✅ Приложены скрины/видео/HTTP-запросы
✅ Описан impact
✅ Не трогал чужие данные (макс 2-3 записи для PoC)
✅ Язык грамотный, без мата и агрессии
✅ Severity адекватна реальному риску
✅ Всё проверил дважды

Если всё ОК - жми "Отправить" и иди отдыхать. Ты молодец! 🚀

Психологическая подготовка

Если это твой первый баг

Волнение - норма. Все через это прошли. Даже если репорт закроют как duplicate - это опыт. Ты теперь знаешь, как это работает.

Если получишь duplicate

Не расстраивайся. Означает, что ты на правильном пути и искал правильно. Кто-то просто был быстрее. В следующий раз ты будешь первым. 💪

Если получишь выплату

Ахуенно! Но не расслабляйся. Это только начало. Первая выплата - самая сладкая, но следующие будут ещё круче.

Если получишь N/A

Учись. Прочитай, почему закрыли. Может, ты не так что-то понял. Это тоже ценный опыт.

Главное правило

Будь профессионалом, а не хулиганом. Твоя цель - помочь компании стать безопаснее и заработать. Не троллить, не шантажировать, не угрожать. Ethical hacking - это про этику.

Компании платят не за баги, а за помощь. Если будешь вести себя как мудак - тебя забанят везде и никто не захочет работать с тобой. Если будешь профи - тебя будут звать в закрытые программы и платить больше. 🎯

Заключение

Итак, ты нашёл баг. Ты проверил, что это реально уязвимость. Собрал доказательства. Написал качественный репорт. Отправил. Ждёшь ответа.

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

Первый баг - самый сложный. Дальше будет проще. Ты научишься репортить быстрее, писать лучше, находить круче. Это как левелап в игре - каждый баг делает тебя сильнее.

Так что не бойся, не тормози, жми "Submit" и будь готов к своему первому чеку. Добро пожаловать в тусовку баг-хантеров! 🔥💻🎉

8 views·1 share