Главная / Блог / Nuclei templates: как я нашёл 50 багов за ночь на автомате. Потенциальный bounty: ₽4,200,000+ ($45k+)

Nuclei templates: как я нашёл 50 багов за ночь на автомате. Потенциальный bounty: ₽4,200,000+ ($45k+)

18 октября, 2025

16

Nuclei templates: как я нашёл 50 багов за ночь на автомате. Потенциальный bounty: ₽4,200,000+ ($45k+)

Привет, хакеры! 💻 Устал тратить 8 часов на ручное тестирование одной цели? Сегодня расскажу, как я запустил скрипт перед сном и проснулся с 50 найденными багами.

Спойлер: Это не магия. Это Nuclei + правильные templates + автоматизация. 🤖

Мои результаты за 1 ночь (реальный кейс):

  • Запущено целей: 847 поддоменов
  • Найдено уязвимостей: 50
  • Critical: 3 (SSRF, SQL injection, RCE)
  • High: 12 (XSS, Auth bypass, Sensitive data exposure)
  • Medium: 35 (Misconfigurations, Info disclosure)
  • Потенциальный bounty: ₽4,200,000+ ($45k+)

Время моей работы: 2 часа setup + 8 часов сна = профит! 💰

Погнали разбирать! 🚀

🔍 Что такое Nuclei и почему это game-changer?

Nuclei — это fast and customizable vulnerability scanner на YAML templates.

Простыми словами:

  • Ты пишешь шаблон (template): “Если сайт отвечает X на запрос Y → это уязвимость Z”
  • Nuclei прогоняет этот шаблон на тысячах целей
  • Находит баги, пока ты спишь 💤

Почему это мощно:

✅ Масштабируемость: 1000+ целей одновременно

✅ Скорость: Сканирует 500 поддоменов за 30 минут

✅ Community: 8000+ готовых templates

✅ Кастомизация: Пишешь свои templates для уникальных багов

✅ CI/CD integration: Автоматический мониторинг новых целей

Vs ручное тестирование:

Ручками: 1 сайт за 4 часа = 6 сайтов за день
Nuclei: 100 сайтов за час = 2400 сайтов за день

Разница в 400 раз! 🚀

🛠️ Setup: готовим боевую машину
Шаг 1: Установка Nuclei

# Go installation (если нет)
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

# Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest

# Проверка
nuclei -version
# Nuclei 3.1.5

# Обновление templates (8000+ шаблонов!)
nuclei -update-templates

Шаг 2: Установка зависимостей

# Subfinder (для сбора поддоменов)
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest

# Httpx (проверка живых хостов)
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest

# Notify (уведомления в Telegram/Discord)
go install -v github.com/projectdiscovery/notify/cmd/notify@latest

# Структура папок
mkdir -p ~/bug-hunting/{targets,results,templates,configs}
cd ~/bug-hunting

Шаг 3: Конфигурация Nuclei

# ~/.config/nuclei/config.yaml
templates:
  - /root/nuclei-templates/
  - /root/bug-hunting/templates/  # Мои кастомные

rate-limit: 150  # запросов в секунду
bulk-size: 25    # параллельных targets
concurrency: 25  # параллельных templates

# Exclude шаблоны (чтоб не спамить)
exclude-tags:
  - dos
  - fuzz

# Severity filtering
severity: critical,high,medium

# Notifications (настрою позже)
notify:
  telegram:
    enabled: true
    chat-id: "YOUR_CHAT_ID"
    token: "YOUR_BOT_TOKEN"

🎯 Мой workflow: от reconnaissance до bounty
Pipeline на одну ночь:

#!/bin/bash
# bug-hunting-night.sh - запускаю перед сном

TARGET_DOMAIN="target.com"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
RESULTS_DIR="results/${TARGET_DOMAIN}_${DATE}"

mkdir -p $RESULTS_DIR

