| name | fingerprinting-server-software |
| description | Identify the server software, framework, and component versions a
target is running from its HTTP response signatures — Server header,
X-Powered-By, Via, X-AspNet-Version, X-Runtime, X-Drupal-Cache,
X-Generator, Set-Cookie name patterns, error-page artwork,
HTTP method behavior signatures.
Use when: penetration test reconnaissance phase, post-deploy audit
of fingerprintable exposure, or before reporting "no obvious version
disclosure" to an auditor.
Threshold: any version string in a response header (e.g.,
Server header with nginx/1.18.0, X-Powered-By with PHP/7.4.21,
X-Generator with Drupal 9), or any framework-default Set-Cookie
name (PHPSESSID, JSESSIONID, connect.sid, _csrf_token).
Trigger with: "fingerprint server", "version disclosure",
"tech-stack identification", "what's this site running".
|
| allowed-tools | ["Read","Bash(python3:*)","Bash(curl:*)"] |
| disallowed-tools | ["Bash(rm:*)","Edit(/etc/*)"] |
| version | 3.30.0 |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| license | MIT |
| compatibility | Designed for Claude Code |
| tags | ["security","information-disclosure","fingerprinting","reconnaissance","pentest"] |
Fingerprinting Server Software
Overview
Version disclosure is the cheapest recon an attacker buys. A single
GET request returns the Server: header, the X-Powered-By: header,
and any framework-default cookies. From those three signals the
attacker derives: web server family + exact version, app-framework +
version, language runtime + version. That maps directly to a CVE
catalog query: every published CVE affecting any of those components,
filtered to ones an unauthenticated attacker can trigger.
The fix is operationally trivial (one line in nginx, one line in
Apache, one line in IIS) but the discipline isn't universal. This
skill enumerates the signals + reports each disclosure with the
severity matching how much it enables follow-on attack.
When the skill produces findings
| Finding | Severity | Threshold | Affected control |
|---|
| Server header discloses version | MEDIUM | Server: nginx/1.18.0 or similar with explicit version | CWE-200 |
| Server header discloses minor version | LOW | Server: nginx (no version) | CWE-200 |
| X-Powered-By discloses framework version | MEDIUM | X-Powered-By: PHP/7.4.21, Express, ASP.NET | CWE-200 |
| X-AspNet-Version present | HIGH | Specific dotnet runtime version | CWE-200 |
| X-Runtime / X-Rails / X-Django headers present | LOW | Framework identification, no version | CWE-200 |
| X-Generator: drupal/wordpress + version | MEDIUM | CMS family + version disclosure | CWE-200 |
| Via header discloses proxy chain | LOW | Reveals upstream architecture (Varnish, Squid, CloudFront) | CWE-200 |
| Framework-default Set-Cookie pattern | LOW | PHPSESSID, JSESSIONID, connect.sid, etc. | CWE-200 |
| Error page reveals stack trace |