AI-Assisted Manual Web Penetration Testing
π― Manual Testing First | WAF Bypass | Context-Aware | Bug Bounty Ready
βββββββββββββββ ββββββββ βββββββββββββββββββββββ ββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββ βββ βββ ββββββββββββββ
βββββββββββββββ ββββββ βββ βββ ββββββββββββββ
βββββββββββ ββββββββββββββββ βββ βββ βββββββββββ
βββββββββββ ββββββββ βββββββ βββ βββ βββββββββββ
βββ ββββββββββββββββββ
βββ βββββββββββββββββββ
βββ ββ βββββββββ ββββββββ
ββββββββββββββββ ββββββββ
ββββββββββββββββββββββββββ
ββββββββ βββββββββββββββ
SpectreWeb is an MCP server that exposes a curated set of penetration-testing tools to AI agents (Windsurf, Claude Desktop, or any MCP-compatible client). It is designed for operator-driven manual testing β the AI helps you recon, fuzz, generate payloads, and analyze responses, while you stay in control of the testing strategy.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Blind auto-scan β Blocked by WAF β Fail β
β β
AI analyzes β Operator decides β Smart targeted tests β Success β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Feature | Traditional Scanners | SpectreWeb AI |
|---|---|---|
| Approach | Blind auto-scanning | AI-guided, operator-driven |
| WAF Bypass | Hope it works | Generate bypass variants on demand |
| Payloads | Static wordlists | Context-aware, mutated payloads |
| Rate Limits | Get blocked | Per-domain throttling built in |
| Session | Stateless | Persists findings & context per target |
ββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ
β AI Agent βββMCPβββΆβ mcp_client.py βββHTTPββΆβ server.py β
β (Windsurf...)β β (47 MCP tools) β β (Flask API) β
ββββββββββββββββ ββββββββββββββββββββ ββββββββββ¬ββββββββββ
β
βββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββ
βΌ βΌ βΌ βΌ
core/plugin.py core/analyzer.py web/secrets.py web/exploits.py
(tool wrappers) (tech fingerprint)(secret scanning) (payload gen)
mcp_client.pyβ MCP server exposing 47 tools, forwards to the HTTP API.server.pyβ Flask app hosting the REST API.api/routes.pyβ All HTTP endpoints.core/β Command execution, tech analysis, reporting, context, plugins.web/β HTTP client, payload generation, secret scanning, exploit helpers, origin IP finder.
git clone https://github.com/tuannguyen14/SpectreWeb-AI
cd SpectreWeb-AI
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt# ProjectDiscovery tools
go install github.com/projectdiscovery/httpx/cmd/httpx@latest
go install github.com/projectdiscovery/subfinder/cmd/subfinder@latest
go install github.com/projectdiscovery/katana/cmd/katana@latest
go install github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
# Other tools
go install github.com/tomnomnom/waybackurls@latest
go install github.com/lc/gau/v2/cmd/gau@latest
go install github.com/hahwul/dalfox/v2@latest
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrcTools that are not installed simply report "not installed"; the rest keep working.
Copy the example env file and fill in your API keys:
cp .env.example .env # Windows: copy .env.example .env
# Edit .env with your favorite editor
.envis auto-loaded bypython-dotenv(included in requirements.txt). You can also set env vars manually β see Environment Variables below.
python server.py
# π» SpectreWeb AI v7.0.0 - Starting...
# β
Server running at http://127.0.0.1:8888{
"mcpServers": {
"spectreweb-ai": {
"command": "python",
"args": ["/path/to/SpectreWeb-AI/mcp_client.py", "--server", "http://127.0.0.1:8888"],
"timeout": 1500,
"alwaysAllow": []
}
}
}API authentication is disabled by default (local-use friendly). To enable it, set an API key before starting the server:
export SPECTREWEB_API_KEY="your-secret-key" # Windows: set SPECTREWEB_API_KEY=...
python server.pyWhen enabled, send the key via the X-API-Key header or Authorization: Bearer <key>.
All configuration is done via environment variables. No hardcoded keys.
π‘ Tip: Copy
.env.exampleto.envand fill in your keys. The server auto-loads.envviapython-dotenv.
| Variable | Default | Description |
|---|---|---|
SPECTREWEB_API_KEY |
(none) | API authentication key. If unset, auth is disabled |
SPECTREWEB_ALLOW_COMMAND |
false |
Allow raw shell command execution via /api/command (DANGEROUS β only enable in trusted/local environments) |
SPECTREWEB_SECLISTS_PATH |
auto-detect | Path to SecLists directory (see SecLists Configuration below) |
SPECTREWEB_TLS_VERIFY |
false |
Verify TLS certificates for outbound requests. Default off (pentest targets often use self-signed certs) |
SPECTREWEB_MAX_FILE_SIZE |
10485760 (10MB) |
Max file size for FileManager operations (bytes) |
SPECTREWEB_MAX_OUTPUT_SIZE |
52428800 (50MB) |
Max output size for command executor (bytes) |
SPECTREWEB_API_RATE_LIMIT |
true |
Enable per-client-IP API rate limiting |
SPECTREWEB_API_RATE_LIMIT_RPM |
60 |
API rate limit: requests per minute per client IP |
SPECTREWEB_API_RATE_LIMIT_BURST |
20 |
API rate limit: burst size (max concurrent requests) |
SPECTREWEB_ALLOWED_SCAN_DIRS |
temp dirs | Allowed directories for local secret scanning (;-separated on Windows, : on Linux) |
All Origin IP Finder techniques work without any API key. The following env vars enable optional enhanced data sources:
| Variable | Free tier | Description |
|---|---|---|
SPECTREWEB_SECURITYTRAILS_API_KEY |
~50 queries/month | Historical DNS A records (find IPs before CDN was enabled) |
SPECTREWEB_SHODAN_API_KEY |
OSS plan (limited) | Shodan search API (cert pivot, favicon hash). InternetDB is free without key |
SPECTREWEB_CENSYS_API_ID |
~250 queries/month | Censys cert search + favicon pivot |
SPECTREWEB_CENSYS_API_SECRET |
(paired with API_ID) | Censys API secret |
SPECTREWEB_FOFA_EMAIL |
\u26a0\ufe0f Paid only | FOFA account email. Free tier has 1000 points but API search needs F-points (paid) |
SPECTREWEB_FOFA_API_KEY |
\u26a0\ufe0f Paid only | FOFA API key. Favicon hash + cert search, strong for Asian targets. Needs F-points |
SPECTREWEB_QUAKE_API_KEY |
\u2705 Free (3000 credits) | Quake 360 API key. Cert/favicon/body search, best Asian coverage. Free tier works! |
SPECTREWEB_VALIDIN_TOKEN |
Free account | Validin API token. Passive DNS host pivot (optional, needs free account) |
Setup (Linux):
export SPECTREWEB_SECURITYTRAILS_API_KEY="your-key"
export SPECTREWEB_SHODAN_API_KEY="your-key"
export SPECTREWEB_CENSYS_API_ID="your-id"
export SPECTREWEB_CENSYS_API_SECRET="your-secret"
export SPECTREWEB_QUAKE_API_KEY="your-quake-key" # free tier works!
# export SPECTREWEB_FOFA_EMAIL="your-email" # paid only (F-points)
# export SPECTREWEB_FOFA_API_KEY="your-fofa-key" # paid only (F-points)
python server.pySetup (Windows PowerShell):
$env:SPECTREWEB_SECURITYTRAILS_API_KEY = "your-key"
$env:SPECTREWEB_SHODAN_API_KEY = "your-key"
$env:SPECTREWEB_QUAKE_API_KEY = "your-quake-key" # free tier works!
# $env:SPECTREWEB_FOFA_EMAIL = "your-email" # paid only (F-points)
# $env:SPECTREWEB_FOFA_API_KEY = "your-fofa-key" # paid only (F-points)
python server.py
β οΈ Never commit API keys to git. Use a.envfile (add to.gitignore) or inject via CI/CD secrets.
SpectreWeb uses SecLists as its wordlist provider. The server auto-detects SecLists from common paths:
| OS | Auto-detect paths |
|---|---|
| Linux | /usr/share/SecLists, /usr/share/seclists, /opt/SecLists, /opt/seclists |
| Windows | D:\SecLists, C:\SecLists, %PROGRAMFILES%\SecLists |
# Linux
git clone https://github.com/danielmiessler/SecLists /usr/share/SecLists
# Windows
git clone https://github.com/danielmiessler/SecLists D:\SecListsIf SecLists is installed elsewhere, set the environment variable before starting the server:
# Linux
export SPECTREWEB_SECLISTS_PATH="/your/custom/SecLists"
# Windows (PowerShell)
$env:SPECTREWEB_SECLISTS_PATH = "E:\Tools\SecLists"SpectreWeb ships with 42 pre-configured wordlists across 8 categories:
| Category | Wordlists | Examples |
|---|---|---|
| Directory | common, big, dir_small, dir_medium, dir_big, raft_medium_dirs, combined_dirs |
Standard β exhaustive directory enumeration |
| API | api_endpoints, api_objects, api_wild, graphql |
REST/GraphQL endpoint discovery |
| Subdomain | subdomains_5k, subdomains_20k, subdomains_110k |
Quick β exhaustive subdomain enum |
| Vuln payloads | sqli, sqli_blind, sqli_quick, sqli_polyglots, nosql, xss, xss_polyglot, lfi, lfi_linux, ssti, xxe, cmd_injection |
Injection & fuzzing payloads |
| Auth | passwords, usernames, default_creds, tomcat_creds, mysql_creds, postgres_creds |
Brute force & default credentials |
| Bypass | sqli_auth_bypass, sqli_mysql_bypass, login_bypass |
Auth/WAF bypass payloads |
| CMS | wordpress, joomla, drupal |
CMS-specific paths |
| Sensitive | backup_files, quickhits, login_pages |
Sensitive file & login page discovery |
# Pass wordlist name to ffuf_scan
ffuf_scan(url="https://target.com", wordlist="common")
# Or use a custom path
ffuf_scan(url="https://target.com", wordlist="/path/to/custom.txt")
# Get wordlist info
get_wordlist(name="api_wild")
# Get suggestions based on task
suggest_wordlist(task="nosql injection testing")| Tool | Description |
|---|---|
execute_command |
Run any shell command on the server |
health_check |
Server health, DB & disk status |
web_request |
Browser-like HTTP request |
| Tool | Description |
|---|---|
nmap_scan |
Port scanning & service detection |
naabu_scan |
Fast port scanner |
subfinder_scan |
Subdomain discovery (capped at 500) |
httpx_probe |
HTTP probing with tech detect |
whatweb_scan |
Technology fingerprinting |
ffuf_scan |
Directory/file fuzzing |
katana_crawl |
Web crawler (capped at 500 URLs) |
historical_urls |
Wayback / GAU historical URLs |
| Tool | Description |
|---|---|
scan_exposed_files |
Scan 100+ sensitive paths (.git, .env, backups, configs, actuator) |
scan_cms |
Detect WordPress/Joomla/Drupal/Magento + plugins/themes/admin paths |
discover_vhosts |
Brute-force Host header to find hidden virtual hosts |
| Tool | Description |
|---|---|
vuln_test |
Unified XSS/SQLi/LFI/SSRF/redirect/CRLF test |
sqlmap_scan |
SQL injection testing |
dalfox_scan |
Advanced XSS scanner |
| Tool | Description |
|---|---|
get_payloads |
Payloads for XSS/SQLi/LFI/SSRF/SSTI/XXE/NoSQL/polyglot |
generate_bypass |
WAF / auth / cache-poison / 403 bypass payloads |
mutate_payload |
Mutate a payload with bypass techniques |
encode_decode |
URL / Base64 / HTML / Hex / Unicode |
| Tool | Description |
|---|---|
scan_secrets |
Scan text/URL/JS for hardcoded secrets |
secrets_hunt |
Multi-stage deep secret hunt on a domain |
secrets_js_hunt |
Scan multiple JS files for secrets |
| Tool | Description |
|---|---|
analyze_js |
Endpoints, secrets, DOM-XSS from JS |
extract_from_webpage |
Extract links/forms/comments/JS |
| Tool | Description |
|---|---|
generate_access_tests |
IDOR / privesc / auth-bypass test cases |
get_business_logic_tests |
Business-logic vulnerability test cases |
discover_params |
Hidden parameter discovery (Arjun) |
| Tool | Description |
|---|---|
jwt_tools |
JWT analyze / none / confusion / inject |
test_concurrency |
Race condition & rate-limit testing |
test_graphql |
GraphQL introspection & batching |
check_takeover |
Subdomain takeover detection |
| Tool | Description |
|---|---|
test_cors |
CORS misconfiguration testing |
compare_responses |
Diff two responses (access control) |
| Tool | Description |
|---|---|
report |
Persistent report: get / add_finding / add_note / summary / next_steps |
load_context |
π¨ Load previous findings (call first!) |
| Tool | Description |
|---|---|
get_wordlist |
Fetch wordlist by name |
suggest_wordlist |
Suggest wordlists for a task |
| Tool | Free? | Description |
|---|---|---|
find_origin_ip |
β | Full orchestrator: crt.sh + subdomain leak/brute + DNS + passive DNS + Quake + Shodan + verify |
verify_origin_ip |
β | Verify an IP serves a domain via Host header + SSL cert match |
cert_transparency |
β | Query crt.sh Certificate Transparency logs for subdomains & cert domains |
shodan_lookup |
β | Query Shodan InternetDB for an IP (free, no key β ports, hostnames, tags, vulns) |
fofa_search |
Search FOFA by query (cert, favicon hash, body). Free tier has no API search credits | |
quake_search |
β Free | Search Quake 360 by query (cert, favicon, body). Free tier works! Best Asian data |
passive_dns_lookup |
β | Query OTX + HackerTarget + Validin for historical IPs (free, no key) |
subdomain_brute |
β | Brute-force subdomains using SecLists wordlist (5K/20K/110K, multi-threaded) |
You: "Test target.com for vulnerabilities"
SpectreWeb AI:
1. load_context("target.com") β Recall any prior findings
2. httpx_probe / whatweb_scan β Cloudflare WAF detected
3. generate_bypass("waf", payload) β Build evasion variants
4. vuln_test("xss", url) β Probe with context-aware payloads
5. report("add_finding", ...) β Persist the result
SpectreWeb-AI/
βββ server.py # Flask server
βββ mcp_client.py # MCP client (47 tools)
βββ config/
β βββ settings.py # Configuration
β βββ wordlists.py # SecLists (auto-resolve)
βββ core/
β βββ executor.py # Command execution
β βββ plugin.py # Tool plugins (nmap, ffuf, httpx, ...)
β βββ analyzer.py # Tech fingerprint & heuristic analysis
β βββ reporter.py # Persistent reporting
β βββ context.py # Per-target session persistence
β βββ learning_store.py # SQLite findings store
β βββ middleware.py # Auth, rate limiting, error handling
β βββ job_queue.py # Background job queue
β βββ file_manager.py # Sandboxed file ops
βββ web/
β βββ client.py # HTTP client with retry & rate limiting
β βββ manual_testing.py # Manual testing helpers
β βββ deep_secrets.py # Multi-stage secret hunting
β βββ origin_finder.py # Origin IP discovery (bypass CDN/WAF)
β βββ advanced_scanner.py# Vuln scanners
β βββ exploits.py # Exploitation / payload helpers
β βββ secrets.py # Secret pattern scanning
β βββ payloads.py # Payload generation
βββ api/
βββ routes.py # HTTP API endpoints
- Obtain written permission before any assessment.
- Respect scope, rate limits, and rules of engagement.
- Follow responsible disclosure practices.
MIT License β Use responsibly.