No description
- HTML 70.6%
- Rust 29.1%
- Shell 0.3%
| .claude | ||
| docs | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| README.md | ||
| tarpaulin-report.html | ||
jeager_test
Painel TUI (Terminal User Interface) para pentest e reconhecimento de segurança. Desenvolvido em Rust com Ratatui, oferece 5 módulos especializados para análise estática, scanning de infraestrutura e integração com ferramentas externas via MCP (Model Context Protocol).
Sumário
- Funcionalidades
- Stack Tecnológica
- Requisitos
- Instalação
- Uso
- Arquitetura
- Testes
- Controles
- Roadmap
- Licença
Funcionalidades
1. Servidor — TCP Port Scanner
- Scan sequencial de portas (22, 80, 443, 3306, 8080)
- Identificação automática de serviços (SSH, HTTP, HTTPS, MySQL, etc.)
- Estados:
Aberta,Fechada,Filtrada - Filtro por estado + navegação por resultado
2. PHP — Analisador Estático de Código
- Scan de arquivos
.phpem diretório (top-level) - Detecção de vulnerabilidades:
- RCE:
eval(),exec(),system(),shell_exec(),passthru(),proc_open() - SQL Injection: padrões de query concatenada
- XSS:
echo/printsem escape - LFI/RFI:
include/requirecom input controlável - Unserialize:
unserialize()em dados não confiáveis - Header Injection:
header()com input do usuário
- RCE:
- Classificação por severidade:
[ALTA],[MEDIA],[BAIXA] - Filtro por severidade + navegação detalhada
3. WordPress — Reconhecimento e CVE Matching
- Fingerprinting HTTP: detecta se o alvo é WordPress
- Extração de versão, tema ativo e plugins instalados
- Enumeração de usuários via REST API (
/wp-json/wp/v2/users) - Matching com CVEs hardcoded (WordPress core, themes e plugins populares)
- Filtro por severidade das CVEs encontradas
4. CI/CD — Analisador de GitHub Actions
- Scan do diretório
.github/workflows/ - Detecção de vulnerabilidades em workflows YAML:
- Script Injection:
${{ github.event.issue.title }},github.head_ref, etc. - Pwn Request:
pull_request_target+actions/checkout - Workflow Run Inseguro:
workflow_runsem validação - Secrets Hardcoded: AWS keys, GitHub tokens, API keys, private keys
- Script Injection:
- Filtro por severidade + navegação por resultado
5. MCP — Model Context Protocol Client
- Cliente JSON-RPC 2.0 over STDIO
- Integração com servidores MCP via Docker (ex:
pentest-tools-mcp) list_tools: lista ferramentas disponíveis no servidor MCPcall_tool: invoca ferramenta com parâmetros JSON- Navegação por tools + visualização de output
Stack Tecnológica
| Tecnologia | Uso |
|---|---|
| Ratatui | Renderização TUI (widgets, layout, cores) |
| crossterm | Eventos de teclado e controle de terminal |
| tokio | Runtime async, I/O não-bloqueante, processos |
| reqwest | Cliente HTTP assíncrono (WordPress scanning) |
| serde + serde_json | Serialização JSON-RPC (MCP) |
Requisitos
- Rust 1.78+ (edition 2021)
- Docker (opcional, para o módulo MCP)
- Para desenvolvimento:
cargo-tarpaulin(cobertura de testes)
# Instalar tarpaulin (necessário apenas para dev)
cargo install cargo-tarpaulin
Instalação
# Clone o repositório
git clone <url-do-repo>
cd jeager_test
# Build de release
cargo build --release
# O binário estará em:
# ./target/release/jeager_test
Uso
# Executar diretamente
cargo run
# Ou o binário compilado
./target/release/jeager_test
A interface é dividida em:
- Cabeçalho: título e abas dos 5 módulos
- Painel principal (70%): resultado do módulo ativo
- Logs (30%): mensagens de status e erros
- Rodapé: atalhos de teclado por módulo
Fluxo típico
- Use
←/→para selecionar o módulo desejado - Pressione
Tabpara focar o campo de Alvo - Digite o alvo (IP, URL ou caminho)
- Pressione
Enterpara confirmar - Pressione
Spara iniciar o scan - Use
↑/↓para navegar nos resultados - Pressione
Fpara ciclar filtros (quando disponível)
Arquitetura
src/
├── main.rs # Event loop async, handle_key_event, panic hook
├── app.rs # Estado da aplicação, structs genéricas (ListState, WpState, McpState)
├── ui.rs # Renderização Ratatui (draw_*_module, logs, footer)
├── php_scanner.rs # Análise estática de código PHP
├── server_scanner.rs # TCP port scanner com trait Connector
├── wordpress_scanner.rs # HTTP fingerprinting + CVE matching
├── github_scanner.rs # Analisador de workflows GitHub Actions
└── mcp_client.rs # Cliente JSON-RPC 2.0 MCP over STDIO
Padrões Arquiteturais
- Trait + Mock pattern: todos os scanners usam traits para testabilidade
Connector→TokioConnector(prod) /MockConnector(teste)HttpClient→ReqwestClient(prod) /MockHttpClient(teste)McpTransport→StdioMcpTransport(prod) /MockMcpTransport(teste)
- Generic
ListState<T, F>: elimina duplicação de estado filtrável (PHP, Server, CI/CD) FilterCycle+Filterable<F>traits: lógica de filtro genérica e type-safe- Panic hook: restaura terminal (raw mode + alternate screen) em caso de panic
Testes
O projeto mantém 100% de cobertura de código (linhas) como discipline de qualidade.
# Rodar todos os testes
cargo test
# Clippy (zero warnings)
cargo clippy -- -D warnings
# Formatação
cargo fmt
# Cobertura (requer cargo-tarpaulin)
cargo tarpaulin --fail-under 100
Estatísticas atuais
- 182 testes passando
- 897/897 linhas cobertas (100%)
- Módulos cobertos:
app.rs— estado, navegação, filtros genéricosphp_scanner.rs— detecção de todas as categorias de vulnerabilidadeserver_scanner.rs— port states, service mapping, connector traitwordpress_scanner.rs— parsing HTML/JSON, CVE matchinggithub_scanner.rs— script injection, pwn request, secretsmcp_client.rs— JSON-RPC, transport, parse/rpc/io errorsui.rs— renderização de todos os módulos e estadosmain.rs— event loop, key bindings
Controles
| Tecla | Ação Global |
|---|---|
Q |
Sair da aplicação |
Tab / Shift+Tab |
Alternar foco (Módulos ↔ Alvo) |
← / → |
Navegar entre módulos |
Enter |
Confirmar alvo digitado |
Esc |
Sair do modo de input |
Backspace |
Apagar caractere no input |
| Tecla | Ação no Painel |
|---|---|
S |
Iniciar scan / listar tools / invocar tool |
F |
Ciclar filtro de severidade/estado |
↑ / ↓ |
Navegar resultados/tools |
Roadmap
O desenvolvimento segue um plano de 3 sprints de melhoria:
Sprint A — Core Architecture & UX
- A3: Panic hook para restaurar terminal
- A4: Extração de estado por módulo (
ListState<T,F>,WpState,McpState) - A1: Scans não-bloqueantes via
tokio::sync::mpsc - A2: Cores por severidade (
[ALTA]vermelho,[MEDIA]amarelo,[BAIXA]verde)
Sprint B — Scanner Quality
- B1: Scan PHP recursivo (subdiretórios)
- B2: Port scan concorrente (
FuturesUnordered+Semaphore) - B3: Parsing WordPress robusto (
serde_json,url::Url) - B4: Export de relatórios (JSON/CSV)
Sprint C — Polish & CI
- C1: Dispatch de key handlers por módulo
- C2: Pipeline CI (fmt, clippy, tarpaulin)
- C3: Target input por módulo (não global)
- C4: Uso de widget
Listdo Ratatui
Licença
MIT
Nota de segurança:
jeager_testé uma ferramenta de pentest educacional e profissional. Use apenas em sistemas que você possui autorização para testar.