| name | tech-fingerprint |
| description | Identify technologies, frameworks, and software versions running on web targets. Use when you need to discover the technology stack of a website, when mapping attack surface for known CVEs, when identifying CMS or framework versions, or when the user asks about what technologies a site is running. |
| tags | ["security","fingerprint","technology","detection","version"] |
| triggers | ["technology fingerprint","tech stack detection","identify technology","version detection","wappalyzer"] |
tech-fingerprint
When to Use
- Need to identify what technologies a website is running
- Discovering CMS platforms (WordPress, Drupal, Joomla)
- Finding JavaScript frameworks (React, Angular, Vue)
- Identifying web servers and their versions
- Mapping attack surface for known vulnerabilities
- Looking for outdated software with CVEs
- User asks "what is this site built with?"
- Preparing for targeted vulnerability scanning
- Building technology profiles for multiple targets
Quick Start
echo "https://example.com" | httpx -silent -td -sc -title
whatweb -a 3 https://example.com
Step-by-Step Process
Phase 1: Quick Technology Detection (Httpx)
-
Basic tech detection:
echo "https://example.com" | httpx -silent -td
-
With status and title:
cat urls.txt | httpx -silent -td -sc -title
-
Full fingerprint output:
cat urls.txt | httpx -silent -td -sc -title -server -json -o fingerprint.json
-
WordPress detection:
cat urls.txt | httpx -silent -wp -json -o wordpress.json
-
CPE detection for CVE mapping:
cat urls.txt | httpx -silent -cpe -json -o cpe.json
Phase 2: Deep Fingerprinting (WhatWeb)
-
Stealthy scan (single request):
whatweb -a 1 https://example.com
-
Aggressive scan (version detection):
whatweb -a 3 https://example.com
-
Heavy scan (full enumeration):
whatweb -a 4 https://example.com
-
JSON output:
whatweb --log-json=results.json https://example.com
-
Scan from file:
whatweb -i urls.txt --log-json=whatweb.json
-
Verbose with plugin info:
whatweb -v https://example.com
Phase 3: Combine Results
cat urls.txt | httpx -silent -td -json -o httpx_tech.json
whatweb -i urls.txt --log-json=whatweb_tech.json
cat httpx_tech.json | jq -r '.tech[]?' | sort -u > technologies.txt
Phase 4: Filter High-Value Targets
cat httpx_tech.json | jq -r 'select(.tech | contains(["WordPress"])) | .url'
cat httpx_tech.json | jq -r 'select(.tech | contains(["Laravel"])) | .url'
whatweb -i urls.txt -a 3 | grep -i "apache/2.2"
Examples
Example 1: Quick Technology Scan
Scenario: Fast tech detection across many targets
subfinder -d example.com -silent | httpx -silent -td -sc -title
Output:
https://www.example.com [200] [Example Domain] [nginx,PHP,WordPress]
https://api.example.com [200] [API] [nginx,Node.js,Express]
https://shop.example.com [200] [Shop] [Apache,PHP,Magento]
Example 2: WordPress Detection
Scenario: Find WordPress sites and their plugins/themes
cat urls.txt | httpx -silent -wp -json | jq
Output:
{
"url": "https://blog.example.com",
"wordpress": {
"version": "6.4.2",
"plugins": ["contact-form-7", "yoast-seo", "woocommerce"],
"themes": ["flavor"]
}
}
Example 3: Deep Version Detection
Scenario: Get exact software versions for CVE research
whatweb -a 3 https://example.com
Output:
https://example.com [200 OK] Apache[2.4.41], Country[US], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[93.184.216.34], JQuery[3.5.1], PHP[7.4.3], PoweredBy[PHP/7.4.3], Script[text/javascript], Title[Example Domain], X-Powered-By[PHP/7.4.3]
Example 4: JSON Pipeline
Scenario: Structured output for further processing
whatweb -a 3 --log-json=tech.json https://example.com
cat tech.json | jq '.plugins | keys[]'
Output:
Apache
HTML5
HTTPServer
JQuery
PHP
Title
Example 5: CPE for Vulnerability Mapping
Scenario: Get CPE identifiers for CVE database lookups
echo "https://example.com" | httpx -silent -cpe -json | jq '.cpe'
Output:
["cpe:/a:apache:http_server:2.4.41", "cpe:/a:php:php:7.4.3"]
Example 6: Filter by Technology
Scenario: Find all sites running specific technology
cat urls.txt | httpx -silent -td -json | jq -r 'select(.tech | contains(["React"])) | .url'
cat urls.txt | httpx -silent -td -json | jq -r 'select(.tech | any(. | test("PHP"))) | .url'
Example 7: WhatWeb Specific Plugin
Scenario: Check only for specific technology
whatweb -p wordpress,joomla,drupal https://example.com
Output:
https://example.com [200 OK] WordPress[6.4.2]
Example 8: Comprehensive Recon Pipeline
Scenario: Full technology fingerprinting workflow
TARGET="example.com"
mkdir -p recon/$TARGET
subfinder -d $TARGET -silent -o recon/$TARGET/subs.txt
cat recon/$TARGET/subs.txt | httpx -silent -td -sc -title -server -json -o recon/$TARGET/httpx.json
cat recon/$TARGET/httpx.json | jq -r '.url' | whatweb -i /dev/stdin -a 3 --log-json=recon/$TARGET/whatweb.json
echo "Technologies found:"
cat recon/$TARGET/httpx.json | jq -r '.tech[]?' | sort | uniq -c | sort -rn
Error Handling
| Error | Cause | Resolution |
|---|
no tech detected | No fingerprint match | Try WhatWeb with higher aggression |
context deadline exceeded | Timeout | Increase timeout with -timeout |
could not connect | Host unreachable | Verify host is live with httpx first |
rate limit | Too many requests | Use -rl rate limit flag |
no plugins matched | WhatWeb no match | Try -a 3 or -a 4 aggression |
permission denied | Access blocked | Check if WAF is blocking |
SSL error | Certificate issue | Add -no-https or check cert |
Tool Reference
Httpx Technology Flags
| Flag | Description |
|---|
-td, -tech-detect | Detect technologies (wappalyzer dataset) |
-cpe | Display CPE identifiers |
-wp, -wordpress | Detect WordPress plugins/themes |
-server | Display web server header |
-sc, -status-code | Display status code |
-title | Display page title |
-favicon | Display favicon hash |
-jarm | Display JARM fingerprint |
-json | JSON output format |
-o, -output | Output file |
-silent | Clean output only |
-t, -threads | Number of threads (default 50) |
-rl, -rate-limit | Requests per second |
-timeout | Timeout in seconds (default 10) |
WhatWeb Flags
| Flag | Description |
|---|
-a, --aggression | Aggression level (1-4) |
-i, --input-file | Input file with URLs |
-v, --verbose | Verbose output |
--log-json=FILE | JSON output file |
--log-brief=FILE | Brief greppable output |
--log-xml=FILE | XML output file |
-p, --plugins | Select specific plugins |
-l, --list-plugins | List all plugins |
-I, --info-plugins | Detailed plugin info |
-t, --max-threads | Max threads (default 25) |
--wait=SECONDS | Wait between requests |
-U, --user-agent | Custom user agent |
--cookie | Set cookies |
--proxy | Use proxy |
WhatWeb Aggression Levels
| Level | Description | Requests | Use Case |
|---|
| 1 | Stealthy | 1 | Public websites, passive recon |
| 3 | Aggressive | Several | Version detection (if L1 match) |
| 4 | Heavy | Many | Full enumeration, thorough scan |
Output Interpretation
Httpx JSON Output
{
"timestamp": "2024-01-15T10:30:00Z",
"url": "https://example.com",
"status_code": 200,
"title": "Example Site",
"webserver": "nginx/1.18.0",
"tech": ["nginx", "PHP", "WordPress", "MySQL"],
"cpe": ["cpe:/a:nginx:nginx:1.18.0"]
}
| Field | Description |
|---|
url | Target URL |
status_code | HTTP response code |
title | HTML page title |
webserver | Server header value |
tech | Detected technologies array |
cpe | CPE identifiers for CVE lookup |
WhatWeb JSON Output
{
"target": "https://example.com",
"http_status": 200,
"plugins": {
"Apache": { "version": ["2.4.41"] },
"PHP": { "version": ["7.4.3"] },
"WordPress": { "version": ["6.4.2"] },
"JQuery": { "version": ["3.5.1"] }
}
}
| Field | Description |
|---|
target | Scanned URL |
http_status | HTTP status code |
plugins | Matched plugins with versions |
version | Detected version numbers |
Common Technologies by Category
| Category | Technologies |
|---|
| Web Servers | nginx, Apache, IIS, LiteSpeed, Caddy |
| Languages | PHP, Python, Ruby, Node.js, Java, .NET |
| CMS | WordPress, Drupal, Joomla, Magento |
| Frameworks | Laravel, Django, Rails, Express, Spring |
| JavaScript | React, Angular, Vue, jQuery, Next.js |
| CDN/WAF | Cloudflare, Akamai, AWS CloudFront |
Advanced Techniques
Custom Fingerprint File
httpx -u https://example.com -td -cff custom_fingerprints.json
Favicon Hash Matching
echo "https://example.com" | httpx -silent -favicon
httpx -l urls.txt -favicon -mfc 1494302000
JARM Fingerprinting
echo "https://example.com" | httpx -silent -jarm
Certificate Analysis
echo "https://example.com" | httpx -silent -tls-grab -json | jq '.tls'
Grep-Based Filtering
whatweb -g "admin" https://example.com
whatweb -a 3 https://example.com | grep -oE "[a-zA-Z]+/[0-9.]+"
Best Practices
Recommended Workflow
- Start with httpx - Fast tech detection across many targets
- Filter interesting targets - WordPress, outdated software
- Deep scan with WhatWeb - Version detection on filtered targets
- Extract CPEs - Map to CVE database
- Document findings - JSON output for processing
Performance Tips
- Use httpx
-silent for clean pipeline output
- Set rate limits with
-rl for large scans
- Use WhatWeb
-a 1 for initial pass, -a 3 for follow-up
- Use
-json output for programmatic processing
- Run httpx first (faster), then WhatWeb on filtered targets
- Use
--no-cookies in WhatWeb for faster high-volume scans
Accuracy Tips
- WhatWeb
-a 3 provides better version detection
- Combine multiple tools for comprehensive coverage
- Check both HTTP and HTTPS versions
- Some technologies only detectable via specific paths
- Favicon hashes can identify technologies missed by other methods
Integration Examples
Pipe to Nuclei
cat urls.txt | httpx -silent -td -json | \
jq -r 'select(.tech | contains(["WordPress"])) | .url' | \
nuclei -t cves/wordpress/
Pipe to Searchsploit
whatweb -a 3 https://example.com --log-brief=- | \
grep -oE "[A-Za-z]+/[0-9.]+" | \
while read tech; do searchsploit "$tech"; done
Export for Reporting
cat httpx_tech.json | jq -r '[.url, (.tech | join(";"))] | @csv' > tech_report.csv
References