
la suite de pruebas de penetración extremadamente rápida.
instalación · uso · módulos · docs · contribuir
reconocimiento rápido y concurrente hasta explotación en un solo binario. cada escáner comparte un único cliente http con pool de conexiones.
sif es un escáner de reconocimiento y explotación que ejecuta toda la cadena en un solo binario: enumeración de subdominios, escaneo de puertos, rastreador, nuclei, detección de frameworks/cve, extracción de secretos de js, sondeos de vulnerabilidades web (cors/xss/redirect), nube y comprobaciones de takeover. más de 25 tipos de escaneo, un solo comando.
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
nuclei y colly están compilados como librerías en lugar de ser ejecutados por shell (no hay exec.Command en el árbol), así que es un único binario estático sin dependencias de tiempo de ejecución y sin necesidad de enlazar nada.
cada escáner se ejecuta a través de un único cliente http compartido y un pool de workers que roba trabajo. -proxy, -H, -cookie y -rate-limit se aplican a toda la ejecución a la vez, las conexiones se agrupan y reutilizan durante el escaneo (una ejecución de un solo host reutiliza una conexión para ~50 solicitudes en lugar de 50 conexiones nuevas), y un host lento no detiene al resto. ese cliente compartido es la razón práctica para usarlo en lugar de encadenar un conjunto de herramientas separadas. el escaneo de puertos se basa en connect(), así que rustscan y nmap siguen siendo más rápidos en escaneos de puertos en bruto.
lee objetivos desde stdin y muestra hallazgos uno por línea bajo -silent, por lo que se combina:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diff convierte un re-escaneo en un monitor que solo informa lo que cambió, -notify publica en slack/discord/telegram/webhook, y las ejecuciones exportan a sarif y markdown.
brew tap vmfunc/sif
brew install sif
instala usando tu asistente aur preferido:
yay -S sif
# o
paru -S sif
# nixpkgs (declarativo: añadir a configuration.nix o home-manager)
environment.systemPackages = [ pkgs.sif ];
# o imperativamente
nix profile install nixpkgs#sif
# o simplemente ejecutarlo sin instalar
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
el repositorio también incluye un flake si quieres compilar desde el código fuente:
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
descarga el binario más reciente desde lanzamientos.
git clone https://github.com/vmfunc/sif.git
cd sif
make
requiere go 1.25+
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# escaneo básico
./sif -u https://example.com
# fuzzing de directorios
./sif -u https://example.com -dirlist medium
# enumeración de subdominios
./sif -u https://example.com -dnslist medium
# escaneo de puertos
./sif -u https://example.com -ports common
# detección de frameworks javascript + configuración incorrecta en la nube
./sif -u https://example.com -js -c3
# inteligencia de host shodan (requiere variable de entorno SHODAN_API_KEY)
./sif -u https://example.com -shodan
# descubrimiento de dominios securitytrails (requiere variable de entorno SECURITYTRAILS_API_KEY)
# descubre subdominios + dominios asociados, luego escanea todos
./sif -u https://example.com -securitytrails -headers
# reconocimiento sql + escaneo lfi
./sif -u https://example.com -sql -lfi
# sondeos de vulnerabilidades web (cors, redirección abierta, xss reflejado)
./sif -u https://example.com -cors -redirect -xss
# detección de frameworks (con búsqueda de cve)
./sif -u https://example.com -framework
# un barrido amplio
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
ejecuta ./sif -h para todas las opciones.
un par de subcomandos se ejecutan sin escaneo:
# imprime la versión (los lanzamientos tienen versiones fijas; las compilaciones locales usan git describe)
./sif version
# muestra las últimas notas de lanzamiento (también -pn)
./sif patchnote
la primera vez que ejecutas un nuevo lanzamiento, sif imprime las notas de ese lanzamiento una vez. establece SIF_NO_PATCHNOTES=1 para desactivarlo.
sif tiene una arquitectura modular. los módulos se definen en yaml y pueden ser extendidos por los usuarios.
se aplican a cada solicitud saliente en todos los escáneres:
# escanear a través de un proxy socks5 con una cabecera personalizada, cookie y límite 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
un escáner que establece una cabecera explícitamente (por ejemplo, una clave de api) siempre prevalece sobre el valor global por defecto.
escribe los hallazgos de la ejecución en un archivo para ci/cd o triaje:
# escanear y emitir tanto un informe sarif como markdown
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
la salida sarif se puede ingerir por github code scanning; markdown es un resumen legible por objetivo.
-diff convierte un re-escaneo en un monitor: sif toma una instantánea de los hallazgos normalizados de cada objetivo en un archivo json, y en la siguiente ejecución informa solo el delta (+ nuevo / - eliminado) respecto a esa instantánea, luego la sobrescribe. la primera ejecución para un objetivo no tiene línea base, por lo que todo es + nuevo. las instantáneas se guardan en -store (un archivo sanitizado por objetivo); cuando no se establece, reutiliza el directorio de logs, recurriendo a <user-config>/sif/state.
# ejecución de línea base, luego re-escanear más tarde y ver solo lo que cambió
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
la instantánea siempre se reescribe, por lo que cada ejecución se diferencia de la anterior. el delta es chrome (va por el sumidero de salida normal / stderr bajo -silent), no el flujo de hallazgos.
envía hallazgos a un sumidero de chat/webhook para que una ejecución de reconocimiento continuo alerte sobre lo que encuentra. cada proveedor es un único POST a través del cliente http compartido, por lo que se aplica la configuración global de proxy/límite de velocidad/cabecera.
los proveedores se configuran primero con variables de entorno; un archivo yaml (-notify-config) anula por campo. las claves yaml coinciden con projectdiscovery/notify así que una configuración existente se migra:
# alertar a slack sobre hallazgos de severidad media o superior descubiertos durante un escaneo
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
./sif -u https://example.com -cors -xss -notify -notify-severity medium
un proveedor sin destino se omite; sin nada configurado, -notify es un no-op silencioso. slack/discord/telegram reciben un bloque de hallazgos de ancho fijo; el webhook genérico recibe json estructurado ({count, findings[]}).
sif lee objetivos desde stdin y acepta hosts desnudos, por lo que encaja en una tubería unix. -silent dirige todo el banner/spinner/log chrome a stderr e imprime un hallazgo normalizado por línea ([severity] target module title) a stdout:
# subfinder alimenta hosts, sif los sondea, notify envía los hallazgos
subfinder -d example.com | sif -silent -probe | notify
| bandera | descripción |
|---|---|
| stdin | un flujo de objetivos canalizado (un host/url por línea) se lee junto con -u/-f |
los hosts sin esquema por defecto usan https://; un http:///https:// explícito se mantiene; cualquier otro esquema (ftp://, ...) se rechaza.
lista los módulos disponibles:
./sif -lm
ejecuta módulos específicos:
# ejecutar por id
./sif -u https://example.com -m sqli-error-based,xss-reflected
# ejecutar por etiqueta
./sif -u https://example.com -mt owasp-top10
# ejecutar todos los módulos
./sif -u https://example.com -am
crea tus propios módulos en ~/.config/sif/modules/. los módulos usan un formato yaml similar a las plantillas 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
consulta docs/modules.md para el formato completo del módulo.
las contribuciones son bienvenidas. consulta contributing.md para las pautas.
# formatear
gofmt -w .
# lint
go run github.com/golangci/golangci-lint/v2/cmd/[email protected] run
# probar
go test ./...
únete a nuestro discord para soporte, discusiones de características y consejos de pentesting:
| bandera | descripción |
|---|
-dirlist | fuzzing de directorios y archivos (small/medium/large) |
-mc | dirlist: coincide con estos códigos de estado (lista separada por comas, ej. 200,301) |
-fc | dirlist: filtrar estos códigos de estado (lista separada por comas) |
-fs | dirlist: filtrar respuestas con estos tamaños de cuerpo (lista separada por comas) |
-fw | dirlist: filtrar respuestas con estos recuentos de palabras (lista separada por comas) |
-fr | dirlist: filtrar respuestas cuyo cuerpo coincida con esta expresión regular |
-ac | autocalibrar la línea base de comodín soft-404 (dirlist, sql) |
-w | dirlist: lista de palabras personalizada (archivo local o url; anula el tamaño de -dirlist) |
-e | dirlist: extensiones añadidas a cada palabra (lista separada por comas, ej. php,bak,env) |
-dnslist | enumeración de subdominios (small/medium/large) |
-ports | escaneo de puertos (common/full) |
-nuclei | escaneo de vulnerabilidades con plantillas nuclei |
-dork | dorking automático de google |
-js | análisis de javascript + extracción de secretos y endpoints |
-c3 | configuración incorrecta de almacenamiento en la nube |
-headers | análisis de cabeceras http |
-sh | análisis de cabeceras de seguridad (cabeceras faltantes/débiles) |
-st | detección de takeover de subdominios |
-cms | detección de cms |
-whois | consultas whois |
-git | detección de repositorios git expuestos |
-shodan | consulta shodan (requiere SHODAN_API_KEY) |
-securitytrails | descubrimiento de dominios + expansión de objetivos (requiere SECURITYTRAILS_API_KEY) |
-sql | reconocimiento sql |
-lfi | inclusión local de archivos |
-jwt | descubrimiento jwt + análisis de debilidades offline (alg:none, hmac débil, exp, reclamaciones sensibles) |
-openapi | sonda de exposición de especificaciones openapi/swagger (enumera rutas + endpoints no autenticados) |
-favicon | huella digital de favicon mmh3 (estilo shodan, coincidencia tecnológica + consulta pivote) |
-cors | sonda de configuración incorrecta de cors |
-redirect | sonda de redirección abierta |
-xss | sonda de xss reflejado |
-framework | detección de frameworks con búsqueda de cve |
-crawl | rastreador web (enlaces/scripts/formularios del mismo host) |
-crawl-depth | profundidad máxima de recursión del rastreo (por defecto 2) |
-passive | descubrimiento pasivo de subdominios/urls (cero tráfico al objetivo) |
-probe | sonda de host en vivo (estado, título, servidor, cadena de redirección) |
| bandera | descripción |
|---|
-proxy | enrutar todo el tráfico a través de un proxy (url http/https/socks5) |
-H, --header | cabecera personalizada a enviar (repetible o separada por comas, "Key: Value") |
-cookie | cabecera cookie a enviar con cada solicitud |
-rate-limit | máximo de solicitudes por segundo (0 = ilimitado, por defecto 0) |
| bandera | descripción |
|---|
-sarif | escribe un informe sarif 2.1.0 en este archivo |
-markdown, -md | escribe un informe markdown en este archivo |
-silent | salida simple: chrome a stderr, un hallazgo por línea a stdout (para tuberías) |
-diff | mostrar solo hallazgos añadidos/eliminados desde la última instantánea de cada objetivo |
-store | directorio de instantáneas para -diff (por defecto: directorio de logs, si no <user-config>/sif/state) |
| bandera | descripción |
|---|
-notify | enviar hallazgos a cada proveedor configurado después del escaneo |
-notify-severity | severidad mínima a enviar (info/low/medium/high/critical, por defecto medium) |
-notify-config | ruta a un archivo yaml compatible con notify (anula las variables de entorno) |
| variable de entorno | clave yaml | proveedor |
|---|
SLACK_WEBHOOK_URL | slack_webhook_url | webhook entrante de slack |
DISCORD_WEBHOOK_URL | discord_webhook_url | webhook de discord |
TELEGRAM_BOT_TOKEN | telegram_api_key | api de bot de telegram (necesita chat id) |
TELEGRAM_CHAT_ID | telegram_chat_id | chat destino de telegram |
NOTIFY_WEBHOOK_URL | webhook_url | webhook json genérico (hallazgos estructurados) |
![]() vmfunc 🚧 🧑🏫 📆 🛡️ 💻 | ![]() ProjectDiscovery 📦 | ![]() macdoos 💻 | ![]() Matthieu Witrowiez 🤔 | ![]() tessa 🚇 💬 📓 | ![]() Eva 📝 🖋 🔬 🛡️ ⚠️ 💻 | ![]() Zoa Hickenlooper 💻 |
![]() acxtrilla 📦 |