AI-powered SAST + DAST security scanner for bug bounty hunters
Project description
Senshi (戦士)
AI-powered SAST + DAST security scanner for bug bounty hunters
Senshi uses LLMs to generate context-aware payloads, analyze responses intelligently, eliminate false positives, and chain findings into exploitable attack paths — all from a single CLI.
Created by Manthan Ghasadiya — creator of mcpsec (4 CVEs including CVSS 10.0) and igris.
Why Senshi?
Traditional scanners fire generic payloads and drown you in false positives. Senshi is different:
- 🧠 AI-First — LLMs generate payloads tailored to the target's tech stack and context
- 🚫 FP Elimination — A skeptical 2nd-pass AI reviewer slashes false positives
- 🔗 Chain Builder — Links individual findings into high-impact exploit chains
- 📋 Bounty Reports — LLM writes your HackerOne/MSRC submission for you
- 🔌 Provider Agnostic — DeepSeek, OpenAI, Groq, Ollama, Anthropic — your choice
Features
| Feature | Description |
|---|---|
| Autonomous Pentesting | Think \u2192 Act \u2192 Observe LLM agent loop with browser execution |
| DAST | Crawl, probe, inject, and analyze live endpoints |
| SAST | Deep source code analysis with multi-language support |
| 7 DAST Scanners | XSS, SSRF, IDOR, SQLi/CMDi/SSTI, Auth bypass, Deserialization, AI Product |
| 5 SAST Scanners | Injection, Auth, Crypto, Config, AI pattern detection |
| Auto-Recon | Endpoint discovery, JS analysis, tech fingerprinting |
| Browser Recon & Testing | Headless Chromium captures traffic and confirms vulnerabilities via Playwright |
| Smart Routing | Scanners only run on relevant endpoints (~2x speedup) |
| Batch Analysis | 1 LLM call per endpoint per scanner (~6x fewer API calls) |
| Progressive Save | Results saved to disk as found \u2014 Ctrl+C preserves findings |
| 4 Output Formats | JSON, Markdown, SARIF (CI/CD), Bounty Report |
Installation
pip install senshi
Or from source:
git clone https://github.com/manthanghasadiya/senshi.git
cd senshi
pip install -e ".[dev,browser,websocket]"
Quick Start
1. Set your API key
export DEEPSEEK_API_KEY="sk-..."
# or: export OPENAI_API_KEY="sk-..."
# or: export GROQ_API_KEY="gsk_..."
2. Scan
# Autonomous Black-Box Pentest (v0.3.0)
senshi pentest https://target.com --provider deepseek --browser --verbose
# DAST \u2014 scan live targets
senshi dast https://target.com --provider deepseek
# With auth + Burp proxy
senshi dast https://target.com/api \
--auth "Cookie: session=abc" \
--proxy http://127.0.0.1:8080
# Specific scanners only
senshi dast https://target.com --modules xss,ssrf,injection
# SAST — analyze source code
senshi sast ./my-project
senshi sast https://github.com/user/repo.git
# Recon only
senshi recon https://target.com --depth 3
# Browser-based recon (captures XHR/fetch traffic)
senshi recon https://target.com --browser --output endpoints.json
# DAST with pre-discovered endpoints
senshi dast https://target.com --endpoints endpoints.json
# Generate payloads
senshi payloads --vuln xss --target "POST /api/chat" --param message
# Generate bounty report from findings
senshi report findings.json --platform hackerone --output report.md
CLI Reference
| Command | Description |
|---|---|
senshi pentest <url> |
Run autonomous pentest agent |
senshi dast <url> |
Scan live web endpoints |
senshi sast <path> |
Analyze source code (dir, git URL, or zip) |
senshi recon <url> |
Discover endpoints (no scanning) |
senshi payloads |
Generate payloads for manual testing |
senshi report <file> |
Generate bounty report from findings JSON |
senshi config |
Configure API keys and settings |
DAST Scanners
| Scanner | Vulnerability Types |
|---|---|
xss |
Reflected, stored, DOM, markdown injection |
ssrf |
Cloud metadata, internal services, DNS rebind |
idor |
ID enumeration, path-based access control |
injection |
SQLi (error + blind), command injection, SSTI |
auth |
Auth bypass, method switching, header bypass |
deserialization |
Prototype pollution, pickle, YAML, XXE |
ai_product |
Prompt injection, data leakage, cross-user |
SAST Scanners
| Scanner | Focus |
|---|---|
| Injection | SQLi, command injection, SSRF, path traversal in code |
| Auth | Hardcoded creds, missing auth checks, broken access control |
| Crypto | Weak hashing (MD5/SHA1), hardcoded keys, insecure random |
| Config | Debug mode, CORS misconfiguration, missing security headers |
| AI | Prompt injection sinks, unsafe eval of LLM output |
Output Formats
- JSON — Machine-readable, re-importable with
senshi report - Markdown — Human-readable with severity indicators and evidence blocks
- SARIF — CI/CD integration (GitHub Code Scanning, Azure DevOps)
- Bounty Report — LLM-written submission tailored to your platform
Supported LLM Providers
| Provider | Environment Variable | Default Model |
|---|---|---|
| DeepSeek | DEEPSEEK_API_KEY |
deepseek-chat |
| OpenAI | OPENAI_API_KEY |
gpt-4o-mini |
| Groq | GROQ_API_KEY |
llama-3.3-70b-versatile |
| Ollama | — (local) | llama3.1 |
| Anthropic | ANTHROPIC_API_KEY |
claude-3.5-sonnet |
Architecture
senshi/
├── ai/ # AI Core
│ ├── brain.py # Universal LLM interface (robust JSON extraction)
│ ├── prompts/ # Security-focused system prompts
│ ├── payload_gen.py # Context-aware payload generator
│ ├── response_analyzer.py # Batch response analysis (v0.2.0)
│ ├── code_analyzer.py
│ ├── false_positive_filter.py
│ ├── chain_builder.py
│ └── report_writer.py
├── core/
│ ├── config.py # Auto-detect providers from env vars
│ ├── session.py # HTTP session (auth, proxy, rate limiting)
│ └── engine.py # Main scan orchestrator (smart routing, progressive save)
├── dast/
│ ├── crawler.py # Endpoint discovery + LLM JS analysis
│ ├── browser_recon.py # Playwright headless browser recon (v0.2.0)
│ ├── tech_detector.py # Tech stack fingerprinting
│ ├── param_discovery.py # Hidden parameter fuzzing
│ ├── scanners/ # 7 DAST scanner modules (smart routing)
│ └── validators/ # Exploitability validation
├── sast/
│ ├── repo_loader.py # Load from dir, git, zip
│ ├── file_parser.py # Multi-language parser
│ ├── dependency_analyzer.py
│ ├── context_builder.py
│ └── scanners/ # 5 SAST scanner modules
├── reporters/
│ ├── models.py # Finding + ScanResult + ScanState (Pydantic)
│ ├── json_report.py
│ ├── markdown_report.py
│ ├── sarif_report.py
│ └── bounty_report.py
├── targets/ # Target-specific configs
└── cli.py # Typer CLI
Development
git clone https://github.com/manthanghasadiya/senshi.git
cd senshi
pip install -e ".[dev]"
# For browser recon support
pip install -e ".[browser]"
playwright install chromium
pytest tests/ -v
See CONTRIBUTING.md for details.
Legal
[!CAUTION] Senshi is intended for authorized security testing only. Only scan targets you have explicit written permission to test. Unauthorized scanning is illegal. See SECURITY.md.
License
MIT License — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file senshi-0.3.0.tar.gz.
File metadata
- Download URL: senshi-0.3.0.tar.gz
- Upload date:
- Size: 117.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f9b0a418f6bef20d5217de3d83e9388f20bcadfcfa050aa43b954dbb5fc7ed2
|
|
| MD5 |
9a9247529315122a4a032342aa78018a
|
|
| BLAKE2b-256 |
09e81db3bdfc86677ea1499c4b522da87c3957633aa3b7c18b1af0a43a16cfd8
|
File details
Details for the file senshi-0.3.0-py3-none-any.whl.
File metadata
- Download URL: senshi-0.3.0-py3-none-any.whl
- Upload date:
- Size: 150.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a370e60a2988838982bc4d8acb3290531c0a44b98c342da66b6e20ad44a78b6d
|
|
| MD5 |
fcd72e7e8a963074381bf124910bd24c
|
|
| BLAKE2b-256 |
6c2e920d6ded212768072b2566e8a4fe44813ebde2437f20e7cbca2d5fd6c46e
|