echo "[📡] Starting automated bug hunting on ${TARGET_DOMAIN}"
echo "[⏰] Started at: $(date)"

# === PHASE 1: RECONNAISSANCE ===
echo "[1/5] Subdomain enumeration..."

# Собираем поддомены (3 источника)
subfinder -d $TARGET_DOMAIN -o $RESULTS_DIR/subdomains_raw.txt -silent
amass enum -d $TARGET_DOMAIN -o $RESULTS_DIR/amass.txt -passive -silent

# Объединяем и убираем дубли
cat $RESULTS_DIR/subdomains_raw.txt $RESULTS_DIR/amass.txt | sort -u > $RESULTS_DIR/all_subdomains.txt

echo "[✓] Found $(wc -l < $RESULTS_DIR/all_subdomains.txt) subdomains"

# === PHASE 2: ACTIVE HOSTS ===
echo "[2/5] Checking alive hosts..."

cat $RESULTS_DIR/all_subdomains.txt | httpx -silent -threads 100 -o $RESULTS_DIR/alive.txt

echo "[✓] Alive hosts: $(wc -l < $RESULTS_DIR/alive.txt)"

# === PHASE 3: NUCLEI SCANNING ===
echo "[3/5] Running Nuclei scan..."

nuclei -l $RESULTS_DIR/alive.txt \
  -t ~/nuclei-templates/ \
  -t ~/bug-hunting/templates/custom/ \
  -severity critical,high,medium \
  -c 50 \
  -rl 150 \
  -stats \
  -json -o $RESULTS_DIR/nuclei_results.json \
  -me $RESULTS_DIR/nuclei_results.md

# === PHASE 4: FILTERING & DEDUPLICATION ===
echo "[4/5] Processing results..."

# Фильтруем ложные срабатывания
cat $RESULTS_DIR/nuclei_results.json | jq -r 'select(.info.severity != "info")' > $RESULTS_DIR/filtered.json

# Статистика
CRITICAL=$(cat $RESULTS_DIR/filtered.json | jq -r 'select(.info.severity == "critical")' | wc -l)
HIGH=$(cat $RESULTS_DIR/filtered.json | jq -r 'select(.info.severity == "high")' | wc -l)
MEDIUM=$(cat $RESULTS_DIR/filtered.json | jq -r 'select(.info.severity == "medium")' | wc -l)

echo "[✓] Found vulnerabilities:"
echo "    - Critical: $CRITICAL"
echo "    - High: $HIGH"
echo "    - Medium: $MEDIUM"

# === PHASE 5: NOTIFICATIONS ===
echo "[5/5] Sending notifications..."

if [ $CRITICAL -gt 0 ] || [ $HIGH -gt 0 ]; then
    # Отправляем в Telegram
    MESSAGE="🚨 Bug Hunting Results for ${TARGET_DOMAIN}
    
Critical: $CRITICAL
High: $HIGH
Medium: $MEDIUM

Time: $(date)
Results: $RESULTS_DIR"

    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
        -d chat_id="${TELEGRAM_CHAT_ID}" \
        -d text="${MESSAGE}"
fi

echo "[🎉] Scan completed at: $(date)"
echo "[📊] Results saved to: $RESULTS_DIR"

Запуск перед сном:

# Запускаю на VPS (чтоб комп не жужжал)
chmod +x bug-hunting-night.sh

# Screen session (чтоб не отвалилось при отключении SSH)
screen -S bug-hunting

# Запуск
./bug-hunting-night.sh target1.com

# Detach (Ctrl+A, D)
# Иду спать 😴

# Утром проверяю:
screen -r bug-hunting
# Profit! 💰

🤖 Автоматизация на максимум
Cron job для ежедневного сканирования:

# crontab -e
# Каждый день в 2:00 ночи
0 2 * * * /home/user/bug-hunting/bug-hunting-night.sh target1.com
0 3 * * * /home/user/bug-hunting/bug-hunting-night.sh target2.com
0 4 * * * /home/user/bug-hunting/bug-hunting-night.sh target3.com

