Give a man a gun and he can rob a bank. Give a man a bank and he can rob the world.

Предыстория

Занимаясь bug bounty, я постоянно сталкивался с одной проблемой — существующие инструменты либо устарели, либо закрытые, либо написаны так что добавить свой плагин целый квест. Nikto последний раз серьёзно обновлялся много лет назад, а современных асинхронных альтернатив на Python практически нет.

Так появился WebScan — асинхронный CLI-сканер безопасности на чистом Python с модульной архитектурой. За неделю с момента релиза проект получил внешних контрибьюторов и вырос до 15 плагинов.

Что умеет CLI-сканер

WebScan сканирует цель и проверяет 15 категорий уязвимостей одновременно. Открытые конфиги — более 50 файлов включая .env, .git/config, SSH ключи и SQL дампы. Утечки API ключей в HTML и JS коде — AWS, Anthropic, OpenAI, Stripe, GitHub. CORS мисконфиги — reflected Origin, wildcard, credentials exposure. XSS в query параметрах с классификацией контекста инъекции. SQL инъекции трёх типов — error-based, boolean-blind и time-blind. Path Traversal, Open Redirect, SSRF. Заголовки безопасности — CSP, HSTS, X-Frame-Options. SSL и TLS — слабые протоколы, просроченные сертификаты. Опасные HTTP методы — PUT, DELETE, TRACE. Cookie флаги — Secure, HttpOnly, SameSite. Tech fingerprint — CMS, фреймворки, серверы. Subdomain enumeration через DNS и crt.sh. Secrets detection — утечки ключей в исходниках.

Архитектура

Главный принцип — каждый плагин это отдельный Python класс. Написать свой плагин занимает 20-30 строк кода. Регистрируешь в ALL_PLUGINS и плагин уже доступен через флаг --plugins. Единственная runtime зависимость — aiohttp. Всё остальное стандартная библиотека Python.

Структура проекта логична — cli.py как точка входа, engine.py как асинхронный оркестратор, crawler.py как BFS spider для обхода ссылок и форм, auth.py для аутентификации, net.py для proxy и User-Agent rotation, anonymize.py для очистки отчётов, models.py для датаклассов, reporter.py для пяти форматов вывода и папка plugins где каждый файл это один плагин.

Три режима использования

Для владельцев сайтов есть Safe Mode который автоматически ограничивает скорость до двух запросов в секунду, уважает robots.txt и использует честный User-Agent. Никакой случайной перегрузки сервера.

Для bug bounty исследователей есть режим скрытности — jitter размывает автоматический почерк, User-Agent rotation обходит блокировки по имени утилиты, proxy скрывает реальный IP. Всё работает через Burp Suite, Tor или любой HTTP и SOCKS proxy.

Для CI/CD есть интеграция через exit codes — код 1 при CRITICAL или HIGH находках останавливает деплой. SARIF формат загружается напрямую в GitHub Code Scanning. Есть готовый GitHub Actions workflow.

Форматы отчетов

WebScan поддерживает пять форматов. JSON для CI/CD и скриптов. Markdown для человеческого чтения и GitHub PR. HTML как самодостаточный отчёт для стейкхолдеров. SARIF для GitHub Code Scanning и VS Code. CSV для Excel, Jira и Notion.

Чем лучше Nikto?

Nikto классика, но инструмент практически не развивается. WebScan асинхронный и в 5-10 раз быстрее на больших целях. Поддерживает пять форматов отчётов против текста и CSV у Nikto. Полноценная CI/CD интеграция с SARIF. Плагины пишутся за 20 строк. Активная разработка против почти заброшенного проекта.

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

В ближайших версиях планируется интеграция с NVD API для определения уязвимых версий через CVE базу. DBIP геолокация для показа страны, ASN и провайдера в отчёте. LLM анализ через Claude для умного снижения false positives. Публикация пакета на PyPI.

Репозиторий проекта на Гитхабе

Проект открытый, MIT лицензия, только для авторизованного тестирования.

Комментарии (2)


  1. valefo20
    13.06.2026 17:32

    Выглядит годно. Насчет планов с LLM для снижения False Positives — это прям "киллер-фича", если взлетит, будет топ. Планируется ли интеграция с какими-то специфическими API для сканирования, или пока упор чисто на статику и поведение?


    1. oexce Автор
      13.06.2026 17:32

      Планируется интеграция с Claude API — модель будет анализировать контекст находки и убирать false positives умнее чем простые regex правила. Пока в разработке!