
молниеносно быстрый набор для пентестинга.
установка · использование · модули · документация · вклад
быстрая, конкурентная разведка и эксплуатация в одном бинарном файле. каждый сканер использует один HTTP-клиент с пулом соединений.
sif — это сканер для разведки и эксплуатации, который выполняет всю цепочку в одном бинарном файле: перечисление поддоменов, сканирование портов, краулер, nuclei, обнаружение фреймворков/CVE, извлечение секретов из JS, проверки веб-уязвимостей (CORS/XSS/редиректы), облачные и захватные проверки. 25+ типов сканирования, одна команда.
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
nuclei и colly скомпилированы как библиотеки, а не вызываются через оболочку (в дереве нет exec.Command), поэтому это единственный статический бинарник без зависимостей среды выполнения и ничего не нужно настраивать.
каждый сканер работает через один общий HTTP-клиент и рабочий пул с воровством задач. -proxy, -H, -cookie и -rate-limit применяются ко всему прогону сразу, соединения пулируются и повторно используются при сканировании (прогон на одном хосте использует одно соединение для ~50 запросов вместо 50 подключений), и медленный хост не задерживает остальные. этот общий клиент — практическая причина использовать его вместо соединения стека отдельных инструментов. сканирование портов основано на connect(), поэтому rustscan и nmap всё ещё быстрее для сырого сканирования портов.
он читает цели из stdin и выводит находки по одной строке под -silent, поэтому он хорошо компонуется:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diff превращает повторное сканирование в мониторинг, который сообщает только о изменениях, -notify отправляет в slack/discord/telegram/webhook, а также выполняет экспорт в sarif и markdown.
brew tap vmfunc/sif
brew install sif
установите с помощью предпочтительного AUR-помощника:
yay -S sif
# or
paru -S sif
# nixpkgs (declarative: add to configuration.nix or home-manager)
environment.systemPackages = [ pkgs.sif ];
# or imperatively
nix profile install nixpkgs#sif
# or just run it without installing
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
репозиторий также поставляется с flake, если вы хотите собрать из исходников:
nix run github:vmfunc/sif
curl -1sLf 'https://dl.cloudsmith.io/public/sif/deb/setup.deb.sh' | sudo -E bash
sudo apt-get install sif
скачайте последний бинарник из релизов.
git clone https://github.com/vmfunc/sif.git
cd sif
make
требуется go 1.25+
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# basic scan
./sif -u https://example.com
# directory fuzzing
./sif -u https://example.com -dirlist medium
# subdomain enumeration
./sif -u https://example.com -dnslist medium
# port scanning
./sif -u https://example.com -ports common
# javascript framework detection + cloud misconfig
./sif -u https://example.com -js -c3
# shodan host intelligence (requires SHODAN_API_KEY env var)
./sif -u https://example.com -shodan
# securitytrails domain discovery (requires SECURITYTRAILS_API_KEY env var)
# discovers subdomains + associated domains, then scans all of them
./sif -u https://example.com -securitytrails -headers
# sql recon + lfi scanning
./sif -u https://example.com -sql -lfi
# web vuln probes (cors, open redirect, reflected xss)
./sif -u https://example.com -cors -redirect -xss
# framework detection (with cve lookup)
./sif -u https://example.com -framework
# a broad sweep
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
запустите ./sif -h для просмотра всех опций.
пара подкоманд запускаются без сканирования:
# print the version (release builds are stamped; local builds use git describe)
./sif version
# show the latest release notes (also -pn)
./sif patchnote
при первом запуске новой версии sif один раз выводит примечания к выпуску. установите SIF_NO_PATCHNOTES=1, чтобы отключить это.
sif имеет модульную архитектуру. модули определяются в yaml и могут быть расширены пользователями.
эти опции применяются ко всем исходящим запросам во всех сканерах:
# сканирование через socks5-прокси с пользовательским заголовком, cookie и ограничением 20 запросов/с
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20
сканер, который явно устанавливает заголовок (например, API-ключ), всегда переопределяет глобальное значение по умолчанию.
запись результатов прогона в файл для CI/CD или анализа:
# сканирование и создание отчётов в форматах sarif и markdown
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
вывод SARIF может быть импортирован в GitHub Code Scanning; Markdown — это читаемое сводка по цели.
-diff превращает повторное сканирование в мониторинг: sif сохраняет снимок нормализованных находок каждой цели в JSON-файл, а при следующем запуске сообщает только дельту (+ new / - gone) относительно этого снимка, затем перезаписывает его. первый запуск для цели не имеет базовой линии, поэтому всё считается + new. Снимки сохраняются в -store (один санированный файл на цель); если не задано, используется каталог логов, иначе <user-config>/sif/state.
# базовый прогон, затем повторное сканирование для отображения только изменений
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
снимок всегда перезаписывается, поэтому каждый прогон сравнивается с предыдущим. дельта выводится в chrome (отправляется в обычный поток вывода / stderr при -silent), а не в поток находок.
отправка находок в чат/webhook, чтобы непрерывное сканирование оповещало о найденном. каждый провайдер использует один POST через общий HTTP-клиент, поэтому применяется глобальная конфигурация прокси/лимита/заголовков.
провайдеры настраиваются через переменные окружения; YAML-файл (-notify-config) переопределяет поля. ключи YAML соответствуют projectdiscovery/notify, поэтому существующая конфигурация переносится:
# отправить в Slack находки средней и выше серьёзности
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
./sif -u https://example.com -cors -xss -notify -notify-severity medium
провайдер без назначения пропускается; если ничего не настроено, -notify является молчаливой операцией. Slack/Discord/Telegram получают блок с находками фиксированной ширины; общий вебхук получает структурированный JSON ({count, findings[]}).
sif читает цели из stdin и принимает голые хосты, поэтому встраивается в Unix-конвейеры. -silent направляет весь баннер/спиннер/хром в stderr и выводит одну нормализованную находку на строку ([severity] target module title) в stdout:
# subfinder передаёт хосты, sif их сканирует, notify отправляет находки
subfinder -d example.com | sif -silent -probe | notify
| флаг | описание |
|---|---|
| stdin | поток целей через конвейер (один хост/URL на строку) читается вместе с -u/-f |
хосты без схемы по умолчанию используют https://; явная http:///https:// сохраняется; любая другая схема (ftp://, ...) отклоняется.
список доступных модулей:
./sif -lm
запуск конкретных модулей:
# по идентификатору
./sif -u https://example.com -m sqli-error-based,xss-reflected
# по тегу
./sif -u https://example.com -mt owasp-top10
# все модули
./sif -u https://example.com -am
создайте свои модули в ~/.config/sif/modules/. модули используют формат YAML, похожий на шаблоны nuclei:
id: my-custom-check
info:
name: my custom security check
author: you
severity: medium
description: checks for something specific
tags: [custom, recon]
type: http
http:
method: GET
paths:
- "{{BaseURL}}/admin"
- "{{BaseURL}}/login"
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "admin panel"
- "login"
condition: or
см. docs/modules.md для полного описания формата модулей.
приветствуются вклады. см. contributing.md для руководств.
# format
gofmt -w .
# lint
go run github.com/golangci/golangci-lint/v2/cmd/[email protected] run
# test
go test ./...
присоединяйтесь к нашему Discord для поддержки, обсуждения функций и советов по пентесту:
| флаг | описание |
|---|
-dirlist | фаззинг каталогов и файлов (small/medium/large) |
-mc | dirlist: соответствие этим кодам состояния (список через запятую, например 200,301) |
-fc | dirlist: фильтрация этих кодов состояния (список через запятую) |
-fs | dirlist: фильтрация ответов с такими размерами тела (список через запятую) |
-fw | dirlist: фильтрация ответов с такими значениями количества слов (список через запятую) |
-fr | dirlist: фильтрация ответов, тело которых соответствует этому регулярному выражению |
-ac | автокалибровка базовой линии soft-404 (dirlist, sql) |
-w | dirlist: пользовательский список слов (локальный файл или URL; переопределяет размер -dirlist) |
-e | dirlist: расширения, добавляемые к каждому слову (список через запятую, например php,bak,env) |
-dnslist | перечисление поддоменов (small/medium/large) |
-ports | сканирование портов (common/full) |
-nuclei | сканирование уязвимостей с помощью шаблонов nuclei |
-dork | автоматический гугл-доркинг |
-js | анализ JavaScript + извлечение секретов и конечных точек |
-c3 | неправильная конфигурация облачного хранилища |
-headers | анализ HTTP-заголовков |
-sh | анализ заголовков безопасности (отсутствующие/слабые заголовки) |
-st | обнаружение захвата поддоменов |
-cms | обнаружение CMS |
-whois | whois-запросы |
-git | обнаружение открытых git-репозиториев |
-shodan | shodan-запрос (требуется SHODAN_API_KEY) |
-securitytrails | обнаружение доменов + расширение целей (требуется SECURITYTRAILS_API_KEY) |
-sql | SQL-разведка |
-lfi | локальное включение файла |
-jwt | обнаружение JWT + офлайн-анализ слабостей (alg:none, слабый HMAC, exp, чувствительные claims) |
-openapi | зонд на обнаружение OpenAPI/Swagger спецификации (перечисляет пути + конечные точки без аутентификации) |
-favicon | хеширование favicon (mmh3 в стиле shodan, сопоставление технологий + уточняющий запрос) |
-cors | зонд на неправильную конфигурацию CORS |
-redirect | зонд на открытый редирект |
-xss | зонд на отражённый XSS |
-framework | обнаружение фреймворков с поиском CVE |
-crawl | веб-краулер (обход ссылок/скриптов/форм того же хоста) |
-crawl-depth | максимальная глубина рекурсии краулера (по умолчанию 2) |
-passive | пассивное обнаружение поддоменов/URL (нулевой трафик к цели) |
-probe | зонд на активные хосты (статус, заголовок, сервер, цепочка редиректов) |
| флаг | описание |
|---|
-proxy | маршрутизация всего трафика через прокси (http/https/socks5 URL) |
-H, --header | пользовательский заголовок для отправки (повторяемый или через запятую, "Key: Value") |
-cookie | заголовок cookie, отправляемый с каждым запросом |
-rate-limit | максимум запросов в секунду (0 = без ограничений, по умолчанию 0) |
| флаг | описание |
|---|
-sarif | записать отчёт SARIF 2.1.0 в этот файл |
-markdown, -md | записать отчёт в формате Markdown в этот файл |
-silent | простой вывод: chrome в stderr, по одной находке на строку в stdout (для конвейеров) |
-diff | показывать только находки, добавленные/удалённые с последнего снимка каждой цели |
-store | каталог снимков для -diff (по умолчанию: каталог логов, иначе <user-config>/sif/state) |
| флаг | описание |
|---|
-notify | отправить находки всем настроенным провайдерам после сканирования |
-notify-severity | минимальная серьёзность для отправки (info/low/medium/high/critical, по умолчанию medium) |
-notify-config | путь к YAML-конфигу, совместимому с notify (переопределяет переменные окружения) |
| переменная окружения | ключ YAML | провайдер |
|---|
SLACK_WEBHOOK_URL | slack_webhook_url | Slack входящий вебхук |
DISCORD_WEBHOOK_URL | discord_webhook_url | Discord вебхук |
TELEGRAM_BOT_TOKEN | telegram_api_key | Telegram bot API (также требуется ID чата) |
TELEGRAM_CHAT_ID | telegram_chat_id | целевой чат Telegram |
NOTIFY_WEBHOOK_URL | webhook_url | общий JSON-вебхук (структурированные находки) |
![]() vmfunc 🚧 🧑🏫 📆 🛡️ 💻 | ![]() ProjectDiscovery 📦 | ![]() macdoos 💻 | ![]() Matthieu Witrowiez 🤔 | ![]() tessa 🚇 💬 📓 | ![]() Eva 📝 🖋 🔬 🛡️ ⚠️ 💻 | ![]() Zoa Hickenlooper 💻 |
![]() acxtrilla 📦 |