← All Tools

exifray

Discover and extract metadata from publicly accessible files on any domain.
GitHub ★ 12
go install github.com/mmarting/exifray@latest
exifray flow diagram

exifray discovers publicly accessible files on target domains, downloads them in memory and extracts metadata without writing anything to disk. It queries 12 sources (passive archives, search engines, scraping) to locate files, then parses EXIF, PDF properties, OOXML/ODF structures, XMP and more to surface sensitive findings: usernames, emails, GPS coordinates, internal paths, software versions, printer names and serial numbers. Results are deduplicated and grouped by category. Supports batch processing, proxy routing, rate limiting and JSON output for pipeline integration.

How it works

Discovery
Queries up to 12 sources (passive archives, search engines, scraping) to locate file URLs on the target domain
Deduplication
Consolidates results from all sources, removes duplicates and filters by file extension
Extraction
Downloads files in memory and extracts metadata from EXIF, PDF properties, OOXML/ODF, XMP and more
Analysis
Scans extracted metadata for sensitive data across 9 categories: users, emails, GPS, software, paths and more
Output
Presents deduplicated findings grouped by category with optional JSON export

Features

  • 12 discovery sources (10 free, 2 API-based)
  • In-memory file processing: downloads and analyzes without disk storage
  • 9 detection categories: GPS, users, emails, software, printers, serials, paths, URLs, hostnames
  • 11 file type families: JPEG, TIFF, PNG, PDF, DOCX/XLSX/PPTX, ODT/ODS/ODP, SVG, MP3, DOC/XLS/PPT, GIF, WebP/BMP
  • XMP metadata extraction from any compatible file
  • GPS findings include Google Maps links for quick verification
  • Deduplication across sources and within metadata findings
  • Custom file extension filtering
  • Source selection: run only specific discovery methods
  • Proxy support (HTTP, SOCKS5)
  • Rate limiting and configurable timeout
  • Batch processing with domain list input
  • JSON output and file export for automation
  • Quiet mode: one finding per line for piping into other tools
  • Show source URLs per finding with --show-urls
  • Config file for API keys ($HOME/.exifray.conf)

Discovery Methods

MethodTypeDescription
Wayback MachineIncludedCDX API for historical file URLs from web.archive.org
Common CrawlIncludedCC Index API for URLs from Common Crawl datasets
AlienVault OTXIncludedDomain URL lists (optional API key improves rate limits)
URLScan.ioIncludedSearch API for indexed file URLs (optional key increases limits)
Web ScrapingIncludedCrawls target sites and extracts file URLs from HTML
SitemapIncludedParses sitemap.xml and linked sitemaps for file references
HackerTargetIncludedHost search API for domain-associated URLs
crt.shIncludedCertificate Transparency logs for subdomain discovery
ThreatMinerIncludedThreat intelligence API for domain-associated URLs
RapidDNSIncludedSubdomain discovery via rapiddns.io
VirusTotalFree APIDomain endpoint URL discovery (500 free lookups/day)
Google SearchPaid APIFile-type dorking via Custom Search API

Usage Examples

exifray -d example.com
Scan a domain using all free sources
exifray -d example.com --json -o results.json
Export findings to JSON file
exifray -d example.com -e pdf,docx,xlsx
Scan only specific file types
exifray -d example.com --sources wayback,scrape,sitemap
Use only specific discovery sources
exifray -d example.com --show-urls
Display source file URLs alongside each finding
exifray -l domains.txt -w 50
Batch processing with increased concurrency
exifray -d example.com --proxy socks5://127.0.0.1:9050
Route through a proxy
exifray -d example.com --rate-limit 5
Limit request rate to 5 per second
exifray -q -d example.com
Silent mode for automation
subfinder -d example.com -silent | exifray
Pipe domains from subfinder
exifray -q -d target.com | grep "^\[Users\]" | cut -d' ' -f2-
Filter findings by category with standard tools
exifray -d target.com --json | jq '.findings[] | select(.category == "GPS")'
Extract GPS findings from JSON output with jq

Options

FlagDescription
-d, --domainTarget domain (required unless -l or stdin)
-l, --listFile containing domain list (batch mode)
-e, --extensionsCustom file extensions, comma-separated
-s, --sourcesSources to use, comma-separated (default: all)
-o, --outputWrite results to file (JSON format)
-c, --configConfig file path (default: $HOME/.exifray.conf)
-w, --workersConcurrent worker threads (default: 20)
--timeoutHTTP timeout in seconds (default: 15)
--rate-limitMax requests per second, 0 = unlimited (default: 0)
--proxyProxy URL (http:// or socks5://)
--jsonOutput results as JSON
--show-urlsDisplay source file URLs per finding
-v, --verboseEnable verbose output
-q, --quietSilent mode: findings only, one per line
--versionPrint version and exit
-h, --helpDisplay help information