Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ApiHunter — Асинхронный сканер безопасности API на Rust для проверок CORS, CSP, GraphQL, JWT, OpenAPI и активных проверок состояния API. | Kitploit
Инструменты/GitHubGitHub/teycir/apihunter
РазведкаСканеры уязвимостейДинамический анализ (песочница)Эксплуатация веб-приложенийСбор информацииВеб-безопасностьТестирование на ПроникновениеDevSecOpsБезопасность API
GitHubteycir/apihunter

ApiHunter

Асинхронный сканер безопасности API на Rust для проверок CORS, CSP, GraphQL, JWT, OpenAPI и активных проверок состояния API.

1921 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
РепозиторийСайт

Поддержите разработку

Если этот проект помогает вашей работе, поддержите поддержку и новые функции.

ETH кошелек для пожертвований
0x11282eE5726B3370c8B480e321b3B2aA13686582

Ethereum donation QR code

Отсканируйте QR-код или скопируйте адрес кошелька выше.

🎯 ApiHunter

Typing SVG

Rust Security API Async CI License


📺 Видеодемонстрация

ApiHunter Demo Video
Нажмите, чтобы посмотреть полную демонстрацию на YouTube

🖥️ Снимки приложения Desktop

ApiHunter Desktop — панель обзора с индикатором версии, проверкой работоспособности и вводом цели полного сканирования

ApiHunter Desktop — элементы управления полным сканированием: предустановки Quick Passive / Deep Active, сворачиваемые разделы Safety, Runtime Limits и Scanner Toggles

ApiHunter Desktop — панель аналитики результатов: тепловая карта серьезности, карта худшей цели, эффективность сканирования, сводка, разбивка результатов и основные проверки

ApiHunter Desktop — нижняя панель результатов: рейтинг целей, покрытие сканера, разбивка серьезности проверок, сводка по целям и кнопки экспорта в один клик


📑 Содержание

  • Видеодемонстрация
  • Снимки приложения Desktop
  • Почему ApiHunter?
  • Модули сканера
  • Возможности
  • Сравнение с другими инструментами
  • Быстрый старт
  • Архитектура
  • Инструменты шаблонов
  • Скрипты сканирования
  • Стратегия тестирования
  • Документация
  • План развития
  • Установка
  • Справочник по CLI
  • Коды завершения
  • Безопасность и правовые ограничения
  • Связанные проекты
  • О проекте
  • Часто задаваемые вопросы
  • Лицензия

Асинхронный модульный сканер безопасности API для базового тестирования API и обнаружения регрессий.
Сочетает обнаружение с целевыми проверками (CORS/CSP/GraphQL/OpenAPI/JWT/API Security), используя адаптивную конкурентность и выводы, готовые для CI (NDJSON/SARIF).

Варианты использования: атака для red-team/тестирования на проникновение API, обнаружения и проверки эксплойтов, а также защита для блокировки регрессий в CI/CD, непрерывного усиления безопасности API и раннего обнаружения неверных конфигураций.

Сканирование в масштабе? См. Режим Triage — сканируйте 5000 целей за 20 минут с основными проверками безопасности, затем используйте Режим Enrich, чтобы добавить контекст угроз (порты, CVE, ASN, возраст домена) к результатам.

Naming

  • Project/repository: ApiHunter
  • Cargo package: apihunter
  • Library crate: api_scanner
  • CLI binary: apihunter (по умолчанию для cargo run)

Метаданные GitHub (рекомендуется)

Установите это в настройках репозитория GitHub для лучшей обнаруживаемости:

  • Описание: Асинхронный сканер безопасности API для CORS/CSP/GraphQL/JWT/OpenAPI и активных проверок состояния API.
  • Веб-сайт: https://github.com/Teycir/ApiHunter
  • Темы: rust, security, api-security, scanner, graphql, cors, csp, jwt, openapi, sarif, ndjson

