#BETA VERSION, TEST AND COMMIT.
159+ security tools. Scope enforcement. HTML/PDF/SARIF reports. Active Directory module. NTLM relay. Visual recon. Metasploit RPC. Global Burp proxy. Automated CVE/exploit lookup per service. Real-time webhook alerts. Connects to Claude Code, VSCode, Cursor and any MCP-compatible AI.
🚀 Quick Start • 🔌 Connecting to AI Clients • 🛠️ Tools Reference • 📋 Workflow Examples • 🔒 Security Configuration
📖 Spanish / Español: README.es.md
HexStrike AI is a Model Context Protocol (MCP) server that gives any AI assistant direct access to 159+ penetration testing tools. Instead of manually running tools from a terminal, you describe what you want to do and the AI orchestrates the entire process — including scope enforcement, finding persistence, report generation, and real-time notifications.
You: "Scan 192.168.1.0/24, find web services, route everything through Burp,
screenshot them, check for AD misconfigs, spray passwords safely,
and generate a PDF + SARIF report."
HexStrike: ✓ set_global_proxy("http://127.0.0.1:8080") → Burp intercepts all traffic
✓ fast_scan_pipeline → 12 hosts, 47 open ports
✓ gowitness (nmap mode) → 23 screenshots saved
✓ get_password_policy → lockout threshold: 5, safe spray: 3 attempts
✓ password_spray → 2 valid credentials found [CRITICAL finding added]
✓ ad_domain_enum → 3 domain users, 2 SPNs found
✓ PDF report generated → /tmp/engagement_report.pdf
✓ SARIF exported → /tmp/findings.sarif (upload to GitHub)
✓ Slack notification → critical finding alert sent
┌─────────────────────────────────────────┐
│ AI Client (Claude / Cursor / VSCode) │
└──────────────────┬──────────────────────┘
│ MCP Protocol (stdio)
┌──────────────────▼──────────────────────┐
│ hexstrike_mcp.py │ ← MCP Server (FastMCP)
│ MCP tool definitions │
└──────────────────┬──────────────────────┘
│ HTTP REST API
┌──────────────────▼──────────────────────┐
│ hexstrike_server.py │ ← Flask Backend
│ Port 8888 · localhost │
│ ScopeManager · ProxyConfig │
│ WebhookNotifier · MetasploitRPC │
│ ReportEngine · SQLite DB · Cache │
└──────────────────┬──────────────────────┘
│ subprocess
┌──────────────────▼──────────────────────┐
│ 159+ External Tools │
│ nmap · nuclei · dalfox · bloodhound │
│ impacket · certipy · frida · katana │
│ gowitness · git-dumper · mitm6 … │
└─────────────────────────────────────────┘
| Feature | Description |
|---|---|
| 🔍 RustScan → Nmap pipeline | Two-phase port scan: RustScan discovers ports in seconds, Nmap does service detection only on found ports |
| 📸 gowitness | Mass web screenshots — single URL, file list, or directly from Nmap XML |
| 🗂️ git-dumper | Extracts source code from exposed .git directories, auto-runs TruffleHog on the dump |
| 🔑 Password policy extraction | Cascade of nxc → enum4linux-ng → rpcclient; calculates safe spray attempts and lockout warning |
| 🔫 Password spray workflow | Lockout-safe multi-round spray: auto-fetches policy, calculates safe attempts, timed observation windows |
| ⚡ NTLM relay workflow | impacket-ntlmrelayx + mitm6 staged workflow (setup → relay → poison → check loot) |
| 🧠 Auto-findings (7 parsers) | Auto-import findings from: nuclei, nmap, nikto, gobuster, sqlmap, hydra, medusa |
| 🌐 ffuf full rewrite | All fuzzing modes: directory, vhost, parameter, POST body, header — with filter support |
| 🔄 Nuclei auto-update | Templates auto-updated on startup (max once/24h); /api/tools/nuclei-update endpoint |
| 💾 SQLite finding persistence | Findings survive server restarts; full engagement management |
| 📄 HTML/PDF reports | Jinja2 templates + weasyprint; per-engagement with severity breakdown |
| 📊 SARIF v2.1.0 export | GitHub Code Scanning, Azure DevOps, VS Code SARIF Viewer, SonarQube — one command |
| 🛡️ Scope enforcement | Every tool validates targets against IP/CIDR/domain/wildcard rules before execution |
| 🔒 API key auth + rate limiting | HEXSTRIKE_API_KEY env var; @require_api_key on all 242 endpoints including command execution, file ops, process control, intelligence engine and workflow endpoints |
| 🔔 Webhook notifications | Real-time Slack / Discord / generic HTTP alerts on new findings; configurable min severity |
| 🔧 Tool status inventory | 80+ tool registry with install commands; readiness check per engagement type (web/internal/AD/mobile/cloud) |
| 🎯 Metasploit RPC | Full MSF RPC: sessions, module execution, search, loot, credentials — via pymetasploit3 |
| 🔀 Global proxy | One command routes all HTTP tool traffic through Burp Suite, OWASP ZAP, or SOCKS5 |
| 🏢 Active Directory module | bloodhound-python, kerbrute, certipy, ldapdomaindump, coercer, lsassy + 4 workflow endpoints |
| 🌍 Web App tools | dalfox, jwt_tool, ghauri, commix, corsy, crlfuzz, nomore403, smuggler, graphql-cop, subzy, gau |
| 🔗 Network discovery | naabu, dnsx, tlsx, uncover, asnmap, shuffledns, interactsh-client |
| 🔑 Secrets & SAST | trufflehog, gitleaks, semgrep |
| 📱 Mobile security | frida, objection, apktool, apkleaks, jadx |
| ☁️ Cloud | cloudbrute, s3scanner, enumerate-iam |
| 🔀 Pivoting | ligolo-ng, chisel |
| 🔬 Auto CVE lookup | auto_analyze_services_cve — takes nmap output, queries NVD + searchsploit per service+version automatically |
- OS: Kali Linux 2024+ (recommended) · Ubuntu 22.04+ · Debian
- Python: 3.8 or higher
- RAM: 4 GB minimum (8 GB recommended for headless crawling + gowitness)
git clone https://github.com/0x4m4/hexstrike-ai
cd hexstrike-ai
# Create virtual environment
python3 -m venv hexstrike_env
source hexstrike_env/bin/activate
# Install Python dependencies
pip install -r requirements.txtpython3 hexstrike_server.pyExpected output:
INFO - 🚀 Starting HexStrike AI Tools API Server
INFO - 🌐 Port: 8888
INFO - ✨ Enhanced Visual Engine: Active
INFO - 🔄 [startup] Updating nuclei templates in background...
Verify it's running:
curl http://127.0.0.1:8888/health | python3 -m json.toolKeep the server running and proceed to Connecting to AI Clients.
Claude Code is the official Anthropic CLI — best supported integration.
Step 1 — Add to ~/.claude/settings.json:
{
"mcpServers": {
"hexstrike-ai": {
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
],
"timeout": 300
}
}
}Replace
/ABSOLUTE/PATH/TO/with the real path. Example:/home/kali/hexstrike-ai/hexstrike_mcp.py
Step 2 — Verify:
claude # start Claude Code
/mcp # should list hexstrike-ai with 159+ toolsStep 3 — Test:
Check the health of the HexStrike server
Cursor supports MCP natively since version 0.43.
Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"hexstrike-ai": {
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
],
"timeout": 300
}
}
}Restart Cursor → open Agent mode (Cmd/Ctrl + I) → test:
Use hexstrike to scan 127.0.0.1 with nmap
Continue is a free open-source AI assistant for VSCode with MCP support.
Install: VSCode → Extensions → search Continue → Install.
Edit ~/.continue/config.json:
{
"models": [...],
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
]
}
}
]
}
}Reload VSCode → open Continue sidebar (Cmd/Ctrl + L).
Requires VSCode 1.99+ with GitHub Copilot.
Edit User Settings JSON (Ctrl+Shift+P → Open User Settings (JSON)):
{
"github.copilot.chat.mcp.enabled": true,
"mcp": {
"servers": {
"hexstrike-ai": {
"type": "stdio",
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
]
}
}
}
}Switch Copilot Chat to Agent mode → test: @hexstrike-ai check server health
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"hexstrike-ai": {
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
],
"timeout": 300
}
}
}Restart Windsurf → use Cascade (agent mode).
OpenCode is a terminal-based AI client. Add the MCP server to its config file (usually ~/.config/opencode/config.json or /home/USERNAME/.config/opencode.json):
{
"mcpServers": {
"hexstrike-ai": {
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
],
"timeout": 600
}
}
}or
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"hexstrike": {
"type": "local",
"command": [
"python3",
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"127.0.0.1:8888"
]
}
}
}Note: The timeout is set to 600 seconds because some scans (port scanning, fuzzing, exploitation) can take several minutes. Make sure
hexstrike_server.pyis running before starting OpenCode.
Restart OpenCode — the hexstrike-ai tools will appear automatically.
Zed is a fast, native code editor with built-in MCP support.
Open the Assistant Panel (Ctrl+?), click the MCP icon, select Add MCP Server → Local, and paste:
{
"hexstrike_ai": {
"command": "python3",
"args": [
"/ABSOLUTE/PATH/TO/hexstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
]
}
}Press Ctrl+Enter to confirm. Zed will connect to the MCP server automatically on next launch.
Note: Make sure
hexstrike_server.pyis running on port 8888 before starting Zed.
If HexStrike runs on a remote Kali machine (VM, VPS, lab):
# On the Kali server
HEXSTRIKE_HOST=0.0.0.0 python3 hexstrike_server.py
# Recommended: SSH tunnel (never expose port 8888 directly)
ssh -L 8888:127.0.0.1:8888 user@kali-serverIn your MCP config use http://127.0.0.1:8888 (the tunnel endpoint).
Security: Never expose port 8888 to the Internet without API key auth enabled.
export HEXSTRIKE_API_KEY="your-strong-random-key-here"
python3 hexstrike_server.pyAll requests must include:
X-API-Key: your-strong-random-key-here
For MCP clients, add it to the env block:
{
"mcpServers": {
"hexstrike-ai": {
"command": "python3",
"args": ["/path/hexstrike_mcp.py", "--server", "http://127.0.0.1:8888"],
"env": {
"HEXSTRIKE_API_KEY": "your-strong-random-key-here"
}
}
}
}All 242 endpoints require the API key when
HEXSTRIKE_API_KEYis set — including/api/command, file operations, process control, intelligence engine, and workflow endpoints.
The most important safety feature. When a scope is active, every tool validates its target before running. Out-of-scope requests return HTTP 403.
# In your AI chat:
Set the scope to 192.168.1.0/24 and *.lab.internal
Via API:
curl -X POST http://127.0.0.1:8888/api/scope/set \
-H "Content-Type: application/json" \
-d '{"targets": ["192.168.1.0/24", "*.lab.internal", "10.10.10.0/24"]}'Supported formats:
| Format | Example |
|---|---|
| Single IP | 192.168.1.10 |
| CIDR range | 192.168.1.0/24 |
| Domain | target.com |
| Wildcard domain | *.target.com |
One command routes all HTTP-capable tools through your intercepting proxy:
# In your AI chat:
Set the global proxy to http://127.0.0.1:8080
Via API:
# Set proxy (automatically enables it)
curl -X POST http://127.0.0.1:8888/api/config/proxy \
-H "Content-Type: application/json" \
-d '{"proxy_url": "http://127.0.0.1:8080"}'
# Disable temporarily (keeps URL stored)
curl -X POST http://127.0.0.1:8888/api/config/proxy/disable
# Re-enable
curl -X POST http://127.0.0.1:8888/api/config/proxy/enable
# Remove completely
curl -X POST http://127.0.0.1:8888/api/config/proxy/clearSupported schemes: http://, https://, socks5://
Tools that automatically receive the proxy flag when set:
httpx, nuclei, nikto, ffuf, sqlmap, dalfox, gobuster, feroxbuster, katana, ghauri, commix, whatweb, wafw00f, wfuzz, curl, wpscan, smuggler, crlfuzz, corsy and more.
Get real-time alerts when findings are added:
# Slack
curl -X POST http://127.0.0.1:8888/api/webhooks/add \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.slack.com/services/T.../B.../...",
"platform": "slack", "min_severity": "high", "name": "SlackAlerts"}'
# Discord
curl -X POST http://127.0.0.1:8888/api/webhooks/add \
-H "Content-Type: application/json" \
-d '{"url": "https://discord.com/api/webhooks/...",
"platform": "discord", "min_severity": "critical"}'Severity thresholds: info · low · medium · high · critical
| Category | Tools | New in v7.0 |
|---|---|---|
| Network Recon | nmap, masscan, rustscan, naabu, dnsx, tlsx, asnmap, shuffledns, uncover, interactsh | naabu, dnsx, tlsx, asnmap, shuffledns, uncover, interactsh |
| Pipelines | fast_scan_pipeline (RustScan→Nmap), password_policy, password_spray, ntlm_relay | All new |
| Web Application | gobuster, ffuf (all modes), nuclei, nikto, sqlmap, dalfox, katana, gau, jwt_tool, ghauri, commix, corsy, crlfuzz, nomore403, smuggler, graphql-cop, subzy | jwt_tool, ghauri, commix, corsy, crlfuzz, nomore403, smuggler, graphql-cop, subzy |
| Visual Recon | gowitness | New |
| Source Exposure | git-dumper | New |
| Active Directory | bloodhound-python, kerbrute, certipy, ldapdomaindump, coercer, lsassy, impacket suite, ntlmrelayx, mitm6 | All new |
| Post-Exploitation | ligolo-ng, chisel, metasploit (RPC) | ligolo-ng, chisel, Metasploit RPC new |
| Cloud Security | prowler, trivy, checkov, cloudbrute, s3scanner, enumerate-iam | cloudbrute, s3scanner, enumerate-iam |
| Mobile Security | frida, objection, apktool, apkleaks, jadx | All new |
| Secrets & SAST | trufflehog, gitleaks, semgrep | All new |
| Binary Analysis | ghidra, radare2, gdb, binwalk, pwntools, angr | — |
| Password Attacks | hydra, hashcat, john, medusa | — |
| OSINT | amass, subfinder, theharvester, sherlock | — |
| Reporting | HTML, PDF, JSON, SARIF v2.1.0, auto-import (7 parsers) | SARIF, auto-import parsers, engagement management |
# ── Recon ──────────────────────────────────────────────────────────────────
fast_scan_pipeline(target) # RustScan → Nmap, fastest full scan
nmap_scan(target, scan_type="-sV -sC", ports="")
subfinder_scan(domain)
dnsx_dns_toolkit(domain, wordlist="/path/wordlist")
katana_crawl(url, depth=3, js_crawl=True, headless=False)
gau_url_discovery(domain)
# ── Visual recon ───────────────────────────────────────────────────────────
gowitness_screenshot(mode="nmap", nmap_xml="/tmp/scan.xml") # mass screenshots
gowitness_screenshot(mode="file", url_file="/tmp/urls.txt")
gowitness_screenshot(mode="single", url="https://target.com")
# ── Source exposure ────────────────────────────────────────────────────────
git_dumper(url="https://target.com/.git", output_dir="/tmp/dump")
# ── Global proxy (Burp / ZAP / SOCKS5) ────────────────────────────────────
set_global_proxy("http://127.0.0.1:8080") # all HTTP tools → Burp
disable_global_proxy() # bypass proxy for next tool
enable_global_proxy() # re-enable
clear_global_proxy() # remove completely
get_global_proxy() # check current status
# ── Web fuzzing ────────────────────────────────────────────────────────────
ffuf_scan(url, mode="directory") # path fuzzing
ffuf_scan(url, mode="vhost", domain="target.com", # virtual host discovery
filter_size="<baseline>")
ffuf_scan(url, mode="parameter") # GET param fuzzing
ffuf_scan(url, mode="post-data", post_data="user=FUZZ&pass=test")
# ── Vulnerability scanning ─────────────────────────────────────────────────
nuclei_scan(target, severity="critical,high")
nuclei_update_templates() # update templates (auto on startup)
dalfox_xss_scan(target)
ghauri_sqli_scan(url)
jwt_tool_analyze(token, mode="decode")
corsy_cors_scan(url)
smuggler_scan(url)
graphql_cop_scan(url)
commix_injection_scan(url)
crlfuzz_scan(url)
nomore403_bypass(url)
subzy_takeover_scan(targets)
# ── Active Directory ───────────────────────────────────────────────────────
get_password_policy(target) # ALWAYS run before spraying
password_spray(target, passwords=["Winter2024!"], userlist=["admin","user"])
ad_domain_enum_workflow(domain, dc_ip, username, password)
ad_kerberoasting_workflow(domain, dc_ip, username, password)
ad_asreproasting_workflow(domain, dc_ip)
ad_certificate_abuse_workflow(domain, dc_ip, username, password)
bloodhound_python_collect(domain, username, password, dc_ip)
kerbrute_scan(dc_ip, domain, wordlist, mode="userenum")
impacket_secretsdump(target, username, password, domain)
# ── NTLM Relay ─────────────────────────────────────────────────────────────
ntlm_relay_attack(stage="setup") # prerequisites checklist
ntlm_relay_attack(stage="relay", targets_file="/tmp/targets.txt", relay_mode="smb")
ntlm_relay_attack(stage="poison", domain="corp.local", interface="eth0")
ntlm_relay_attack(stage="check") # parse loot, extract hashes
# ── Metasploit RPC ─────────────────────────────────────────────────────────
msf_connect(password="msf", host="127.0.0.1", port=55553)
msf_sessions() # list active sessions
msf_run_module("exploit", "multi/handler", options={"LHOST": "10.0.0.1"})
msf_session_exec(session_id="1", command="whoami")
msf_search("type:exploit platform:windows smb")
msf_loot() # retrieved credentials / data
msf_credentials()
# ── Tool status ────────────────────────────────────────────────────────────
check_tool_status() # full 80+ tool registry
check_tool_status(engagement_type="web") # web pentest readiness
check_tool_status(engagement_type="ad") # AD pentest readiness
check_tool_status(engagement_type="mobile") # mobile pentest readiness
check_tool_status(engagement_type="cloud") # cloud pentest readiness
# ── Secrets & SAST ─────────────────────────────────────────────────────────
trufflehog_secrets_scan(target, source="git")
gitleaks_scan(path=".")
semgrep_sast_scan(path=".", config="p/owasp-top-ten")
# ── Mobile ────────────────────────────────────────────────────────────────
frida_instrument(mode="ps")
objection_explore(package="com.example.app", command="android sslpinning disable")
apktool_analyze(apk_path="/tmp/app.apk", mode="decode")
jadx_decompile(apk_path="/tmp/app.apk")
apkleaks_scan(apk_path="/tmp/app.apk")
# ── Cloud ─────────────────────────────────────────────────────────────────
cloudbrute_scan(company="target", provider="aws")
s3scanner_scan(bucket="company-backups")
enumerate_iam_permissions(access_key="AKIA...", secret_key="...")
naabu_port_scan(host="10.0.0.0/24", ports="top-1000")
uncover_search(query="apache port:8080 country:US", engine="shodan")
# ── Pivoting ─────────────────────────────────────────────────────────────
ligolo_ng_tunnel(mode="proxy", listen_addr="0.0.0.0:11601")
chisel_tunnel(mode="server", host="0.0.0.0", port="8080")
# ── CVE Intelligence (automated) ───────────────────────────────────────────
auto_analyze_services_cve(nmap_output="21/tcp open ftp vsftpd 2.3.4\n22/tcp open ssh OpenSSH 7.4")
# Takes nmap -sV output → queries NVD + searchsploit per service → returns CVEs with CVSS + exploits
# ── Webhooks ───────────────────────────────────────────────────────────────
add_webhook(url, platform="slack", min_severity="high")
list_webhooks()
test_webhook(webhook_id)
remove_webhook(webhook_id)
# ── Reporting ──────────────────────────────────────────────────────────────
set_engagement("ClientX-Internal-2025-04")
add_finding_to_report(title, severity, target, tool, description, evidence)
auto_import_findings("nuclei", nuclei_json_output)
generate_html_report("/tmp/report.html", "Engagement Name")
generate_pdf_report("/tmp/report.pdf")
export_sarif_report("/tmp/findings.sarif") # GitHub Code ScanningYou: I'm doing bug bounty on target.com (in scope: *.target.com).
Route everything through Burp, do full recon, screenshot all subdomains,
check for common vulns, and generate a PDF + SARIF report.
HexStrike will:
1. set_scope(["*.target.com"])
2. set_engagement("BugBounty-target.com-2025")
3. set_global_proxy("http://127.0.0.1:8080") → Burp intercepts all traffic
4. subfinder_scan("target.com") → 47 subdomains
5. httpx_probe(subdomains) → 23 live hosts
6. gowitness_screenshot(mode="file", ...) → 23 screenshots
7. katana_crawl(live_hosts, depth=3) → 312 endpoints
8. nuclei_scan(live_hosts) → 8 findings
9. auto_import_findings("nuclei", output) → 8 findings imported
10. dalfox_xss_scan(params_urls) → 2 XSS found
11. ghauri_sqli_scan(params_urls) → 1 SQLi found
12. generate_pdf_report("/tmp/report.pdf")
13. export_sarif_report("/tmp/findings.sarif")
You: I'm on the internal network (10.10.10.0/24). No creds yet.
Find AD, extract password policy, spray, relay NTLM auth.
HexStrike will:
1. set_scope(["10.10.10.0/24"])
2. fast_scan_pipeline("10.10.10.0/24") → discover hosts/services
3. gowitness_screenshot(mode="nmap", ...) → screenshot web services
4. get_password_policy("10.10.10.1") → lockout threshold: 5
5. password_spray("10.10.10.0/24",
passwords=["Winter2024!","Spring2025!"],
userfile="/tmp/users.txt") → 2 valid creds found (CRITICAL)
6. ntlm_relay_attack(stage="setup") → prereq checklist
→ nxc smb 10.10.10.0/24 --gen-relay-list /tmp/targets.txt
7. ntlm_relay_attack(stage="relay", ...) → start ntlmrelayx
8. ntlm_relay_attack(stage="poison", ...) → start mitm6
9. ntlm_relay_attack(stage="check") → 3 NTLM hashes captured
10. ad_kerberoasting_workflow(...)
11. ad_certificate_abuse_workflow(...)
12. generate_pdf_report("/tmp/ad_report.pdf")
You: I found that https://target.com/.git is accessible. Extract it.
HexStrike will:
1. git_dumper(url="https://target.com/.git", output_dir="/tmp/target-src")
→ Dumps full repository source code
→ Runs git log: 47 commits recovered
→ Runs TruffleHog: 3 secrets found (AWS key, DB password, JWT secret)
2. auto_import_findings from TruffleHog output
3. add_finding_to_report(...)
You: Before spraying, check the password policy on 10.10.10.1.
HexStrike will:
1. get_password_policy("10.10.10.1")
→ Method: nxc
→ Lockout threshold: 3
→ ⚠️ DANGER: limit to 1 attempt per user per window
→ Observation window: 30 minutes
→ Safe spray attempts: 1
You: I have a Meterpreter shell on 10.10.10.5. Extract creds and pivot.
HexStrike will:
1. msf_connect(password="msf")
2. msf_sessions() → session 1: meterpreter x64/windows
3. msf_session_exec("1", "getuid") → NT AUTHORITY\SYSTEM
4. msf_run_module("post", "multi/recon/local_exploit_suggester",
options={"SESSION": "1"})
5. msf_loot() → 3 credential sets retrieved
6. msf_credentials() → hash dump available
7. add_finding_to_report("Meterpreter shell", "critical", "10.10.10.5", ...)
You: Export findings to SARIF and upload to GitHub.
HexStrike will:
1. export_sarif_report("/tmp/findings.sarif")
→ 12 findings exported, 10 unique rules
→ SARIF v2.1.0 with CVE taxa linked to NVD
# In terminal after export:
gh code-scanning upload-results \
--ref refs/heads/main \
--commit $(git rev-parse HEAD) \
--sarif /tmp/findings.sarif
You: Scan /opt/project for leaked secrets and security bugs.
HexStrike will:
1. trufflehog_secrets_scan("/opt/project", source="filesystem")
2. gitleaks_scan("/opt/project")
3. semgrep_sast_scan("/opt/project", config="p/owasp-top-ten")
4. auto_import_findings("trufflehog", output)
5. generate_html_report("/tmp/secrets_audit.html")
You: Scan 10.10.10.5 and automatically find known CVEs and exploits for every service.
HexStrike will:
1. fast_scan_pipeline("10.10.10.5") → discovers open ports + services
→ "21/tcp open ftp vsftpd 2.3.4"
→ "22/tcp open ssh OpenSSH 7.4"
→ "80/tcp open http Apache httpd 2.4.49"
2. auto_analyze_services_cve(nmap_output) → queries NVD API + searchsploit
→ Port 21 — vsftpd 2.3.4:
CVE-2011-2523 CVSS 10.0 CRITICAL — backdoor command execution
searchsploit: "vsftpd 2.3.4 - Backdoor Command Execution"
→ Port 22 — OpenSSH 7.4:
CVE-2018-15473 CVSS 5.3 MEDIUM — username enumeration
→ Port 80 — Apache 2.4.49:
CVE-2021-41773 CVSS 9.8 CRITICAL — path traversal / RCE
searchsploit: "Apache 2.4.49 - Path Traversal"
Summary: 3 services | 4 CVEs | Critical: 2 | Exploits: 2
3. add_finding_to_report(...)
You: Analyze /tmp/app.apk
HexStrike will:
1. apkleaks_scan("/tmp/app.apk") ← hardcoded secrets
2. apktool_analyze("/tmp/app.apk") ← decompile resources
3. jadx_decompile("/tmp/app.apk") ← readable Java source
4. frida_instrument(mode="ps") ← list running processes
python3 hexstrike_server.py --port 9999
# Update your MCP config: "--server", "http://127.0.0.1:9999"python3 hexstrike_server.py --debug
python3 hexstrike_mcp.py --server http://127.0.0.1:8888 --debugsudo nano /etc/systemd/system/hexstrike.service[Unit]
Description=HexStrike AI Server
After=network.target
[Service]
Type=simple
User=kali
WorkingDirectory=/home/kali/hexstrike-ai
ExecStart=/home/kali/hexstrike-ai/hexstrike_env/bin/python3 hexstrike_server.py
Restart=on-failure
Environment=HEXSTRIKE_API_KEY=your-key-here
[Install]
WantedBy=multi-user.targetsudo systemctl enable hexstrike
sudo systemctl start hexstrike
sudo systemctl status hexstrikeMost tools are pre-installed on Kali Linux 2024+. For everything else:
check_tools.py scans your system for all 159 tools used by HexStrike and optionally installs the missing ones.
Check all tools:
python3 check_tools.pyShow only missing tools:
python3 check_tools.py --missing-onlyCheck a specific category:
python3 check_tools.py --category "Web Application"Install missing tools automatically:
# Preview what would be installed (no changes made)
python3 check_tools.py --install --dry-run
# Install with confirmation prompts
python3 check_tools.py --install
# Install without prompts (for scripts/automation)
python3 check_tools.py --install --yesJSON output (for scripting):
python3 check_tools.py --json
python3 check_tools.py --missing-only --json | jq '.missing | keys'Cross-reference with running server:
python3 check_tools.py --server http://127.0.0.1:8888The script groups all apt packages into a single install command for efficiency, and handles pip3, Go, gem, and cargo packages separately. Tools that require manual steps (GUI installers, git clones) are reported with instructions rather than auto-installed.
go install -v github.com/projectdiscovery/naabu/v2/cmd/naabu@latest
go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest
go install -v github.com/projectdiscovery/tlsx/cmd/tlsx@latest
go install -v github.com/projectdiscovery/katana/cmd/katana@latest
go install -v github.com/projectdiscovery/shuffledns/cmd/shuffledns@latest
go install -v github.com/projectdiscovery/asnmap/cmd/asnmap@latest
go install -v github.com/projectdiscovery/uncover/cmd/uncover@latest
go install -v github.com/projectdiscovery/interactsh/cmd/interactsh-client@latest
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -update-templates# Impacket suite (includes ntlmrelayx, secretsdump, psexec, wmiexec)
pip install impacket
# mitm6 — IPv6 DNS poisoning
pip install mitm6
# Other AD tools
pip install bloodhound certipy-ad ldapdomaindump lsassy coercer
# Kerbrute
go install github.com/ropnop/kerbrute@latest
# Generate relay target list
nxc smb 192.168.1.0/24 --gen-relay-list /tmp/relay-targets.txt# Metasploit is pre-installed on Kali. Install the Python RPC client:
pip install pymetasploit3
# Start msfrpcd before connecting:
msfrpcd -P msf -S -f
# or from msfconsole:
# load msgrpc Pass=msf ServerHost=127.0.0.1 ServerPort=55553# gowitness
go install github.com/sensepost/gowitness@latest
# RustScan
cargo install rustscan
# or: apt install rustscanpip install git-dumpergo install github.com/hahwul/dalfox/v2@latest
pip install ghauri
go install github.com/dwisiswant0/crlfuzz/cmd/crlfuzz@latest
go install github.com/LukaSikic/subzy@latest
go install github.com/lc/gau/v2/cmd/gau@latest
go install github.com/sensepost/gowitness@latest
go install github.com/devploit/nomore403@latest
git clone https://github.com/commixproject/commix.git /opt/commix
git clone https://github.com/s0md3v/Corsy.git /opt/Corsy && pip install -r /opt/Corsy/requirements.txt
git clone https://github.com/defparam/smuggler.git /opt/smuggler
git clone https://github.com/ticarpi/jwt_tool.git /opt/jwt_tool && pip install -r /opt/jwt_tool/requirements.txt
pip install graphql-coppip install frida-tools objection apkleaks
apt install apktool
# jadx: https://github.com/skylot/jadx/releasespip install semgrep
apt install gitleaks
curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/binpip install s3scanner enumerate-iam
go install github.com/0xsha/cloudbrute@latest# ligolo-ng: https://github.com/nicocha30/ligolo-ng/releases
# chisel: https://github.com/jpillora/chisel/releasesThe Flask server exposes a REST API on http://127.0.0.1:8888. You can call it directly without the MCP layer.
All POST/DELETE endpoints require
X-API-Keyheader whenHEXSTRIKE_API_KEYis set.
| Method | Endpoint | Description |
|---|---|---|
| GET | /health |
Server health, scope info, nuclei template status |
| POST | /api/command |
Execute any arbitrary command (requires API key) |
| GET | /api/cache/stats |
Cache hit rate and stats |
| POST | /api/cache/clear |
Clear command cache |
| GET | /api/tools/status |
Tool availability inventory (80+ tools, per engagement type) |
| Method | Endpoint | Body |
|---|---|---|
| POST | /api/scope/set |
{"targets": ["192.168.1.0/24"]} |
| POST | /api/scope/add |
{"target": "10.10.10.1"} |
| POST | /api/scope/validate |
{"target": "10.10.10.1"} |
| POST | /api/scope/remove |
{"target": "10.10.10.1"} |
| GET | /api/scope/list |
— |
| POST | /api/scope/clear |
— |
| Method | Endpoint | Body |
|---|---|---|
| GET | /api/config/proxy |
— |
| POST | /api/config/proxy |
{"proxy_url": "http://127.0.0.1:8080", "enabled": true} |
| POST | /api/config/proxy/enable |
— |
| POST | /api/config/proxy/disable |
— |
| POST | /api/config/proxy/clear |
— |
| Method | Endpoint | Body |
|---|---|---|
| POST | /api/webhooks/add |
{"url": "...", "platform": "slack|discord|generic", "min_severity": "high", "name": "..."} |
| GET | /api/webhooks/list |
— |
| POST | /api/webhooks/test |
{"webhook_id": "..."} |
| DELETE | /api/webhooks/remove |
{"webhook_id": "..."} |
| POST | /api/webhooks/clear |
— |
| Method | Endpoint | Body |
|---|---|---|
| POST | /api/reports/add-finding |
{"title", "severity", "target", "tool", "description", "evidence"} |
| GET | /api/reports/list-findings |
— |
| GET | /api/reports/statistics |
— |
| POST | /api/reports/auto-import |
{"tool_name": "nmap|nuclei|nikto|gobuster|sqlmap|hydra", "tool_output": "...", "target": "..."} |
| POST | /api/reports/generate-html |
{"output_path": "/tmp/r.html", "engagement_name": "..."} |
| POST | /api/reports/generate-pdf |
{"output_path": "/tmp/r.pdf"} |
| POST | /api/reports/export-json |
{"output_path": "/tmp/findings.json"} |
| POST | /api/reports/export-sarif |
{"output_path": "/tmp/findings.sarif"} |
| POST | /api/reports/set-engagement |
{"name": "ClientX-2025"} |
| GET | /api/reports/list-engagements |
— |
| POST | /api/reports/delete-engagement |
{"name": "ClientX-2025"} |
| POST | /api/reports/clear-findings |
— |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/intelligence/service-cve-scan |
Automated service → CVE/exploit pipeline. Accepts nmap_output (raw nmap stdout) or services list |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/workflows/fast-scan |
RustScan → Nmap two-phase pipeline |
| POST | /api/workflows/password-policy |
Extract AD password policy (nxc → enum4linux-ng → rpcclient cascade) |
| POST | /api/workflows/password-spray |
Lockout-safe multi-round password spray |
| POST | /api/workflows/ntlm-relay |
impacket-ntlmrelayx + mitm6 staged workflow |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/ad/kerberoasting-workflow |
Full Kerberoasting attack chain |
| POST | /api/ad/asreproasting-workflow |
AS-REP Roasting (no creds needed) |
| POST | /api/ad/domain-enum-workflow |
BloodHound + LDAP domain enumeration |
| POST | /api/ad/certificate-abuse-workflow |
Certipy ESC1/ESC8 abuse |
| Method | Endpoint | Body |
|---|---|---|
| POST | /api/metasploit/connect |
{"password": "msf", "host": "127.0.0.1", "port": 55553} |
| GET | /api/metasploit/sessions |
— |
| POST | /api/metasploit/session-exec |
{"session_id": "1", "command": "whoami"} |
| POST | /api/metasploit/run-module |
{"module_type": "exploit", "module_name": "...", "options": {...}} |
| GET | /api/metasploit/search |
?query=smb+type:exploit |
| GET | /api/metasploit/loot |
— |
| GET | /api/metasploit/credentials |
— |
| POST | /api/metasploit/kill-job |
{"job_id": "0"} |
All tool endpoints follow the same pattern:
curl -X POST http://127.0.0.1:8888/api/tools/nmap \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{"target": "192.168.1.1", "scan_type": "-sV", "ports": "80,443"}'Notable endpoints: /api/tools/nmap, /api/tools/nuclei, /api/tools/nuclei-update, /api/tools/ffuf, /api/tools/gowitness, /api/tools/git-dumper, /api/tools/dalfox, /api/tools/katana, /api/tools/netexec, /api/tools/bloodhound-python, /api/tools/certipy, /api/tools/trufflehog, /api/tools/semgrep, /api/tools/frida, /api/tools/ligolo-ng, and 100+ more.
- Verify server is running:
curl http://127.0.0.1:8888/health - Use absolute path in your config — relative paths don't work
- Verify Python is in PATH:
which python3 - Check client logs: Claude Code →
~/.claude/logs/| Cursor → Help → Toggle Dev Tools
# Scan all 159 tools and show missing ones
python3 check_tools.py --missing-only
# Install missing tools automatically
python3 check_tools.py --install --yes
# Or check tool availability via the server status endpoint
curl http://127.0.0.1:8888/api/tools/status | python3 -m json.tool
# Check specific tools manually
which gowitness git-dumper dalfox naabu nuclei certipy impacket-ntlmrelayx mitm6# See current scope
curl http://127.0.0.1:8888/api/scope/list
# Clear scope (no restrictions)
curl -X POST http://127.0.0.1:8888/api/scope/clear
# Validate a specific target
curl -X POST http://127.0.0.1:8888/api/scope/validate \
-H "Content-Type: application/json" \
-d '{"target": "192.168.1.1"}'# Check if API key is required
curl http://127.0.0.1:8888/health # public endpoint, should work without key
# Test with key
curl -X POST http://127.0.0.1:8888/api/command \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"command": "whoami"}'
# If running with systemd, check the Environment= line in hexstrike.service# Requires root for raw socket / port 445
sudo python3 hexstrike_server.py
# Or use authbind
apt install authbind
authbind --deep python3 hexstrike_server.py# Verify msfrpcd is running
ps aux | grep msfrpcd
# Start it manually
msfrpcd -P msf -S -f
# Or from msfconsole:
# load msgrpc Pass=msf ServerHost=127.0.0.1 ServerPort=55553 SSL=false
# Verify the port
ss -tlnp | grep 55553
# If pymetasploit3 not installed:
pip install pymetasploit3# Check current proxy status
curl http://127.0.0.1:8888/api/config/proxy
# Verify Burp/ZAP is listening
ss -tlnp | grep 8080
# Make sure the proxy is enabled
curl -X POST http://127.0.0.1:8888/api/config/proxy/enable
# If Burp rejects self-signed certs from tools:
# Burp → Proxy → Options → TLS → Install CA cert in system trust storepip install weasyprint
# On Kali/Debian:
apt install libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0HEXSTRIKE_PORT=8889 python3 hexstrike_server.py
# Update --server in your MCP config to http://127.0.0.1:8889# Verify Chrome/Chromium is installed (required by gowitness)
apt install chromium
which gowitness # verify binary is in PATHHexStrike AI is built for authorized security testing only.
Allowed:
- Penetration testing with written authorization
- Bug bounty programs (within defined scope)
- CTF competitions
- Security research on systems you own
- Defensive security and vulnerability assessments
Not allowed:
- Unauthorized scanning or exploitation
- Testing systems without explicit permission
- Any activity that violates local laws or regulations
Always define your scope with set_scope() before starting an engagement.