Add all discovered vhosts to /etc/hosts for testing
Test each vhost independently β different apps may have different vulns
π― Operational Context
Use when: Target IP hosts multiple web applications differentiated by Host header β Nginx/Apache virtual hosting is the norm for shared infrastructure.
Think Dumber First: Always fuzz Host header against the main IP after finding it. Dev, admin, and internal portals frequently live on vhosts not in DNS. ffuf -H "Host: FUZZ.target.com" is the first move.
Skip when: Single-host deployment confirmed via Shodan/Censys β vhost fuzzing wastes time on dedicated servers.
Key insight: A VHost may have no public DNS record. Itβs only accessible by sending the right Host header β can only be found by fuzzing, not passive DNS recon.
Types of Virtual Hosting
Name-Based (Most Common) β Uses Host header to serve different content on same IP/Port β primary fuzzing target
IP-Based β Unique IP per site (rare due to IP scarcity)
Port-Based β Different sites on different ports
VHost Fuzzing Tools
Tool
Key Feature
gobuster
--append-domain flag β appends base domain to each wordlist entry
ffuf
Advanced filtering (-fs, -fw, -fl) for false positive removal
feroxbuster
Recursive, Rust-based, fast
gobuster Command Breakdown
-u http://[DOMAIN] β use domain name, not IP (after adding to /etc/hosts)
--append-domain β converts dev β dev.inlanefreight.htb
Baseline with default response size then filter: -fs [default_size]
ffuf vhost fuzz misses results
Host header format wrong
Try both FUZZ.target.com and FUZZ as Host values; some configs use short names
Valid vhost returns 302 redirect loop
Redirect to HTTPS but no cert
Add -u http://[TARGET_IP]/ and manually follow redirect; add -r flag
Cannot reach vhost from attack box
DNS not resolving
Add vhost to /etc/hosts: [TARGET_IP] discovered-vhost.target.com
gobuster vhost mode returns 400 errors
HTTP/1.1 Host header required
Use curl -H 'Host: admin.target.com' http://[TARGET_IP]/ to verify manually
π Reporting Trigger
Finding Title: Internal Virtual Hosts Exposed on Public-Facing IP
Impact: Internal web applications (admin panels, dev environments, API backends) accessible via Host header manipulation bypass intended access restrictions tied to DNS resolution.
Root Cause: Network-level access controls applied at DNS/domain level rather than IP/firewall level. Internal vhosts share IP space with public-facing services.
Recommendation: Apply authentication and network-level ACLs at the vhost level, not just DNS. Restrict internal vhost access by source IP. Audit all virtual host configurations for unintended exposure.