Repository Flow```mermaid

flowchart LR A[CLI apihunter] --> B[main.rs] D[Input Sources] --> E[Pre-filter + Discovery] B --> C[HttpClient + Config] E --> F[runner.rs] C --> F

root@kitploit:~
F --> G1[Passive scanners]
F --> G2[Active scanners]

I[template-tool] --> H[CVE templates]
H --> G2

G1 --> J[Findings]
G2 --> J
J --> K[Reporter]
K --> L[Auto Reports]
K --> M[CI/CD Controls]
root@kitploit:~
## Почему ApiHunter?

### Основные преимущества

- **Архитектура, ориентированная на API**: Создан специально для REST/GraphQL API, а не адаптирован из сканеров веб-приложений
- **Интеллектуальное сокращение ложных срабатываний**: 
  - Обнаружение SPA catch-all с канареечными зондами
  - Контекстно-зависимая проверка секретов (фронтенд vs бэкенд)
  - Проверка содержимого тела и реферера
  - Снятие отпечатков ответов для пропуска повторяющихся находок
- **Безопасен для продакшена по дизайну**:
  - Адаптивная конкурентность (AIMD), снижающая нагрузку при ошибках
  - Ограничение частоты запросов на хост с настраиваемыми задержками
  - Контроль вежливости (повторы, таймауты, обход WAF)
  - Режим пробного запуска для активных проверок
- **Стелс и обход защиты**:
  - Ротация User-Agent во время выполнения из подобранного пула (assets/user_agents.txt)
  - Случайные задержки запросов с джиттером
  - Принудительная задержка для каждого хоста (избегает пакетных паттернов)
  - Логика повторных попыток с экспоненциальной задержкой
  - Инъекция пользовательских заголовков для смешивания с легитимным трафиком
  - Адаптивная синхронизация на основе ответов сервера
  - Отсутствие хардкодных отпечатков сканера в режиме по умолчанию

### Подробное описание методов стелса

ApiHunter использует несколько техник стелса для обхода WAF (Web Application Firewall) и систем защиты от ботов:

#### 1. Ротация User-Agent
**Что делает:** Случайным образом перебирает более 100 строк User-Agent реальных браузеров из файла (`assets/user_agents.txt`)

**Почему это работает:** Боты обычно используют один и тот же User-Agent (например, `curl/7.68.0`). Притворяясь Chrome, Firefox, Safari и т.д., вы смешиваетесь с легитимным трафиком

**Простая аналогия:** Как носить разные маскировки вместо одной и той же униформы

#### 2. Случайное время и джиттер
**Что делает:** Добавляет случайные задержки между запросами (контролируется `--delay-ms`) с джиттером (небольшими случайными вариациями)

**Почему это работает:** Боты отправляют запросы через идеальные интервалы (ровно каждые 100 мс). Люди непредсказуемы. Случайное время делает трафик похожим на органический

**Простая аналогия:** Ходить неровными шагами вместо того, чтобы маршировать как робот

#### 3. Принудительная задержка для каждого хоста
**Что делает:** Отслеживает задержку отдельно для каждого домена, а не глобально

**Почему это работает:** Предотвращает пакетные паттерны, когда вы 50 раз подряд обращаетесь к одному хосту. Каждый хост видит вежливые, разнесённые по времени запросы

**Простая аналогия:** Общаться в разных разговорах по очереди, а не кричать на одного человека без перерыва

#### 4. Адаптивная конкурентность (AIMD)
**Что делает:** Автоматически замедляется при получении ошибок 429 (ограничение частоты) или 503 (сервер занят), ускоряется при успешных запросах

**Почему это работает:** Снижает нагрузку при обнаружении, имитирует поведение браузеров при повторных попытках. WAF видит "этот клиент уважает наши лимиты"

**Простая аналогия:** Замедляться в пробке, ускоряться на свободной дороге

#### 5. Повтор с экспоненциальной задержкой
**Что делает:** При неудачном запросе ждёт 1 с, затем 2 с, затем 4 с перед повторной попыткой

**Почему это работает:** Легитимные клиенты выполняют повторные попытки аккуратно. Боты часто колотят сразу или сдаются

**Простая аналогия:** Стучать в дверь, ожидая каждый раз дольше, вместо того чтобы долбить непрерывно

#### 6. Отсутствие отпечатков сканера
**Что делает:** Не отправляет заголовки типа `X-Scanner: ApiHunter` или предсказуемые паттерны

**Почему это работает:** Многие инструменты оставляют подписи (шаблоны Nuclei, паттерны sqlmap). ApiHunter избегает очевидных маркеров

**Простая аналогия:** Не носить табличку с надписью "Тестировщик безопасности"

#### 7. Повторное использование и пулинг соединений
**Что делает:** Использует пулы HTTP-клиентов для каждого хоста, поддерживает соединения активными

**Почему это работает:** Браузеры повторно используют соединения. Открывать/закрывать для каждого запроса выглядит подозрительно

**Простая аналогия:** Держать дверь открытой вместо того, чтобы захлопывать её и снова звонить

#### 8. Инъекция пользовательских заголовков
**Что делает:** Может добавлять заголовки, такие как `Referer`, `X-Forwarded-For`, пользовательские cookie

**Почему это работает:** Делает запросы похожими на те, что пришли из легитимного потока приложения (нажал на ссылку, есть сессионные cookie)

**Простая аналогия:** Показать билет при входе на площадку вместо того, чтобы перелезать через забор

#### Сравнение обнаружения

| Техника | Без обхода | С обходом |
|---------|------------|-----------|
| **User-Agent** | `python-requests/2.28.0` (очевидный бот) | `Mozilla/5.0 (Windows NT 10.0; Win64; x64)...` (выглядит как Chrome) |
| **Время** | Идеальные интервалы 100 мс → WAF блокирует | 120 мс, 95 мс, 180 мс → выглядит как человек |
| **Повторы** | Мгновенный повтор → бан | Ожидание 1с→2с→4с → "терпеливый клиент" |
| **Конкурентность** | 100 параллельных вызовов → тревога | Адаптивные 5→10→3 на основе ответов → "вежливый браузер" |

#### Когда использовать `--waf-evasion`

- Тестирование продакшен-API с Cloudflare/Akamai/AWS WAF
- Избежание IP-банов при масштабных сканированиях
- Тесты на проникновение, где нужно оставаться незамеченным

- **CI/CD-нативный**:
  - Сравнение с базовым сценарием (сообщать только новые находки)
  - Потоковый NDJSON-вывод для мониторинга в реальном времени
  - SARIF 2.1.0 для сканирования кода GitHub/GitLab
  - Битовая маска кода завершения для управления пайплайнами
  - Фильтрация по серьёзности и пороги сбоев
- **Производительность в масштабе**:
  - Асинхронная среда выполнения Rust (tokio) с абстракциями с нулевой стоимостью
  - Одновременное сканирование с параллелизмом, ограниченным семафором
  - Пулы HTTP-клиентов для каждого хоста для предотвращения узких мест соединений
  - Эффективное использование памяти (нет пауз GC)
- **Всесторонняя поддержка аутентификации**:
  - Аутентификационные потоки на основе JSON с извлечением cookie/заголовков
  - Тестирование IDOR/BOLA с двойной учёткой
  - Импорт файлов сессий (интеграция с Excalibur)
  - Аутентификация Bearer, Basic и пользовательскими заголовками
  - Автоматический неаутентифицированный клиент для проверок повышения привилегий

## Модули сканера

ApiHunter включает 13 встроенных модулей сканера. Подробную логику обнаружения см. в [docs/scanners.md](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md).

| Сканер | Тип | Что обнаруживает |
|---------|------|----------------|
| **CORS** | Пассивный | Подстановочные источники, отражённые источники с учётными данными, принятие нулевого источника, уязвимости обхода регулярных выражений (атаки с суффиксом/префиксом), отсутствие Vary: Origin, небезопасные методы предварительной проверки |
| **CSP** | Пассивный | Отсутствие Content-Security-Policy, директивы unsafe-inline/unsafe-eval, подстановочные источники, обходимые CDN-хосты (JSONP-гаджеты), отсутствие frame-ancestors |
| **GraphQL** | Пассивный | Включённая интроспекция, чувствительные поля схемы (типы user/password/token), подсказки полей (утечка схемы), пакетирование запросов, усиление с помощью псевдонимов (DoS), доступность GraphiQL/Playground |
| **JWT** | Пассивный | Токены с alg=none, слабые секреты HS256 (на основе словаря), отсутствующий/чрезмерный срок действия, чувствительные утверждения в полезной нагрузке, уязвимости путаницы алгоритмов |
| **OpenAPI** | Пассивный | Отсутствие схем безопасности, операции без требований аутентификации, конечные точки для загрузки файлов, всё ещё присутствующие устаревшие операции, незащищённые чувствительные конечные точки |
| **Версионирование API** | Пассивный | Раскрытие заголовка версии, одновременное использование устаревших/новых версий API, заголовки устаревания и расхождение ответов между безвредными вариантами запросов/версий (плюс расширенный режим через `--response-diff-deep`) |
| **gRPC/Protobuf** | Пассивный + Активный | Сигналы транспорта/типа содержимого gRPC, подсказки поверхности protobuf, опциональные сигналы рефлексии/здоровья |
| **Безопасность API** | Пассивный + Активный | Отсутствие заголовков безопасности (X-Content-Type-Options, X-Frame-Options), раскрытие версии сервера, неаутентифицированный доступ к чувствительным путям, перечисление HTTP-методов, обнаружение отладочных конечных точек, паттерны раскрытия секретов, активные проверки IDOR/BOLA (сравнение тела + выбранных заголовков), зонды слепого SSRF callback и сигналы обхода шлюза/шлюзового зонда |
| **Массовое присвоение** | Активный | Отражённые чувствительные поля (is_admin, role, permissions), сохранённые изменения состояния, повышение привилегий через инъекцию полей |
| **OAuth/OIDC** | Активный | Обход проверки URI перенаправления, отсутствие параметра state, проблемы с поддержкой PKCE (отсутствие S256, разрешённый plain), включённый неявный поток, включённый поток с паролем |
| **Ограничение частоты** | Активный | Отсутствие ограничения частоты (зонды burst), отсутствие заголовков Retry-After, обход через подделку IP-заголовков (X-Forwarded-For) |
| **WebSocket** | Активный | Принятие обновления до WebSocket на общих путях, отсутствие проверки источника, неаутентифицированные WebSocket-соединения |
| **CVE-шаблоны** | Активный | Обнаружение CVE на основе шаблонов из `assets/cve_templates/*.toml` (168 шаблонов), дифференциальное сопоставление базового сценария и обхода |

**Пассивные сканеры** запускаются по умолчанию и анализируют ответы без отправки сконструированных запросов.  
**Активные сканеры/проверки** требуют `--active-checks` и отправляют потенциально инвазивные зонды (IDOR/BOLA, мутации, тесты обхода).  
IDOR/BOLA находится в сканере `API Security` (нет отдельного флага `--no-idor`; используйте `--no-api-security` для отключения).

### Заметки о выводе модулей и сигналах

Эти заметки обобщают, как выводятся находки и что обычно вызывает шум:

| Модуль | Префикс / Форма находки | Частые ложные срабатывания | Частые пропуски |
|---------|-------------------------|-------------------------|-------------------|
| CORS | `cors/*` с полями origin/evidence | Отражение на нечувствительных маршрутах | Проверки источника применяются только на аутентифицированных маршрутах |
| CSP | `csp/*` с evidence директив | Легаси CSP, намеренно применённое во время миграции | CSP доставляется только на граничном пути CDN в продакшене |
| GraphQL | `graphql/*` с конечной точкой + сигналом возможности | Публичная площадка, предназначенная для внутренних/тестовых арендаторов | Контроль схемы включён только после аутентификации |
| JWT | `jwt/*` с evidence утверждения/заголовка токена | Тестовые/демо-токены в синтетических ответах | Токен никогда не появляется в просканированных ответах |
| OpenAPI | `openapi/*` с контекстом операции/безопасности | Спецификация намеренно включает устаревшие, но заблокированные конечные точки | Спецификация недоступна или разбита по частным документам |
| Версионирование API | `api_versioning/*` + `response_diff/*` | Несколько поддерживаемых версий во время контролируемых миграций | Версионированные пути не обнаруживаются из текущего набора начальных URL |
| gRPC/Protobuf | `grpc_protobuf/*` с evidence транспорта/рефлексии | Метаданные, похожие на gRPC, на граничных прокси без открытой RPC-поверхности | Конечные точки gRPC за отдельным хостом/путём не достигаются из стартового набора |
| Безопасность API | `api_security/*` с evidence заголовка/пути/метода | Отладочные/тестовые конечные точки, намеренно открытые в непродакшн-среде | Контроль применяется за контекстом аутентификации/сессии |
| Массовое присвоение | `mass_assignment/*` с отражёнными/сохранёнными дельтами | Поведение эха, которое не сохраняет состояние бэкенда | Мутации отклоняются скрытыми правилами валидации |
| OAuth/OIDC | `oauth/*` с evidence перенаправления/метаданных | Непродакшн-конфигурация IdP с ослабленными политиками | Динамическое применение политик не видно в метаданных |
| Ограничение частоты | `rate_limit/*` с поведением burst/429 | Глобальное формирование трафика маскирует поведение ограничителя на уровне приложения | Ограничители с длинным окном не срабатывают за короткое окно зонда |
| WebSocket | `websocket/*` с проверками обновления/источника | Публичные WS-конечные точки, намеренно анонимные | Аутентификация требуется через заголовки рукопожатия, не предоставленные в зонде |
| CVE-шаблоны | `cve/<id>/<check>` с evidence шаблона | Коллизия отпечатков на общих конечных точках | Уязвимый путь/контекст не достигаются из начальных URL |

Для подробной информации по каждой проверке и рекомендациям по устранению см. [docs/scanners.md](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md) и [docs/findings.md](https://github.com/teycir/apihunter/blob/HEAD/docs/findings.md).
Документация сканеров теперь включает [Каталог проверок модулей](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md#module-check-catalog) и [Модель ожидания ложных срабатываний](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md#false-positive-expectation-model), согласованные с источником.

## Функции

### Пассивный анализ безопасности
- **Обнаружение неправильной конфигурации CORS**:
  - Динамическая генерация источника на основе целевого домена
  - Тестирование обхода регулярных выражений (атаки с суффиксом/префиксом)
  - Оценка серьёзности с учётом учётных данных
  - Обнаружение подстановочных и нулевых источников
- **Анализ политики CSP**:
  - Обнаружение отсутствующей/слабой Content Security Policy
  - Директивы unsafe inline/eval
  - Обнаружение подстановочных источников
  - Паттерны обхода политики
- **Безопасность GraphQL**:
  - Обнаружение запросов интроспекции
  - Анализ названий чувствительных типов/полей
  - Обнаружение поддержки пакетирования запросов
  - Зондирование усиления с помощью псевдонимов (DoS)
  - Активное фаззинг мутаций (`--active-checks`, поддерживает `--dry-run`)
  - Доступность GraphiQL/Playground
- **Анализ JWT-токенов**:
  - Путаница алгоритмов (alg=none, HS256→RS256)
  - Обнаружение слабых секретов (подобранный список слов)
  - Обнаружение долгоживущих токенов (отсутствующий/чрезмерный срок действия)
  - Раскрытие чувствительных утверждений
  - Извлечение токенов из заголовков и cookie
- **Анализ OpenAPI/Swagger**:
  - Проверка схем безопасности
  - Обнаружение конечных точек для загрузки файлов
  - Отметка устаревших операций
  - Отсутствие определений безопасности
  - Кэширование спецификаций для производительности
- **Покрытие gRPC/Protobuf**:
  - Обнаружение метаданных/типа содержимого ответа gRPC
  - Обнаружение подсказок поверхности protobuf из метаданных/формы путей конечных точек
  - Опциональные активные сигналы рефлексии/здоровья на известных gRPC-путях
- **Обнаружение раскрытия секретов**:
  - Ключи AWS (AKIA*, секретные ключи)
  - Ключи Google API (AIza*)
  - Токены GitHub (ghp_*, github_pat_*)
  - Токены Slack (xox*)
  - Ключи Stripe (sk_live_*, pk_live_*)
  - URL баз данных, приватные ключи, токены bearer
  - Контекстно-зависимая проверка (снижает количество ложных срабатываний)
- **Проверки безопасности API**:
  - Перечисление HTTP-методов
  - Обнаружение отладочных конечных точек
  - Раскрытие листинга каталогов
  - Наличие security.txt
  - Анализ заголовков ответов (HSTS, X-Frame-Options и т.д.)
  - Раскрытие сообщений об ошибках

### Активное тестирование безопасности (--active-checks)
- **Проверки безопасности API IDOR/BOLA** (трёхуровневый подход):
  - Тестирование неаутентифицированного доступа
  - Сравнение ответов через отпечатки тела плюс стабильные снимки заголовков
  - Перебор ID (±2 в диапазоне)
  - Обход авторизации между пользователями (двойная учётка)
  - Зондирование слепого SSRF callback через URL-параметры стиля callback (`APIHUNTER_OAST_BASE`, поддерживает `--dry-run`)
  - Обнаружение и зондирование обхода шлюза (`api_security/gateway-*`)
- **Уязвимости массового присвоения**:
  - Инъекция отражённых чувствительных полей
  - Обнаружение сохранённых изменений состояния
  - Верификация Базовый→Мутировать→Подтвердить
  - Повышение привилегий через инъекцию полей
- **Безопасность OAuth/OIDC**:
  - Обход проверки URI перенаправления
  - Обработка параметра state
  - Обнаружение поддержки PKCE
  - Усиление конфигурации метаданных
  - Обнаружение неявного потока и потока с паролем
- **Ограничение частоты**:
  - Зондирование пакетных запросов
  - Обнаружение отсутствия ограничения частоты
  - Проверка заголовка Retry-After
  - Тесты обхода через подделку IP-заголовков
- **Безопасность WebSocket**:
  - Принятие обновления на общих путях
  - Тестирование проверки источника
  - Проверки отсутствия аутентификации
- **Движок CVE-шаблонов**:
  - Каталог шаблонов на TOML
  - Поддержка импорта YAML Nuclei
  - Дифференциальное сопоставление базового сценария и обхода
  - Дедупликация по хосту+шаблону
  - Шлюзы качества загрузчика пропускают недопустимые/небезопасные шаблоны запросов (например, неразрешённые заполнители запросов)
  - Контекстно-зависимое сопоставление по сегментам снижает чрезмерное срабатывание по подстроке пути
  - Текущий локальный каталог: 168 шаблонов (включает подобранные усиленные проверки, такие как CVE-2022-22947, CVE-2021-29442, CVE-2021-29441, CVE-2020-13945, CVE-2021-45232, CVE-2022-24288)

### Обнаружение и перечисление
- **Обнаружение конечных точек**:
  - Парсинг robots.txt
  - Парсинг sitemap.xml
  - Импорт спецификаций OpenAPI/Swagger
  - Импорт файлов HAR (интеграция с Excalibur)
  - Импорт коллекций Postman/Insomnia (`--collection`)
  - Извлечение конечных точек из JavaScript
  - Фильтрация по тому же хосту
- **Предварительная фильтрация доступности URL**:
  - Быстрая предварительная проверка для пропуска недоступных конечных точек
  - Настраиваемый таймаут
  - Опциональный обход с `--no-filter`

### Производительность и надёжность
- **Адаптивная конкурентность (AIMD)**:
  - Автоматическая регулировка скорости на основе ошибок
  - Аддитивное увеличение (каждые 5 с)
  - Мультипликативное снижение при 429/503/таймаутах
- **Стелс и обход WAF**:
  - Ротация User-Agent из пула во время выполнения (assets/user_agents.txt с более чем 100 реальными UAs)
  - Встроенные запасные UAs, если файл недоступен
  - Случайный джиттер задержки для предотвращения паттернов обнаружения
  - Принудительная синхронизация для каждого хоста (не глобальная)
  - Логика повторных попыток с экспоненциальной задержкой
  - Инъекция пользовательских заголовков (X-Forwarded-For, Referer и т.д.)
  - Адаптивная синхронизация на основе ответов 429/503
  - Режим вежливости для кооперативного тестирования
  - Отсутствие отпечатков сканера в User-Agent или заголовках по умолчанию
- **Управление ресурсами**:
  - Параллелизм, ограниченный семафором
  - Пулы HTTP-клиентов для каждого хоста
  - Повторное использование и пулинг соединений
  - Настраиваемые таймауты и повторы
- **Обработка ошибок**:
  - Восстановление после паник через JoinSet
  - Захваченные ошибки сообщаются отдельно
  - Корректная деградация при сбоях сканера

### Вывод и отчётность
- **Несколько форматов вывода**:
  - Pretty JSON (человекочитаемый)
  - NDJSON (потоковый, парсируемый)
  - SARIF 2.1.0 (сканирование кода GitHub/GitLab)
- **Сравнение с базовым сценарием**:
  - Создание снимков базового сценария
  - Сравнение сканов для отчёта только о новых находках
  - Идеально для регрессионного тестирования
- **Автосохранение отчётов** (включено по умолчанию, отключить с `--no-auto-report`):
  - Сохраняется в ~/Documents/ApiHunterReports/<timestamp>/
  - findings.json (структурированные находки)
  - summary.md (отчёт в Markdown)
  - scan.log (журнал выполнения)
- **Потоковая передача в реальном времени**:
  - Потоковая передача находок по мере их обнаружения
  - Формат NDJSON для живого разбора
  - Отслеживание прогресса
- **Фильтрация по серьёзности**:
  - Фильтр по минимальной серьёзности (info/low/medium/high/critical)
  - Порог сбоя для CI/CD
  - Битовая маска кода завершения (0x01 находки, 0x02 ошибки)

### Интеграция и расширяемость
- **Подключаемая архитектура сканера**:
  - Реализуйте трейт Scanner для добавления модулей
  - Асинхронный дизайн
  - Независимое выполнение сканеров
  - Изоляция паник для каждого сканера
- **Расширяемость на основе TOML**:
  - Каталог CVE-шаблонов в assets/cve_templates/*.toml
  - Для добавления новых проверок не требуется изменений кода
  - Обнаружение уязвимостей на основе шаблонов
  - Формат шаблонов, поддерживающий обмен сообществом
- **Импорт шаблонов Nuclei**:
  - Бинарный файл template-tool для конвертации YAML → TOML
  - Автоматический перевод матчеров (status, word, regex, dsl)
  - Безопасное извлечение цепочек предварительных запросов
  - Сохраняет логику обнаружения из исходных шаблонов
- **Двойная модель расширения**:
  - **На основе кода**: Пишите Rust-сканеры, реализующие трейт Scanner для сложной логики
  - **На основе шаблонов**: Пишите TOML-шаблоны для сигнатурных проверок (CVE, неправильные конфигурации)
  - Лучшее из двух миров: производительность + гибкость
- **Дополнительные инструменты**:
  - Расширение браузера Excalibur (захват HAR)
  - BurpAPIsecuritysuite (ручное тестирование)
  - Рабочий процесс: Захват → Автоматизация → Углублённое тестирование

### Конфигурация и управление
- **Гибкий ввод**:
  - Списки URL из файлов
  - stdin (передача из других инструментов)
  - Импорт файлов HAR
  - Импорт коллекций Postman/Insomnia
  - Импорт спецификаций OpenAPI
- **Детализированное управление сканерами**:
  - Включение/отключение отдельных сканеров
  - Активный vs пассивный режим
  - Пробный запуск для активных проверок
  - Конфигурация для каждого сканера
- **Сетевая конфигурация**:
  - Поддержка HTTP/HTTPS прокси
  - Управление проверкой TLS-сертификатов
  - Пользовательские заголовки и cookie
  - Настраиваемые таймауты и повторы
- **Профили сканирования**:
  - quickscan.sh (быстрое, низкое воздействие)
  - deepscan.sh (комплексное, активные проверки)
  - inaccessiblescan.sh (повторная проверка ранее недоступных целей с более медленными настройками)
  - baselinescan.sh (создание базового сценария)
  - diffscan.sh (сравнение с базовым сценарием)
  - authscan.sh (аутентифицированное сканирование)
  - sarifscan.sh (интеграция с CI/CD)
  - scan-and-report.sh (запуск скана + вывод пути последнего отчёта)
  - split-by-host.sh (разделение целей по хосту и опциональное распределение сканов)

## Сравнение с другими инструментами| Особенность | ApiHunter | Nuclei | ZAP | Burp Suite | ffuf |
|---------|-----------|--------|-----|------------|------|
| **Язык** | Rust | Go | Java | Java | Go |
| **Производительность** | ⚡⚡⚡ Асинхронная, адаптивная конкурентность | ⚡⚡ Быстрый параллельный | ⚡ Умеренная | ⚡ Умеренная | ⚡⚡⚡ Очень быстрый |
| **API-ориентированный дизайн** | ✅ Создан для API | ❌ Общий веб | ⚠️ Гибридный | ⚠️ Гибридный | ❌ Ориентация на фаззинг |
| **Фильтрация ложных срабатываний** | ✅ Обнаружение SPA, валидация тела, проверка referer | ⚠️ Зависит от шаблонов | ⚠️ Много ложных срабатываний | ✅ Хорошая | N/A |
| **Анализ CORS/CSP** | ✅ Глубокий анализ политик | ⚠️ Базовые шаблоны | ✅ Хороший | ✅ Хороший | ❌ |
| **Интроспекция GraphQL** | ✅ Раскрытие схемы + проверки конфиденциальных полей | ⚠️ Базовое обнаружение | ⚠️ Ограниченный | ✅ Через расширения | ❌ |
| **OpenAPI/Swagger** | ✅ Анализ схем безопасности | ❌ | ✅ Только импорт | ✅ Импорт + сканирование | ❌ |
| **Анализ JWT** | ✅ alg=none, слабые секреты, срок действия | ⚠️ Через шаблоны | ⚠️ Ограниченный | ✅ Через расширения | ❌ |
| **Обнаружение IDOR/BOLA** | ✅ 3 уровня (неавторизованный/диапазон/между пользователями) | ⚠️ Ручные шаблоны | ⚠️ Ограниченный | ✅ Ручное тестирование | ❌ |
| **Обнаружение секретов** | ✅ Контекстно-зависимое (фронтенд vs бэкенд) | ⚠️ На основе регулярных выражений | ⚠️ Базовое | ⚠️ Базовое | ❌ |
| **Активные проверки** | ✅ По желанию (IDOR, массовое присвоение, OAuth/OIDC, websocket, ограничение скорости, шаблоны CVE) | ✅ На основе шаблонов | ✅ Активное сканирование | ✅ Активное сканирование | ✅ Фаззинг |
| **Обход WAF** | ✅ Ротация UA, задержки, повторные попытки, адаптивное время | ⚠️ Базовый | ⚠️ Ограниченный | ✅ Хороший | ⚠️ Базовый |
| **Интеграция CI/CD** | ✅ NDJSON, SARIF, коды завершения | ✅ JSON, SARIF | ⚠️ Отчеты XML | ⚠️ XML/JSON | ✅ JSON |
| **Сравнение базовых линий** | ✅ Встроенный | ❌ Внешние инструменты | ❌ | ❌ | ❌ |
| **Потоки аутентификации** | ✅ Предварительный вход на основе JSON перед сканированием | ⚠️ Внедрение заголовков | ✅ Управление сессиями | ✅ Управление сессиями | ⚠️ Внедрение заголовков |
| **Потоковый вывод** | ✅ NDJSON в реальном времени | ❌ Только пакетный | ❌ | ❌ | ✅ |
| **Использование ресурсов** | 🟢 Низкое (Rust) | 🟢 Низкое (Go) | 🟡 Высокое (Java) | 🟡 Высокое (Java) | 🟢 Низкое (Go) |
| **Кривая обучения** | 🟢 Простой CLI | 🟢 Синтаксис шаблонов | 🟡 Сложность GUI | 🔴 Крутая | 🟢 Простой |
| **Расширяемость** | ✅ Система трейтов Rust | ✅ Шаблоны YAML | ✅ Дополнения | ✅ Расширения | ⚠️ Ограниченная |
| **Лицензия** | MIT (Бесплатно) | MIT (Бесплатно) | Apache 2.0 (Бесплатно) | Коммерческая | MIT (Бесплатно) |
| **Лучше всего подходит для** | Безопасность API в CI/CD, регрессионное тестирование, анализ CORS/GraphQL/JWT | Общее сканирование уязвимостей, обнаружение CVE | Полное тестирование веб-приложений на проникновение | Ручное тестирование на проникновение, сложные рабочие процессы | Фаззинг директорий/параметров |

### Ключевые отличия

**ApiHunter:** дизайн, ориентированный на API, обнаружение SPA, сравнение базовых линий, 3-уровневое IDOR/BOLA, контекстно-зависимые секреты, конкурентность AIMD, **скрытность/обход WAF (ротация UA, джиттер, адаптивное время)**, **двойная расширяемость (шаблоны TOML + модули Rust)**  
**Nuclei:** более широкое покрытие CVE, только шаблоны YAML, базовый обход  
**ZAP/Burp:** ручное тестирование, прокси-рабочие процессы, расширения на основе GUI, ограниченная скрытность  
**ffuf:** чистый фаззинг, обнаружение контента, ограниченная расширяемость, базовый обход

## Quick Start```bash
cargo build --release

# Scan URLs from a file (newline-delimited)
./target/release/apihunter --urls ./targets/cve-regression-real-public.txt --format ndjson --output ./results.ndjson

# Or scan URLs from stdin
cat ./targets/cve-regression-real-public.txt | ./target/release/apihunter --stdin --min-severity medium

Быстрый старт настольного приложения (Tauri + React)

ApiHunter также поставляет настольное приложение в apps/desktop.```bash cd apps/desktop npm install npm run tauri dev

root@kitploit:~
Ввод для сканирования через десктоп поддерживает:
- Ручной ввод нескольких целей (один URL на строку или через запятую)
- Импорт CSV через `Load CSV` (макс. 307 200 байт / 300 КиБ)
- Предустановки направленного сканирования: `Quick Passive` и `Deep Active`
- Жёсткий лимит: до 3000 целей за запуск (дедуплицированные и проверенные как абсолютные URL `http/https`)
- Контроль области: включение/выключение обнаружения, фильтрация доступности + тайм-аут, макс. конечных точек на сайт
- Контроль версионирования API: опциональный переключатель глубокого зондирования различий ответов
- Расширенные элементы управления: прокси, заголовки, куки, аутентификация Bearer/Basic, переключатель недействительных TLS-сертификатов
- Ввод корреляции обратного вызова для Blind SSRF (`OAST callback base`) для активных проверок
- Элементы управления производительностью: клиенты на хост, адаптивный параллелизм, обход WAF с пользовательским пулом User-Agent
- Полное покрытие переключателями сканера, включая `API Versioning` и `gRPC/Protobuf`
- Сворачиваемые секции сканирования с каретками, выровненными по правому краю; `Safety and Scan Behavior`, `Runtime Limits` и `Scanner toggles` свёрнуты по умолчанию
- Карточки прогресса параллельного выполнения с моментальными снимками завершения/находок по каждой цели
- Панель аналитики результатов: тепловая карта серьёзности, карточка наихудшей цели, эффективность сканирования, покрытие сканера, топ уязвимых путей, разбивка по серьёзности проверок
- Сохранение сессии: автоматическое восстановление последних результатов сканирования при следующем запуске
- Панель режима обогащения: загрузка NDJSON с находками, запуск обогащения данными об угрозах, продвижение хостов с высокими оценками непосредственно в полное сканирование с пресетом Deep Active
- Интерфейс экспорта: метки размера + `Save All Reports` + имена файлов с временными метками для каждого запуска; экспорт включает пакеты JSON по целям, NDJSON, SARIF, коллекцию Insomnia и данные Insomnia Runner

См. [HOWTO.md](https://github.com/teycir/apihunter/blob/HEAD/HOWTO.md) для подробного использования, [docs/lab-setup.md](https://github.com/teycir/apihunter/blob/HEAD/docs/lab-setup.md) для лабораторных работ по проверке CVE на основе Vulhub и [docs/](https://github.com/teycir/apihunter/blob/HEAD/docs/) для внутренних механизмов.

Если вам нужен релизный десктопный бинарник:```bash
cd apps/desktop
npm run tauri build
./src-tauri/target/release/apihunter-desktop

Установить кликабельную иконку/запускатель приложения Linux:```bash cd apps/desktop npm run desktop:install-icon

root@kitploit:~
Примечание: запуск dev-среды теперь использует собранные фронтенд-ресурсы напрямую и не требует отдельного сервера `localhost:1420`.

См. [HOWTO.md](https://github.com/teycir/apihunter/blob/HEAD/HOWTO.md) для подробного использования, [docs/lab-setup.md](https://github.com/teycir/apihunter/blob/HEAD/docs/lab-setup.md) для лабораторных работ по проверке CVE на основе Vulhub и [docs/](https://github.com/teycir/apihunter/blob/HEAD/docs/) для внутренней документации.

### Пример NDJSON-находки```json
{
  "url": "https://api.example.com/graphql",
  "check": "graphql/introspection-enabled",
  "title": "GraphQL introspection is enabled",
  "severity": "MEDIUM",
  "detail": "Introspection query returned schema metadata from a public endpoint.",
  "evidence": "POST /graphql -> HTTP 200 with __schema fields in response body",
  "scanner": "graphql",
  "timestamp": "2026-03-19T14:02:11.824Z"
}

Архитектура```

main.rs ──► cli.rs (args) ──► config.rs (Config) │ runner.rs (orchestration) ┌──────┴────────────────────────────┐ discovery/ scanner/ ├─ robots.rs ├─ cors.rs ├─ sitemap.rs ├─ csp.rs ├─ swagger.rs ├─ jwt.rs ├─ js.rs ├─ graphql.rs ├─ headers.rs ├─ openapi.rs └─ common_paths.rs ├─ api_security.rs ├─ api_versioning.rs ├─ grpc_protobuf.rs ├─ mass_assignment.rs ├─ oauth_oidc.rs http_client.rs ├─ rate_limit.rs auth.rs ├─ cve_templates.rs waf.rs └─ websocket.rs reports.rs error.rs

root@kitploit:~
**Поток:** CLI args → Config → Runner orchestrates Discovery + Scanners → HTTP Client (with Auth/WAF) → Reports

## Template Tooling

ApiHunter поддерживает **двойную расширяемость**: добавляйте проверки через **TOML templates** (без кода) или **Rust modules** (полный контроль).

### Формат шаблона TOML
Создавайте пользовательские проверки в `assets/cve_templates/*.toml`:```toml
id = "custom-api-check"
name = "Custom API Vulnerability"
severity = "high"

[[requests]]
method = "GET"
path = "/api/vulnerable"

[[requests.matchers]]
type = "status"
values = [200]

[[requests.matchers]]
type = "word"
part = "body"
words = ["sensitive_data", "exposed"]

Импорт шаблонов Nuclei

Преобразуйте существующие шаблоны Nuclei в формате YAML:```bash cargo run --bin template-tool -- import-nuclei
--input tests/fixtures/upstream_nuclei/CVE-2022-24288.yaml
--output assets/cve_templates/cve-2022-24288.toml

root@kitploit:~
### Добавление пользовательских сканеров на Rust
Реализуйте трейт `Scanner` для сложной логики:```rust
#[async_trait]
impl Scanner for MyCustomScanner {
    async fn scan(
        &self,
        url: &str,
        client: &HttpClient,
        config: &Config,
    ) -> (Vec<Finding>, Vec<CapturedError>) {
        // Your custom scanning logic
    }
}

См. HOWTO.md и docs/scanners.md для подробностей.

Сценарии сканирования

ScanScripts/ содержит удобные обёртки для типовых профилей сканирования:

  • quickscan.sh - Быстрое сканирование с низким воздействием (concurrency: 10, max-endpoints: 20, timeout: 5s, retries: 0, delay: 50ms)
  • deepscan.sh - Комплексное сканирование с активными проверками (адаптивная конкурентность, клиенты на хост, неограниченные конечные точки, retries: 3, timeout: 20s, delay: 200ms)
  • defaultscan.sh - Запуск с настройками CLI по умолчанию (без предустановленных флагов)
  • baselinescan.sh - Создание базового NDJSON для сравнения
  • diffscan.sh - Сравнение с базовым и вывод только новых находок
  • authscan.sh - Аутентифицированное сканирование с потоками аутентификации (требует --auth-flow, включает активные проверки, обход WAF, retries: 2, timeout: 15s, delay: 150ms)
  • sarifscan.sh - Вывод в формате SARIF для интеграции с CI/CD
  • inaccessiblescan.sh - Повторное сканирование ранее недоступных URL с консервативными повторными попытками/таймаутами
  • scan-and-report.sh - Запуск сканирования и вывод местоположения последнего автоматически сохранённого отчёта
  • split-by-host.sh - Разделение списка URL на файлы по хостам и опциональное параллельное сканирование

Примеры использования```bash

Quick scan from file

./ScanScripts/quickscan.sh targets/cve-regression-real-public.txt

Deep scan from stdin

cat targets/cve-regression-real-public.txt | ./ScanScripts/deepscan.sh --stdin

Generate baseline

./ScanScripts/baselinescan.sh targets/cve-regression-real-public.txt

Compare against baseline

./ScanScripts/diffscan.sh targets/cve-regression-real-public.txt baseline.ndjson

Authenticated scan

./ScanScripts/authscan.sh targets/cve-regression-real-public.txt --auth-flow auth.json

SARIF output for GitHub Code Scanning

./ScanScripts/sarifscan.sh targets/cve-regression-real-public.txt

Split by host and scan in parallel

./ScanScripts/split-by-host.sh targets/cve-regression-real-public.txt --scan-cmd ./ScanScripts/quickscan.sh --jobs 4

root@kitploit:~
All wrapper scripts except `split-by-host.sh` support `--stdin` and trailing ApiHunter flags.

## Стратегия тестирования

Тестирование ApiHunter разделено по намерениям:

- **Модульные тесты** (`tests/*_scanner.rs`, тесты парсера/конфигурации): логика сканеров и граничные случаи.
- **Интеграционные тесты** (`tests/integration_runner.rs`, поведение запуска/CLI): оркестрация и связывание времени выполнения.
- **Регрессионные тесты на фикстурах** (`tests/cve_templates_real_data.rs`, `tests/cve_templates_upstream_parity.rs`): воспроизведение реальных полезных нагрузок и сравнение с фиксированными вышестоящими шаблонами.
- **Тесты с mock-сервером** (несколько наборов сканеров): проверки детерминированного поведения без использования интернет-целей.
- **Проверки на живых целях**: опционально/вручную (не входят в стандартный `cargo test`).

См. специальное [Руководство по тестированию](https://github.com/teycir/apihunter/blob/HEAD/docs/testing.md) для получения полной матрицы тестов и карты покрытия.

Запустите сфокусированные наборы:```bash
cargo test --test cors_scanner
cargo test --test graphql_scanner
cargo test --test cve_templates_runtime_ext
cargo test --test integration_runner

Запустить полную проверку:```bash cargo test

root@kitploit:~
Запустите шлюз интеграции с реальными данными (фикстуры + игнорируемые живые наборы):```bash
# Fixture-backed real payload regression suites
cargo test --test cve_templates_real_data --test cve_templates_upstream_parity --test cve_templates_runtime_ext

# Manual live internet integration suites (ignored by default)
cargo test --test live_vulnerable_apis --test live_real_world_targets -- --ignored

Живые наборы используют целевые инвентаризации по умолчанию:

  • targets/vuln-api-regression-real-public.txt
  • targets/real-world-integration-public.txt

Вы можете переопределить с помощью:

  • APIHUNTER_LIVE_VULN_TARGET_FILE или APIHUNTER_LIVE_VULN_TARGETS
  • APIHUNTER_LIVE_REAL_TARGET_FILE или APIHUNTER_LIVE_REAL_TARGETS

Документация

Полная документация доступна в docs/. Начните с:

  • Индекс документации
  • Руководство по настольному приложению
  • Архитектура
  • Конфигурация
  • Поток аутентификации
  • Руководство по тестированию
  • Операционный сборник
  • Сканеры
  • Находки и устранение
  • Политика безопасности
  • HOWTO
  • Режим триажа
  • Режим обогащения

План развития

Завершено (v0.7.0): переработка Glass UI, постоянство сканирования (хранилище последнего скана), панель аналитики результатов (тепловая карта серьезности, карточка худшей цели, эффективность сканирования, покрытие сканера, разбивка по серьезности проверок), поток продвижения Enrich → Deep-Scan, режим триажа/угроз-разведки, конфигурация обнаружения, сканеры WebSocket/Mass-Assignment/OAuth/Rate-Limit/CVE, расширенный импортер Nuclei, образ Docker
Далее: разделение компонента App.tsx, кольцевой буфер истории сканирования, ящик деталей находки, экспорт отчетов HTML/PDF, нативное действие GitHub Actions, тайминг по целям в живом процессе

Установка

Установка CLI

Требуется стабильная версия Rust (протестировано на 1.76+).```bash git clone https://github.com/Teycir/ApiHunter cd ApiHunter cargo build --release

root@kitploit:~
### Предварительно собранные артефакты релизов

Помеченные релизы (`v*`) публикуют предварительно собранные бинарные файлы `apihunter` для:

- Linux (`x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`)
- macOS (`x86_64-apple-darwin`)
- Windows (`x86_64-pc-windows-msvc`)

Каждый релиз также публикует артефакты цепочки поставок:

- Файлы контрольных сумм SHA256 (`*.sha256`)
- Материалы подписей без ключа Sigstore (`*.sig`, `*.pem`, `*.sigstore.json`)
- SPDX JSON SBOM (`apihunter-release-assets-sbom.spdx.json`)
- Аттестации артефактов GitHub (метаданные происхождения и аттестации SBOM)

Скачать с [GitHub Releases](https://github.com/Teycir/ApiHunter/releases).

### Установка настольного приложения (Tauri + React)

Исходный код десктопного приложения находится в `apps/desktop`.

Сборка и запуск производственного десктопного бинарного файла:```bash
cd apps/desktop
npm install
npm run tauri build
./src-tauri/target/release/apihunter-desktop

Для режима разработки:```bash cd apps/desktop npm run tauri dev

root@kitploit:~
Установите кликабельный значок лаунчера Linux:```bash
cd apps/desktop
npm run desktop:install-icon

Desktop features (brief):

  • Сканирование нескольких целей (до 3000 целей) с ручным вводом + импорт CSV (ограничение 300 КБ)
  • Предустановки настройки: Quick Passive и Deep Active
  • Интерфейс прогресса в реальном времени с карточками статуса для каждой цели
  • Полный контроль профилей сканирования (обнаружение/фильтрация, повторы/тайм-ауты, переключатели сканеров)
  • Сворачиваемые секции сканирования с каретками, выровненными по правому краю; тяжелые подсекции свернуты по умолчанию
  • Управление версиями API, переключатель глубокого сравнения ответов и управление базой обратных вызовов OAST
  • Расширенные параметры выполнения (прокси/заголовки аутентификации/cookies, переключатель TLS, опции WAF/адаптивные/на хост)
  • Панель аналитики результатов: тепловая карта серьезности, худшая цель, эффективность сканирования, покрытие сканера, разбивка проверок по серьезности, топ уязвимых путей, сводка по целям
  • Сохранение сессии: последнее сканирование автоматически восстанавливается при следующем запуске с отметкой времени
  • Панель режима обогащения: обогащение угрозами с возможностью продвижения хоста в глубокое сканирование
  • Экспорт одним кликом для JSON-пакетов для каждой цели, NDJSON, SARIF, коллекции Insomnia и данных Insomnia Runner

Docker```bash

docker build -t apihunter:local . docker run --rm apihunter:local --help

root@kitploit:~
Запустите сканирование из файлов в вашей текущей директории:```bash
docker run --rm -v "$PWD:/work" apihunter:local \
  --urls /work/targets/cve-regression-real-public.txt \
  --format ndjson \
  --output /work/results.ndjson

Справочник по CLI

*Необходимо указать ровно один из параметров: --urls, --stdin, --har или --collection.

Коды выхода

Защитные и юридические ограничения

  • --proxy не отключает TLS-проверку сам по себе. Проверки сертификатов остаются включёнными, если явно не установлен флаг --danger-accept-invalid-certs.
  • --danger-accept-invalid-certs предназначен только для контролируемого лабораторного/отладочного использования. При включении этого флага ApiHunter выводит явное предупреждение во время выполнения.
  • --waf-evasion и активные проверки могут вызывать срабатывания IDS/WAF. Запускайте только с явным письменным разрешением и в согласованные временные окна тестирования.
  • Для CI или проверок, близких к промышленной среде, предпочтительно сначала использовать пассивный режим, затем ограничивать активные проверки согласованными целями.

Связанные проекты

ApiHunter является частью дополнительного набора инструментов для тестирования безопасности:

  • Excalibur – Расширение для браузера для захвата API-трафика и экспорта HAR-файлов с куками сессий. Используется с ApiHunter через флаги --har и --session-file.
  • BurpAPIsecuritysuite – Расширение Burp Suite для интерактивного тестирования безопасности API. Дополняет автоматическое сканирование ApiHunter ручными тестовыми сценариями.

Рабочий процесс: Захват трафика с помощью Excalibur → Автоматический базовый анализ с помощью ApiHunter → Глубокое ручное тестирование с помощью BurpAPIsecuritysuite

Об авторе

Автор: Teycir Ben Soltane
Email: [email protected]
Сайт: teycirbensoltane.tn

Часто задаваемые вопросы

В: Почему ApiHunter, а не Nuclei/ZAP/Burp?
О: Ориентация на API, обнаружение SPA, сравнение с базовым уровнем, трёхуровневый IDOR, контекстно-зависимые секреты. Дополняет Nuclei (покрытие CVE) и ZAP/Burp (ручное тестирование).

В: Безопасно ли использовать в промышленной среде?
О: Да. Используйте --delay-ms и снизьте --concurrency. Попробуйте quickscan.sh.

В: Аутентифицированные сканирования?
О: --auth-bearer, --auth-basic или --auth-flow. Для IDOR: --auth-flow-b.

В: Сравнение скорости (1000 конечных точек)?
Зависит от задержки конечных точек, количества повторных попыток, поведения цели и включённых проверок. Используйте --concurrency, --delay-ms и --active-checks для настройки пропускной способности и влияния.

В: Медленное сканирование?
Увеличьте --concurrency (по умолчанию: 20), уменьшите --delay-ms (по умолчанию: 150 мс), включите --adaptive-concurrency.

В: Форматы вывода?
pretty (по умолчанию), ndjson (потоковый), sarif (интеграция с CI).

В: Интеграция с CI/CD?```bash ./target/release/apihunter --urls targets/cve-regression-real-public.txt --fail-on medium --format sarif --output results.sarif

root@kitploit:~
**В: Сравнение базовых линий?**```bash
./target/release/apihunter --urls targets/cve-regression-real-public.txt --format ndjson --output baseline.ndjson
./target/release/apihunter --urls targets/cve-regression-real-public.txt --baseline baseline.ndjson --format ndjson

В: Пассивные и активные проверки?
Пассивные (по умолчанию): анализ ответов. Активные (--active-checks): отправка специально созданных запросов (IDOR, массовое присвоение, OAuth, ограничение скорости, CVE-зонды).

В: Тестирование CORS?
Динамическая генерация источника: null, https://evil.com, https://<target>.evil.com, https://evil<target>. Проверяет обход регулярных выражений при отражении.

В: Обнаружение IDOR?
3 уровня: (1) неаутентифицированное получение, (2) перебор ID (±2), (3) межпользовательское (--auth-flow-b).

В: Обнаружение секретов?
Ключи AWS/Google/GitHub/Slack/Stripe, токены Bearer, URL-адреса БД, приватные ключи. Контекстно-зависимая проверка.

В: Cookies?
--cookies "session=abc", --session-file excalibur.json или --auth-flow login.json.

В: Прокси?
--proxy http://proxy.corp.com:8080

В: Отладочное логирование?
RUST_LOG=debug ./target/release/apihunter --urls targets/cve-regression-real-public.txt

В: Адаптивный параллелизм?
AIMD: увеличивается на 1 каждые 5 секунд, уменьшается вдвое при ошибках (429/503/таймауты). Включить с помощью --adaptive-concurrency.

В: Отключить сканеры?
--no-cors, --no-csp, --no-graphql, --no-api-security, --no-jwt, --no-openapi, --no-api-versioning, --no-mass-assignment, --no-oauth-oidc, --no-rate-limit, --no-cve-templates, --no-websocket.

В: Является ли ApiHunter скрытным?
О: Да. Возможности: ротация UA из 100+ реальных браузеров (assets/user_agents.txt), случайные задержки с джиттером, ограничение скорости на хост, адаптивное отступление при 429/503, отсутствие отпечатков сканера в заголовках, экспоненциальная логика повторных попыток, внедрение пользовательских заголовков. Включить с помощью --waf-evasion.

В: Как работает обход WAF?
О: Автоматически ротирует User-Agent из подобранного пула, добавляет случайный джиттер к задержкам, обеспечивает тайминг на хост (не глобальные всплески), экспоненциально отступает при ограничениях скорости и позволяет внедрять пользовательские заголовки для смешивания с легитимным трафиком. В заголовках по умолчанию отсутствуют строки "scanner".

См. CONTRIBUTING.md для руководства по разработке.

Лицензия

MIT

Скачать инструмент
ФлагПо умолчаниюОписание
--urlsобязательно*Путь к файлу с URL, разделёнными новой строкой
--stdinoffЧтение URL, разделённых новой строкой, из stdin
--haroffИмпорт вероятных URL запросов API из HAR (log.entries[].request.url)
--collectionoffИмпорт вероятных URL запросов API из экспортированного JSON коллекции Postman/Insomnia
--outputstdoutЗапись результатов в файл вместо stdout
--formatprettyФормат вывода: pretty, ndjson или sarif
--streamoffПотоковая передача результатов NDJSON по мере их поступления
--baselinenoneБазовый NDJSON для поиска только различий
--quietoffПодавить вывод не-ошибочных данных в stdout
--summaryoffВыводить сводку даже в тихом режиме
--no-auto-reportoffНе создавать локальные автоматические отчёты в ~/Documents/ApiHunterReports
--min-severityinfoФильтровать находки ниже этого уровня
--fail-onmediumЗавершаться с ненулевым кодом при уровне серьёзности не ниже этого
--concurrency20Максимальное количество одновременных запросов
--max-endpoints50Ограничение числа сканируемых конечных точек на сайт (0 = без ограничений)
--delay-ms150Минимальная задержка между запросами к одному хосту (мс)
--retries1Количество повторных попыток при временной ошибке
--timeout-secs8Тайм-аут запроса в секундах
--no-filteroffПропустить предварительную фильтрацию недоступных URL
--filter-timeout3Тайм-аут предварительной проверки доступности (секунды)
--no-discoveryoffПропустить обнаружение конечных точек и сканировать только предоставленные начальные URL
--waf-evasionoffВключить эвристики обхода WAF
--user-agentsnoneСписок UA через запятую (включает обход WAF)
--headersnoneДополнительные заголовки запросов (например, Authorization: Bearer ...)
--cookiesnoneКуки через запятую (например, session=abc,theme=dark)
--auth-bearernoneДобавить Authorization: Bearer <token>
--auth-basicnoneДобавить HTTP Basic аутентификацию (user:pass)
--auth-flownoneJSON-файл с потоком аутентификации (логин перед сканированием)
--auth-flow-bnoneВторой поток аутентификации для перекрёстных проверок IDOR между пользователями
--unauth-strip-headersnoneИмена дополнительных заголовков, которые нужно удалять при неаутентифицированных проверках
--session-filenoneЗагрузить/сохранить куки из JSON-файла сессии Excalibur ({"hosts": {...}})
--proxynoneURL HTTP/HTTPS прокси
--danger-accept-invalid-certsoffПропустить проверку TLS-сертификатов
--active-checksoffВключить активные (потенциально инвазивные) проверки
--dry-runoffСухой прогон активных проверок (отчёт о предполагаемых проверках без отправки мутирующих запросов)
--response-diff-deepoffВключить более глубокие варианты проверки различий ответов при проверках версионирования API
--per-host-clientsoffИспользовать отдельные пулы HTTP-клиентов для каждого хоста
--adaptive-concurrencyoffАдаптивная конкурентность (AIMD)
--no-corsoffОтключить сканер CORS
--no-cspoffОтключить сканер CSP
--no-graphqloffОтключить сканер GraphQL
--no-api-securityoffОтключить сканер безопасности API
--no-jwtoffОтключить сканер JWT
--no-openapioffОтключить сканер OpenAPI
--no-api-versioningoffОтключить сканер версионирования API
--no-grpc-protobufoffОтключить сканер gRPC/Protobuf
--no-mass-assignmentoffОтключить сканер массового присваивания (активные проверки)
--no-oauth-oidcoffОтключить сканер OAuth/OIDC (активные проверки)
--no-rate-limitoffОтключить сканер ограничения скорости (активные проверки)
--no-cve-templatesoffОтключить сканер шаблонов CVE (активные проверки)
--no-websocketoffОтключить сканер WebSocket (активные проверки)
КодЗначение
0Нет находок на уровне/выше порога --fail-on и нет ошибок
1Одна или несколько находок на уровне/выше порога --fail-on
2Один или несколько сканеров зафиксировали ошибки
3И находки, и ошибки