mirror of
https://github.com/CyberSecurityUP/NeuroSploit.git
synced 2026-04-03 09:50:36 +02:00
- MD Agent system restructured: real HTTP exploitation, retry with exponential backoff, reduced concurrency (2 parallel, 2s stagger) - Claude 4.6 model support (Opus/Sonnet) with corrected API version headers - SmartRouter true failover with provider preference cascade - WAFResult attribute error fix in autonomous_agent.py - CVSS data sanitization for all vulnerability database saves - AI recon JSON parsing robustness improvements - rebuild.sh simplified from 714 to 196 lines - Frontend: removed unused routes, simplified Auto Pentest page - Agent grid: reduced max tests per agent (8→5), condensed recon prompts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
197 lines
8.4 KiB
Bash
Executable File
197 lines
8.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================================
|
|
# NeuroSploit v3 — Rebuild & Launch (Claude 4.6)
|
|
# ============================================================================
|
|
# ./rebuild.sh Default (backend + frontend)
|
|
# ./rebuild.sh --backend-only Skip frontend
|
|
# ./rebuild.sh --frontend-only Skip backend
|
|
# ./rebuild.sh --model MODEL Override LLM model
|
|
# ./rebuild.sh --install Force reinstall dependencies
|
|
# ./rebuild.sh --reset-db Delete + recreate database
|
|
# ./rebuild.sh --build Production frontend build
|
|
# ./rebuild.sh --port 9000 Custom backend port
|
|
# ============================================================================
|
|
|
|
set -e
|
|
|
|
DIR="/opt/NeuroSploitv2"
|
|
VENV="$DIR/venv"
|
|
FRONT="$DIR/frontend"
|
|
LOGS="$DIR/logs"
|
|
PIDS="$DIR/.pids"
|
|
DB="$DIR/data/neurosploit.db"
|
|
|
|
# ── Colors ───────────────────────────────────────────────────────────
|
|
R='\033[0;31m' G='\033[0;32m' Y='\033[1;33m' B='\033[0;34m' C='\033[0;36m' N='\033[0m'
|
|
header() { echo -e "\n${C}━━━ $1 ━━━${N}"; }
|
|
ok() { echo -e " ${G}✓${N} $1"; }
|
|
warn() { echo -e " ${Y}!${N} $1"; }
|
|
fail() { echo -e " ${R}✗${N} $1"; exit 1; }
|
|
|
|
# ── Parse args ───────────────────────────────────────────────────────
|
|
BACK_ONLY=false; FRONT_ONLY=false; BUILD=false; INSTALL=false; RESET=false
|
|
MODEL=""; PORT=8000; FPORT=3000
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--backend-only) BACK_ONLY=true; shift ;;
|
|
--frontend-only) FRONT_ONLY=true; shift ;;
|
|
--build) BUILD=true; shift ;;
|
|
--install) INSTALL=true; shift ;;
|
|
--reset-db) RESET=true; shift ;;
|
|
--model) MODEL="$2"; shift 2 ;;
|
|
--port) PORT="$2"; shift 2 ;;
|
|
--frontend-port) FPORT="$2"; shift 2 ;;
|
|
*) shift ;;
|
|
esac
|
|
done
|
|
|
|
# ── 0. Stop previous ────────────────────────────────────────────────
|
|
header "Stopping previous"
|
|
mkdir -p "$PIDS" "$LOGS" "$DIR/data" "$DIR/reports/screenshots"
|
|
|
|
for f in "$PIDS"/*.pid; do
|
|
[ -f "$f" ] || continue
|
|
pid=$(cat "$f" 2>/dev/null)
|
|
[ -n "$pid" ] && kill "$pid" 2>/dev/null && ok "Stopped $(basename "$f" .pid)"
|
|
rm -f "$f"
|
|
done
|
|
lsof -ti:$PORT >/dev/null 2>&1 && kill $(lsof -ti:$PORT) 2>/dev/null || true
|
|
lsof -ti:$FPORT >/dev/null 2>&1 && kill $(lsof -ti:$FPORT) 2>/dev/null || true
|
|
sleep 1
|
|
|
|
# ── 1. Database reset ───────────────────────────────────────────────
|
|
if [ "$RESET" = true ] && [ -f "$DB" ]; then
|
|
header "Reset database"
|
|
cp "$DB" "$DB.bak.$(date +%s)"
|
|
rm -f "$DB"
|
|
ok "DB backed up and deleted"
|
|
fi
|
|
|
|
# ── 2. Environment check ────────────────────────────────────────────
|
|
header "Environment"
|
|
|
|
[ -f "$DIR/.env" ] || { [ -f "$DIR/.env.example" ] && cp "$DIR/.env.example" "$DIR/.env" && warn "Created .env from example"; } || fail "No .env"
|
|
ok ".env"
|
|
|
|
PY=$(command -v python3 || command -v python) || fail "Python not found"
|
|
ok "Python: $($PY --version 2>&1)"
|
|
|
|
if [ "$BACK_ONLY" = false ]; then
|
|
command -v node &>/dev/null || fail "Node.js not found"
|
|
ok "Node: $(node --version)"
|
|
fi
|
|
|
|
command -v docker &>/dev/null && ok "Docker: available" || warn "Docker: not found (sandbox disabled)"
|
|
|
|
# ── 3. Backend setup ────────────────────────────────────────────────
|
|
if [ "$FRONT_ONLY" = false ]; then
|
|
header "Backend"
|
|
|
|
[ -d "$VENV" ] && [ "$INSTALL" = false ] || { $PY -m venv "$VENV"; ok "Venv created"; }
|
|
source "$VENV/bin/activate"
|
|
|
|
if [ "$INSTALL" = true ] || [ ! -f "$VENV/.ok" ]; then
|
|
pip install -q --upgrade pip
|
|
pip install -q -r "$DIR/backend/requirements.txt" 2>&1 | tail -3
|
|
pip install -q -r "$DIR/requirements.txt" 2>&1 | tail -3
|
|
[ -f "$DIR/requirements-optional.txt" ] && pip install -q -r "$DIR/requirements-optional.txt" 2>/dev/null || true
|
|
touch "$VENV/.ok"
|
|
ok "Dependencies installed"
|
|
else
|
|
ok "Dependencies cached"
|
|
fi
|
|
|
|
# Quick validation
|
|
$PY -c "
|
|
import sys; sys.path.insert(0,'$DIR')
|
|
mods = ['backend.main','backend.config','backend.core.autonomous_agent','backend.core.md_agent',
|
|
'backend.core.smart_router.router','backend.core.vuln_engine.registry']
|
|
ok=err=0
|
|
for m in mods:
|
|
try: __import__(m); ok+=1
|
|
except: err+=1
|
|
print(f' {ok}/{ok+err} core modules OK')
|
|
" 2>&1 || true
|
|
fi
|
|
|
|
# ── 4. Frontend setup ───────────────────────────────────────────────
|
|
if [ "$BACK_ONLY" = false ]; then
|
|
header "Frontend"
|
|
cd "$FRONT"
|
|
if [ ! -d "node_modules" ] || [ "$INSTALL" = true ]; then
|
|
npm install --silent 2>&1 | tail -3
|
|
ok "Dependencies installed"
|
|
else
|
|
ok "Dependencies cached"
|
|
fi
|
|
cd "$DIR"
|
|
fi
|
|
|
|
# ── 5. Launch backend ───────────────────────────────────────────────
|
|
if [ "$FRONT_ONLY" = false ]; then
|
|
header "Starting backend :$PORT"
|
|
source "$VENV/bin/activate"
|
|
set -a; source "$DIR/.env"; set +a
|
|
|
|
[ -n "$MODEL" ] && export DEFAULT_LLM_MODEL="$MODEL" && ok "Model: $MODEL"
|
|
|
|
PYTHONPATH="$DIR" uvicorn backend.main:app \
|
|
--host 0.0.0.0 --port $PORT --reload --log-level info \
|
|
> "$LOGS/backend.log" 2>&1 &
|
|
echo $! > "$PIDS/backend.pid"
|
|
ok "PID: $(cat "$PIDS/backend.pid")"
|
|
|
|
for i in $(seq 1 15); do
|
|
curl -s "http://localhost:$PORT/docs" >/dev/null 2>&1 && break
|
|
sleep 1
|
|
done
|
|
fi
|
|
|
|
# ── 6. Launch frontend ──────────────────────────────────────────────
|
|
if [ "$BACK_ONLY" = false ]; then
|
|
header "Starting frontend :$FPORT"
|
|
cd "$FRONT"
|
|
if [ "$BUILD" = true ]; then
|
|
npm run build 2>&1 | tail -3
|
|
npx vite preview --port $FPORT > "$LOGS/frontend.log" 2>&1 &
|
|
else
|
|
npx vite --port $FPORT > "$LOGS/frontend.log" 2>&1 &
|
|
fi
|
|
echo $! > "$PIDS/frontend.pid"
|
|
ok "PID: $(cat "$PIDS/frontend.pid")"
|
|
cd "$DIR"
|
|
fi
|
|
|
|
# ── 7. Summary ──────────────────────────────────────────────────────
|
|
echo ""
|
|
echo -e "${C}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${N}"
|
|
echo -e "${G} NeuroSploit v3 — Agent-First AI Pentest Platform${N}"
|
|
echo -e "${C}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${N}"
|
|
echo ""
|
|
[ "$FRONT_ONLY" = false ] && {
|
|
echo -e " ${G}API${N} http://localhost:$PORT"
|
|
echo -e " ${G}Docs${N} http://localhost:$PORT/docs"
|
|
echo -e " ${G}Model${N} ${MODEL:-claude-sonnet-4-6-20250918}"
|
|
}
|
|
[ "$BACK_ONLY" = false ] && echo -e " ${G}Frontend${N} http://localhost:$FPORT"
|
|
echo ""
|
|
echo -e " ${B}Architecture${N}"
|
|
echo -e " ├─ 108 AI agents (real HTTP testing, PLAN→EXECUTE→ANALYZE)"
|
|
echo -e " ├─ 100 vulnerability types + validation pipeline"
|
|
echo -e " ├─ Claude 4.6: Opus, Sonnet 4.6, Sonnet 4.5, Haiku 4.5"
|
|
echo -e " ├─ 20 LLM providers (auto-failover)"
|
|
echo -e " └─ Agent-first flow: Recon (20%) → Agent Grid (65%) → Report (15%)"
|
|
echo ""
|
|
echo -e " ${B}Auto Pentest Flow${N}"
|
|
echo -e " 0-20% Recon: endpoints, tech stack, WAF, params, CVEs"
|
|
echo -e " 20-85% Agent Grid: 108 agents execute real HTTP tests"
|
|
echo -e " 85-100% Finalization: chains, screenshots, AI report"
|
|
echo ""
|
|
echo -e " ${Y}Logs${N} tail -f $LOGS/backend.log"
|
|
echo -e " ${Y}Stop${N} kill \$(cat $PIDS/backend.pid $PIDS/frontend.pid 2>/dev/null)"
|
|
echo -e "${C}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${N}"
|
|
echo ""
|
|
|
|
wait
|