
a suite de pentest super-rápida
instalar · uso · módulos · docs · contribuir
recon rápido e concorrente até exploração em um binário. cada scanner compartilha um cliente http com pool de conexões.
sif é um scanner de recon e exploração que executa toda a cadeia em um binário: enumeração de subdomínios, varredura de portas, crawler, nuclei, detecção de frameworks/cve, extração de segredos em js, sondas de vulnerabilidades web (cors/xss/redirect), verificação de cloud e takeover. mais de 25 tipos de varredura, um comando.
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
nuclei e colly são compilados como bibliotecas em vez de executados por shell (não há exec.Command na árvore), então é um único binário estático sem dependências de runtime e sem nada para conectar.
cada scanner é executado através de um único cliente http compartilhado e um pool de workers com roubo de trabalho. -proxy, -H, -cookie e -rate-limit se aplicam a toda a execução de uma vez, as conexões são agrupadas e reutilizadas durante a varredura (uma execução de host único reutiliza uma conexão para ~50 requisições em vez de fazer 50 conexões), e um host lento não segura o resto. esse cliente compartilhado é a razão prática para usá-lo em vez de encadear uma pilha de ferramentas separadas. a varredura de portas é baseada em connect(), então rustscan e nmap ainda são mais rápidos em varreduras de portas brutas.
ele lê alvos do stdin e imprime achados um por linha com -silent, então compõe:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diff transforma uma re-varredura em um monitor que só reporta o que mudou, -notify envia para slack/discord/telegram/webhook, e exporta para sarif e markdown.
brew tap vmfunc/sif
brew install sif
instale usando seu helper aur preferido:
yay -S sif
# ou
paru -S sif
# nixpkgs (declarativo: adicione à configuration.nix ou home-manager)
environment.systemPackages = [ pkgs.sif ];
# ou imperativamente
nix profile install nixpkgs#sif
# ou apenas execute sem instalar
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
o repositório também fornece um flake se você quiser compilar da fonte:
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
baixe o binário mais recente em releases.
git clone https://github.com/vmfunc/sif.git
cd sif
make
requer go 1.25+
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# varredura básica
./sif -u https://example.com
# fuzzing de diretórios
./sif -u https://example.com -dirlist medium
# enumeração de subdomínios
./sif -u https://example.com -dnslist medium
# varredura de portas
./sif -u https://example.com -ports common
# detecção de framework javascript + configuração incorreta de cloud
./sif -u https://example.com -js -c3
# inteligência de host do shodan (requer variável de ambiente SHODAN_API_KEY)
./sif -u https://example.com -shodan
# descoberta de domínio do securitytrails (requer variável de ambiente SECURITYTRAILS_API_KEY)
# descobre subdomínios + domínios associados e depois varre todos
./sif -u https://example.com -securitytrails -headers
# recon sql + varredura de lfi
./sif -u https://example.com -sql -lfi
# sondas de vulnerabilidades web (cors, redirecionamento aberto, xss refletido)
./sif -u https://example.com -cors -redirect -xss
# detecção de framework (com consulta a cve)
./sif -u https://example.com -framework
# uma varredura ampla
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
execute ./sif -h para todas as opções.
alguns subcomandos são executados sem varredura:
# exibe a versão (releases oficiais são carimbadas; versões locais usam git describe)
./sif version
# mostra as notas da versão mais recente (também -pn)
./sif patchnote
Na primeira vez que você executa uma nova versão, o sif exibe as notas daquela versão uma vez. Defina SIF_NO_PATCHNOTES=1 para desativar.
sif tem uma arquitetura modular. Os módulos são definidos em yaml e podem ser estendidos pelos usuários.
estas se aplicam a toda requisição de saída em todos os scanners:
# varredura através de um proxy socks5 com um cabeçalho personalizado, cookie e limite de 20 req/s
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20
um scanner que define um cabeçalho explicitamente (ex.: uma chave de api) sempre tem prioridade sobre o padrão global.
escreve os achados da execução em um arquivo para ci/cd ou triagem:
# varredura e emite tanto um relatório sarif quanto markdown
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
a saída sarif é ingerível pelo github code scanning; markdown é um resumo legível por alvo.
-diff transforma uma re-varredura em um monitor: sif captura os achados normalizados de cada alvo em um arquivo json, e na próxima execução reporta apenas o delta (+ novo / - removido) em relação àquele snapshot, depois o sobrescreve. a primeira execução para um alvo não tem linha de base, então tudo é + novo. os snapshots vão para -store (um arquivo sanitizado por alvo); quando não definido, reutiliza o diretório de log, caindo para <user-config>/sif/state.
# execução de linha de base, depois re-varredura e vê apenas o que mudou
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
o snapshot é sempre reescrito, então cada execução difere da anterior. o delta é chrome (vai para a saída normal / stderr com -silent), não o fluxo de achados.
envia achados para um sink de chat/webhook para que uma execução contínua de recon alerte sobre o que encontrar. cada provedor é um único POST através do cliente http compartilhado, então a configuração global de proxy/limite de taxa/cabeçalho se aplica.
os provedores são configurados primeiro por env; um arquivo yaml (-notify-config) sobrescreve por campo. as chaves yaml correspondem ao projectdiscovery/notify então uma configuração existente é portada:
# alertar o slack sobre achados de severidade média+ descobertos durante uma varredura
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
./sif -u https://example.com -cors -xss -notify -notify-severity medium
um provedor sem destino é ignorado; com nada configurado, -notify é um no-op silencioso. slack/discord/telegram recebem um bloco de achado de largura fixa; o webhook genérico recebe json estruturado ({count, findings[]}).
sif lê alvos do stdin e aceita hosts nus, então se encaixa em um pipeline unix. -silent roteia todo o banner/spinner/log chrome para stderr e imprime um achado normalizado por linha ([severidade] alvo módulo título) para stdout:
# subfinder alimenta hosts, sif os sonda, notify envia os achados
subfinder -d example.com | sif -silent -probe | notify
| flag | descrição |
|---|---|
| stdin | um fluxo de alvos canalizado (um host/url por linha) é lido junto com -u/-f |
hosts sem esquema padrão para https://; um http:///https:// explícito é mantido; qualquer outro esquema (ftp://, ...) é rejeitado.
lista módulos disponíveis:
./sif -lm
executa módulos específicos:
# executar por id
./sif -u https://example.com -m sqli-error-based,xss-reflected
# executar por tag
./sif -u https://example.com -mt owasp-top10
# executar todos os módulos
./sif -u https://example.com -am
crie seus próprios módulos em ~/.config/sif/modules/. os módulos usam um formato yaml semelhante aos templates nuclei:
id: my-custom-check
info:
name: minha verificação de segurança personalizada
author: você
severity: medium
description: verifica algo específico
tags: [custom, recon]
type: http
http:
method: GET
paths:
- "{{BaseURL}}/admin"
- "{{BaseURL}}/login"
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "painel admin"
- "login"
condition: or
veja docs/modules.md para o formato completo do módulo.
contribuições bem-vindas. veja contributing.md para diretrizes.
# formatar
gofmt -w .
# lint
go run github.com/golangci/golangci-lint/v2/cmd/[email protected] run
# testar
go test ./...
entre no nosso discord para suporte, discussões de funcionalidades e dicas de pentest:
| flag | descrição |
|---|
-dirlist | fuzzing de diretórios e arquivos (pequeno/médio/grande) |
-mc | dirlist: corresponder a esses códigos de status (lista separada por vírgulas, ex. 200,301) |
-fc | dirlist: filtrar esses códigos de status (lista separada por vírgulas) |
-fs | dirlist: filtrar respostas com esses tamanhos de corpo (lista separada por vírgulas) |
-fw | dirlist: filtrar respostas com essas contagens de palavras (lista separada por vírgulas) |
-fr | dirlist: filtrar respostas cujo corpo corresponde a esta regex |
-ac | auto-calibrar a linha de base de soft-404/curinga (dirlist, sql) |
-w | dirlist: wordlist personalizada (arquivo local ou url; substitui o tamanho -dirlist) |
-e | dirlist: extensões anexadas a cada palavra (lista separada por vírgulas, ex. php,bak,env) |
-dnslist | enumeração de subdomínios (pequeno/médio/grande) |
-ports | varredura de portas (comum/completa) |
-nuclei | varredura de vulnerabilidades com templates nuclei |
-dork | dorking automatizado do google |
-js | análise javascript + extração de segredos e endpoints |
-c3 | configuração incorreta de armazenamento em nuvem |
-headers | análise de cabeçalhos http |
-sh | análise de cabeçalhos de segurança (cabeçalhos ausentes/fracos) |
-st | detecção de takeover de subdomínio |
-cms | detecção de cms |
-whois | consultas whois |
-git | detecção de repositório git exposto |
-shodan | consulta shodan (requer SHODAN_API_KEY) |
-securitytrails | descoberta de domínio + expansão de alvo (requer SECURITYTRAILS_API_KEY) |
-sql | recon sql |
-lfi | inclusão de arquivo local |
-jwt | descoberta jwt + análise offline de fraquezas (alg:none, hmac fraco, exp, claims sensíveis) |
-openapi | sonda de exposição de especificação openapi/swagger (enumera caminhos + endpoints não autenticados) |
-favicon | fingerprinting por hash de favicon (mmh3 estilo shodan, correspondência de tecnologia + consulta pivot) |
-cors | sonda de configuração incorreta de cors |
-redirect | sonda de redirecionamento aberto |
-xss | sonda de xss refletido |
-framework | detecção de framework com consulta a cve |
-crawl | crawler web (spider em links/scripts/formulários do mesmo host) |
-crawl-depth | profundidade máxima de recursão do crawl (padrão 2) |
-passive | descoberta passiva de subdomínios/urls (zero tráfego para o alvo) |
-probe | sonda de host ativo (status, título, servidor, cadeia de redirecionamento) |
| flag | descrição |
|---|
-proxy | rotear todo o tráfego através de um proxy (url http/https/socks5) |
-H, --header | cabeçalho personalizado a enviar (repetível ou separado por vírgulas, "Chave: Valor") |
-cookie | cabeçalho cookie a enviar com cada requisição |
-rate-limit | máximo de requisições por segundo (0 = ilimitado, padrão 0) |
| flag | descrição |
|---|
-sarif | escreve um relatório sarif 2.1.0 neste arquivo |
-markdown, -md | escreve um relatório markdown neste arquivo |
-silent | saída simples: chrome para stderr, um achado por linha para stdout (para pipelines) |
-diff | exibe apenas achados adicionados/removidos desde o último snapshot de cada alvo |
-store | diretório de snapshot para -diff (padrão: diretório de log, senão <user-config>/sif/state) |
| flag | descrição |
|---|
-notify | envia achados para cada provedor configurado após a varredura |
-notify-severity | severidade mínima para enviar (info/low/medium/high/critical, padrão medium) |
-notify-config | caminho para um arquivo yaml compatível com notify (sobrescreve variáveis de ambiente) |
| env var | chave yaml | provedor |
|---|
SLACK_WEBHOOK_URL | slack_webhook_url | webhook de entrada do slack |
DISCORD_WEBHOOK_URL | discord_webhook_url | webhook do discord |
TELEGRAM_BOT_TOKEN | telegram_api_key | api bot do telegram (também precisa do chat id) |
TELEGRAM_CHAT_ID | telegram_chat_id | chat de destino do telegram |
NOTIFY_WEBHOOK_URL | webhook_url | webhook json genérico (achados estruturados) |
![]() vmfunc 🚧 🧑🏫 📆 🛡️ 💻 | ![]() ProjectDiscovery 📦 | ![]() macdoos 💻 | ![]() Matthieu Witrowiez 🤔 | ![]() tessa 🚇 💬 📓 | ![]() Eva 📝 🖋 🔬 🛡️ ⚠️ 💻 | ![]() Zoa Hickenlooper 💻 |
![]() acxtrilla 📦 |