EyeWitness Explained — Automating Mass Web-Host Screenshots for Recon Triage thumbnail

EyeWitness Explained — Automating Mass Web-Host Screenshots for Recon Triage

⏱ approx. 13 min views 28 likes 0 LOG_DATE:2026-06-08
TOC

EyeWitness is a recon / triage tool developed by Christopher Truncer (FortyNorth Security). Its role is simple and powerful — automatically screenshot a large set of web hosts and bundle them into a single HTML report. Fire nmap or rustscan and you can get back hundreds of open web ports. Opening each one in a browser to check "which is a login page," "is it a default page," "is it an old app" isn't realistic. EyeWitness opens every host with a headless browser behind the scenes and takes a screenshot, attaching each host's response headers, identified technology, and (where known) default credentials in the report. The result: you can "eyeball them all at once and quickly pick the interesting targets — login panels, admin consoles, abandoned old apps." It can also screenshot RDP and VNC services.

01

What EyeWitness is — screenshot automation + an HTML report for triage #

A port-scan result is nothing but "a list of IPs and ports." Even with 300 lines of 443/tcp open https, which one is a foothold can't be known until you look at the content. What EyeWitness solves is exactly automating that "looking."

Hand it a list of hosts / URLs, and EyeWitness opens each one in a headless browser in turn and takes a screenshot, simultaneously recording the server's response-header info and, where possible, inferring the running technology. Finally it bundles them into a single browsable HTML report (report.html). The report lays out the screenshot, headers, and inferred info per host, and on top of that auto-categorizes them into groups like "Identified Login Pages" and "High Value Targets."

▸ EyeWitness fills the gap "between scan and manual work"

The recon flow is roughly three stages: port scan → triage (selection) → manual testing. EyeWitness owns the middle triage. If nmap answers "where is open" and ffuf or Burp handle "deep-diving an individual host," EyeWitness is the tool to decide which hosts to deep-dive at a glance. On Kali it is often pre-installed; if not, install it with apt install eyewitness.

02

Legal and ethical considerations #

EyeWitness looks like a "just looking" tool, but its reality is actually opening HTTP / RDP / VNC connections to the target hosts. Aiming it at third-party hosts without permission is access with no legitimate authority, and can be an illegal act under Japan's Unauthorised Computer Access Act or laws against obstruction of business, and the equivalents elsewhere. "I only took a screenshot" is no excuse.

▸ Targets you may point EyeWitness at
  • Assets you own or administer — your own server fleet, a VPS you pay for, an isolated learning lab.
  • A scope you have explicit written permission for — a pentest contract where target hosts and period are documented. Do not include a single out-of-scope host in the input list.
  • Legitimate learning platforms — Hack The Box, TryHackMe, and other environments where the operator permits recon.

Be especially careful with the workflow of feeding an nmap XML straight in. If an out-of-permission IP slipped into the scan range, EyeWitness will automatically go and connect to it too. Always check the contents of the list or XML before passing it, and limit it to the authorized scope only. The very act of "screenshotting third-party hosts you have no permission for" can be unauthorized access / abuse.

03

What it can do — screenshots / headers / credential hints / categorization #

What EyeWitness gathers in a single run goes beyond mere images. The information that accelerates triage is condensed into the report.

What it collectsContentMeaning for triage
Web screenshotsCaptures HTTP / HTTPS screensInstantly spot login pages / default pages by eye
RDP / VNC screenshotsAlso captures remote-desktop / VNC screensFind abandoned remote-control services
Response headersRecords Server and other headersGet a read on the running software / version
Technology inferenceGuesses the running technologyQuickly judge whether it's a known vulnerable product
Default-credential hintsNotes initial passwords for known productsKnow which unchanged default creds to try

Switch the capture mode to match the host type. For web only use --web; to capture RDP / VNC use --rdp / --vnc; to try everything at once use --all-protocols.

▸ The report's "categorization" makes triage faster

EyeWitness's report doesn't just line up the captured images — it auto-sorts them into categories like "Identified Login Pages" and "High Value Targets." Of hundreds of hosts, you can go straight to the login / admin screens worth seeing first, dramatically cutting the manual viewing burden. A host with a suggested default credential becomes a candidate to try right away.

04

