exifray
Descubre y extrae metadatos de archivos públicamente accesibles en cualquier dominio.
go install github.com/mmarting/exifray@latestexifray descubre archivos públicamente accesibles en dominios objetivo, los descarga en memoria y extrae metadatos sin escribir nada en disco. Consulta 12 fuentes (archivos pasivos, motores de búsqueda, scraping) para localizar archivos, y luego analiza EXIF, propiedades PDF, estructuras OOXML/ODF, XMP y más para revelar hallazgos sensibles: nombres de usuario, emails, coordenadas GPS, rutas internas, versiones de software, nombres de impresoras y números de serie. Los resultados se deduplican y agrupan por categoría. Soporta procesamiento por lotes, enrutamiento por proxy, rate limiting y salida JSON para integración en pipelines.
Cómo funciona
Descubrimiento
Consulta hasta 12 fuentes (archivos pasivos, motores de búsqueda, scraping) para localizar URLs de archivos en el dominio objetivo
Deduplicación
Consolida resultados de todas las fuentes, elimina duplicados y filtra por extensión de archivo
Extracción
Descarga archivos en memoria y extrae metadatos de EXIF, propiedades PDF, OOXML/ODF, XMP y más
Análisis
Analiza los metadatos extraídos en busca de datos sensibles en 9 categorías: usuarios, emails, GPS, software, rutas y más
Salida
Presenta hallazgos deduplicados agrupados por categoría con exportación JSON opcional
Características
- 12 fuentes de descubrimiento (10 gratuitas, 2 basadas en API)
- Procesamiento en memoria: descarga y analiza sin almacenar en disco
- 9 categorías de detección: GPS, usuarios, emails, software, impresoras, números de serie, rutas, URLs, hostnames
- 11 familias de tipos de archivo: JPEG, TIFF, PNG, PDF, DOCX/XLSX/PPTX, ODT/ODS/ODP, SVG, MP3, DOC/XLS/PPT, GIF, WebP/BMP
- Extracción de metadatos XMP de cualquier archivo compatible
- Los hallazgos GPS incluyen enlaces a Google Maps para verificación rápida
- Deduplicación entre fuentes y dentro de los hallazgos de metadatos
- Filtrado por extensiones de archivo personalizadas
- Selección de fuentes: ejecutar solo métodos de descubrimiento específicos
- Soporte proxy (HTTP, SOCKS5)
- Rate limiting y timeout configurable
- Procesamiento por lotes con lista de dominios
- Salida JSON y exportación a archivo para automatización
- Modo silencioso: un hallazgo por línea para encadenar con otras herramientas
- Mostrar URLs de origen por hallazgo con --show-urls
- Archivo de configuración para API keys ($HOME/.exifray.conf)
Métodos de Descubrimiento
| Método | Tipo | Descripción |
|---|---|---|
| Wayback Machine | Incluido | CDX API para URLs de archivos históricos desde web.archive.org |
| Common Crawl | Incluido | CC Index API para URLs de los datasets de Common Crawl |
| AlienVault OTX | Incluido | Listas de URLs del dominio (API key opcional mejora los límites) |
| URLScan.io | Incluido | API de búsqueda para URLs de archivos indexados (clave opcional aumenta los límites) |
| Web Scraping | Incluido | Rastrea sitios objetivo y extrae URLs de archivos del HTML |
| Sitemap | Incluido | Analiza sitemap.xml y sitemaps enlazados en busca de archivos |
| HackerTarget | Incluido | API de búsqueda de hosts para URLs asociadas al dominio |
| crt.sh | Incluido | Logs de Certificate Transparency para descubrimiento de subdominios |
| ThreatMiner | Incluido | API de inteligencia de amenazas para URLs asociadas al dominio |
| RapidDNS | Incluido | Descubrimiento de subdominios vía rapiddns.io |
| VirusTotal | API gratuita | Descubrimiento de URLs del dominio (500 consultas gratuitas/día) |
| Google Search | API de pago | Dorking por tipo de archivo vía Custom Search API |
Ejemplos de Uso
exifray -d example.com
Escanear un dominio usando todas las fuentes gratuitas
exifray -d example.com --json -o results.json
Exportar hallazgos a archivo JSON
exifray -d example.com -e pdf,docx,xlsx
Escanear solo tipos de archivo específicos
exifray -d example.com --sources wayback,scrape,sitemap
Usar solo fuentes de descubrimiento específicas
exifray -d example.com --show-urls
Mostrar las URLs de los archivos de origen junto a cada hallazgo
exifray -l domains.txt -w 50
Procesamiento por lotes con mayor concurrencia
exifray -d example.com --proxy socks5://127.0.0.1:9050
Enrutar a través de un proxy
exifray -d example.com --rate-limit 5
Limitar la tasa de peticiones a 5 por segundo
exifray -q -d example.com
Modo silencioso para automatización
subfinder -d example.com -silent | exifray
Encadenar dominios desde subfinder
exifray -q -d target.com | grep "^\[Users\]" | cut -d' ' -f2-
Filtrar hallazgos por categoría con herramientas estándar
exifray -d target.com --json | jq '.findings[] | select(.category == "GPS")'
Extraer hallazgos GPS de la salida JSON con jq
Opciones
| Flag | Descripción |
|---|---|
| -d, --domain | Target domain (required unless -l or stdin) |
| -l, --list | File containing domain list (batch mode) |
| -e, --extensions | Custom file extensions, comma-separated |
| -s, --sources | Sources to use, comma-separated (default: all) |
| -o, --output | Write results to file (JSON format) |
| -c, --config | Config file path (default: $HOME/.exifray.conf) |
| -w, --workers | Concurrent worker threads (default: 20) |
| --timeout | HTTP timeout in seconds (default: 15) |
| --rate-limit | Max requests per second, 0 = unlimited (default: 0) |
| --proxy | Proxy URL (http:// or socks5://) |
| --json | Output results as JSON |
| --show-urls | Display source file URLs per finding |
| -v, --verbose | Enable verbose output |
| -q, --quiet | Silent mode: findings only, one per line |
| --version | Print version and exit |
| -h, --help | Display help information |