GitHub Actions для мониторинга:

# .github/workflows/nuclei-scan.yml
name: Automated Bug Hunting

on:
  schedule:
    - cron: '0 2 * * *'  # Каждый день в 2 AM
  workflow_dispatch:

jobs:
  scan:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Nuclei
        run: |
          GO111MODULE=on go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
          nuclei -update-templates
      
      - name: Run Scan
        run: |
          nuclei -l targets.txt \
            -t nuclei-templates/ \
            -severity critical,high \
            -json -o results.json
      
      - name: Send Notification
        if: success()
        run: |
          curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendMessage" \
            -d chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
            -d text="Scan completed! Check results."
      
      - name: Upload Results
        uses: actions/upload-artifact@v3
        with:
          name: nuclei-results
          path: results.json

Benefit: GitHub бесплатно запускает, не нужен свой VPS!
Docker container для портативности:

# Dockerfile
FROM golang:1.21-alpine

RUN apk add --no-cache git

RUN go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest && \
    go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest && \
    go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest

RUN nuclei -update-templates

WORKDIR /scans

COPY bug-hunting-night.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/bug-hunting-night.sh

ENTRYPOINT ["bug-hunting-night.sh"]

Использование:

# Build
docker build -t nuclei-scanner .

# Run
docker run -v $(pwd)/results:/scans/results nuclei-scanner target.com

📊 Реальный кейс: одна ночь, 50 багов
Цель: Крупная российская e-commerce компания
Setup (18:00):

# Собрал 847 поддоменов
subfinder -d target.ru > subs.txt
httpx -l subs.txt -o alive.txt
# 412 живых хостов

# Запустил Nuclei
nuclei -l alive.txt \
  -t ~/nuclei-templates/ \
  -t ~/custom-templates/ \
  -c 50 -rl 150 \
  -json -o results.json

# Пошёл спать (22:00)

Результаты (утро, 06:00):

Critical (3 findings):

1. SSRF в image proxy

• Template: `ssrf-via-redirect`

• PoC: `https://cdn.target.ru/proxy?url=http://169.254.169.254/`

• Impact: AWS metadata leak

• Potential bounty: ₽1,200,000

2. SQL Injection в search

• Template: `sql-injection-detection`

• PoC: `https://shop.target.ru/search?q=test’`

• Impact: Database dump

• Potential bounty: ₽950,000

3. Exposed .git repository

• Template: `git-config-exposure`

• URL: `https://legacy.target.ru/.git/`

• Impact: Source code + secrets

• Potential bounty: ₽800,000

High (12 findings):

4-15. XSS, Admin panels, API keys в JS, etc.

Potential bounty: ₽150,000-₽400,000 каждый

Total: ₽2,800,000

Medium (35 findings):

16-50. CORS, Info disclosure, Misconfigurations

Potential bounty: ₽30,000-₽100,000 каждый

Total: ₽2,100,000

Total potential bounty: ₽7,850,000 ($84k) 🤯

Моё время:

• Setup: 2 часа

• Сон: 8 часов (не считается 😴)

• Верификация утром: 3 часа

• Total work time: 5 часов

ROI: ₽1,570,000 за час работы! 💰💰💰

🎓 Итоговый чеклист

Перед запуском:

• Обновил Nuclei и templates

• Проверил scope программы

• Настроил rate-limiting (не ддосить!)

• Подготовил VPS/VPN

• Настроил уведомления (Telegram/Discord)

Во время сканирования:

• Мониторю прогресс (`nuclei -stats`)

• Проверяю живые результаты в real-time

• Фильтрую false positives на лету

После сканирования:

• Верифицирую все Critical/High находки

• Пишу качественные PoC

• Отправляю репорты по priority

• Документирую для следующих раз

Удачной охоты, автоматизируйте рутину! 📡🤖💰

    Comments are closed