The basics — a list / nmap XML / a single host #

EyeWitness runs once you decide how to feed the input and where to output. There are three ways to pass input: "a list of URLs/hosts (-f)," "an nmap/Nessus XML (-x)," and "a single URL (--single)." Specify the output directory with -d.

Capture from a URL list #

Passing a one-host-per-line text file with -f is the most basic. Capture web screens with --web.

Bulk screenshots from a URL list
$ eyewitness --web -f urls.txt -d recon_shots # --web HTTP/HTTPS screenshot mode # -f urls.txt one-host-per-line input list # -d recon_shots output directory for the report and screenshots

Capture from an nmap XML #

Output nmap as XML with -oX and EyeWitness reads it with -x, extracting the web services from the XML itself and capturing them. Being able to feed the scan result straight in is the strength.

Hand off the nmap XML for automatic capture
$ eyewitness -x nmap.xml --web -d shots --no-prompt # -x nmap.xml extract web from the nmap (or Nessus) XML # --no-prompt run to completion without pausing for input

A single host / RDP and VNC together #

To check just one, use --single. To try RDP, VNC, and web at once, use --all-protocols against a list.

Single host / all-protocols capture
$ eyewitness --single https://10.0.0.5 --web $ eyewitness --all-protocols -f hosts.txt -d shots # --single URL capture only a single host # --all-protocols try Web + RDP + VNC together
05

The recon pipeline — from scan to report to deep dive #

EyeWitness shows its true value built in as one stage of a recon pipeline rather than used alone. The classic flow goes like this.

1. Port discovery (rustscan / nmap)
Enumerate open web ports and write them out to XML with -oX nmap.xml.
2. Hand the XML to EyeWitness
eyewitness -x nmap.xml --web --no-prompt extracts the web services and bulk-screenshots them.
3. Triage with the HTML report
Browse report.html and narrow to the "interesting hosts" — login pages, admin consoles, old apps.
4. Deep-dive individual hosts (ffuf / Burp / nikto)
Run ffuf directory discovery and Burp manual testing on only the chosen few hosts.

The point is that EyeWitness supports the decision not to deep-dive everything. Firing ffuf at all of hundreds of hosts wastes both time and load. By taking a bird's-eye view with EyeWitness first and then concentrating ffuf / Burp on the hits only, you can spend your limited time on high-value targets.

nmap → EyeWitness → ffuf chain
$ nmap -p 80,443,8080 -oX nmap.xml 10.0.0.0/24 $ eyewitness -x nmap.xml --web -d shots --no-prompt # review shots/report.html, pick the hits, then… $ ffuf -w wordlist.txt -u https://10.0.0.5/FUZZ
06

Related tools and operational tips #

EyeWitness isn't the only tool that "screenshots many web hosts." Choose by use case and taste.

ToolCharacteristics
EyeWitnessThe classic. Triage-focused, with headers, default credentials, and categorization in the report. Can capture RDP / VNC too
AquatoneSpecialized in bulk-host screenshots + HTML report generation. A staple after subdomain enumeration
gowitnessGo-based, fast and lightweight. Easy to run as a single binary
httpxBy ProjectDiscovery. Centered on HTTP probing with screenshots also possible. Pairs well with other PD tools

The main options for using EyeWitness comfortably are below. They help with automation and catching what would otherwise be missed.

Option Effect
--threads <n> Number of concurrent threads. Raise for speed, lower for lighter load
--timeout <sec> Per-host timeout in seconds. Don't let slow hosts stall the run
--prepend-https Also try https:// for hosts without a scheme (avoid misses)
--no-prompt Run to completion without pausing for input (for pipelines / cron)
--resolve Include DNS PTR / resolution info in the report
--results <n> Number of screenshots per report page
--user-agent "<UA>" Set a custom User-Agent
▸ Operational tip — vetting the input matters most

EyeWitness actually connects to every host in the list / XML you pass. That is precisely why the biggest operational caution is "don't mix out-of-scope hosts into the input." Especially when automating with --no-prompt, always check the list contents before running. For hosts you worry about missing, use --prepend-https; if a slow host stalls the whole scan, set a shorter --timeout. Keep triage entirely within the authorized scope.

𝕏 Post B! Hatena