Intercepta requisições HTTP para um determinado domínio e altera parâmetros específicos antes de enviar a requisição.
Aplicação Python com interface gráfica que permite configurar regras de interceptação para modificar parâmetros de requisições HTTP. Quando o navegador envia uma requisição para uma rota configurada, o proxy intercepta, modifica apenas os parâmetros especificados e encaminha a requisição mantendo todos os outros parâmetros originais.
- ✅ Interface gráfica intuitiva (PySide6)
- ✅ Configuração de múltiplas regras de interceptação
- ✅ Suporte para GET (query string) e POST (form data)
- ✅ Ativar/desativar regras individualmente
- ✅ Persistência de configurações em JSON
- ✅ Porta Configurável - Escolha a porta do proxy (padrão: 9507)
- ✅ Intercept Manual (Forward/Drop) - Funcionalidade inspirada no Burp Suite
- ✅ WebSocket Support 🔌 - Interceptação e monitoramento de WebSocket:
- Listagem de conexões WebSocket ativas e fechadas
- Visualização de mensagens enviadas/recebidas
- Suporte a mensagens de texto e binárias
- Histórico completo por conexão
- ✅ Intruder Avançado 💥 - Ferramenta completa de ataque automatizado:
- 4 tipos de ataque (Sniper, Battering Ram, Pitchfork, Cluster Bomb)
- Múltiplas posições de payload (§markers§)
- Payload processing (URL encode, Base64, MD5, SHA256, prefix/suffix)
- Grep extraction (extração de dados via regex)
- Resource pool management (controle de threads)
- ✅ Scanner de Vulnerabilidades 🔐 - Detecção automática de:
- Scanner Passivo: Detecta vulnerabilidades em respostas HTTP
- SQL Injection (Error-Based)
- XSS (Cross-Site Scripting)
- CSRF (Cross-Site Request Forgery)
- Path Traversal
- CVEs conhecidas
- Informações sensíveis expostas
- Scanner Ativo: Testa ativamente endpoints com payloads
- SQL Injection (Error-Based, Boolean-Based, Time-Based)
- XSS Refletido
- Command Injection
- Scan sob demanda em requisições selecionadas
- Scanner Passivo: Detecta vulnerabilidades em respostas HTTP
- ✅ Spider/Crawler 🕷️ - Descoberta automática de:
- URLs e endpoints
- Formulários e seus campos
- Estrutura do site (sitemap)
- Parâmetros de query strings
- ✅ Comparador de Requisições 🔀 - Comparação lado a lado:
- Diff visual de requisições e respostas
- Highlighting automático de diferenças
- Útil para encontrar tokens CSRF e mudanças sutis
- Algoritmo inteligente usando difflib
- ✅ Histórico de requisições com filtros avançados
- ✅ Visualização detalhada de Request/Response
- ✅ Filtros por método HTTP e regex de domínio
- ✅ Interface de Linha de Comando (CLI) para gerenciamento de regras e execução headless
- ⏳ Sequencer 📊 - Análise de entropia em tokens/sessões
- ⏳ Session Handler 🔄 - Macros de autenticação e auto-reautenticação (renovar tokens expirados)
- ⏳ CORS Checker 🌐 - Teste de misconfigurações CORS
- ⏳ GraphQL Scanner 📈 - Introspecção + fuzzing GraphQL
- ⏳ Importador de APIs 🧩 - OpenAPI/Swagger/Postman/GraphQL para gerar endpoints e payloads
- ⏳ Teste de Autorização 🔐 - IDOR/BOLA com comparação de respostas entre perfis
- ⏳ Param Miner 🧭 - Hidden params, content discovery, dirs, vhosts e arquivos de backup
- ⏳ Scanner OAST 🛰️ - SSRF/Blind XSS/XXE usando o OAST
- ⏳ Subdomain Enumerator 🔍 - Descoberta de subdomínios
- ⏳ WAF Detector 🛡️ - Identificação e tentativas de bypass de WAFs
- ⏳ Notes/Report 📝 - Anotações durante o pentest + exportação de relatório
- ⏳ Scope Manager 🎯 - Definir escopo (in-scope/out-of-scope) para filtrar tráfego
Para usar recursos que dependem do Tor, instale e inicie o serviço:
Linux:
sudo apt install tor
sudo systemctl start torWindows:
choco install tor
Start-Process torO proxy SOCKS5 ficará disponível em 127.0.0.1:9050.
- Python 3.7 ou superior
- pip (gerenciador de pacotes Python)
- Clone o repositório:
git clone https://github.com/pwviptbl/ProxyHunter.git
cd ProxyHunter- Instale as dependências:
pip install -r config/requirements.txtPara isolar as dependências do projeto, é recomendado usar um ambiente virtual.
- Criar o ambiente virtual:
python -m venv .venv- Ativar o ambiente virtual:
- No Windows:
.venv\Scripts\activate- No Linux/Mac:
source .venv/bin/activate- Para desativar:
deactivate💡 Lembre-se de ativar o ambiente virtual antes de instalar as dependências e executar o projeto.
Para criar um executável standalone com ícone personalizado que pode ser distribuído sem instalar Python:
- Instale o PyInstaller:
pip install pyinstaller-
Execute o comando de build (adapte conforme seu sistema operacional):
Windows:
.venv\Scripts\activate pyinstaller --onefile --windowed --icon=imagens/icone_sfundo.png --paths=. --exclude PyQt5 --add-data "imagens/icone_sfundo.png;imagens/" --add-data "imagens/Principal.png;imagens/" scripts/pyside_proxy.py
Linux/Mac:
source .venv/bin/activate pyinstaller --onefile --windowed --icon=imagens/icone_sfundo.png --paths=. --exclude PyQt5 --add-data "imagens/icone_sfundo.png:imagens/" --add-data "imagens/Principal.png:imagens/" scripts/pyside_proxy.py
-
O executável será gerado em
dist/:- Windows:
dist/pyside_proxy.exe - Linux/Mac:
dist/pyside_proxy(arquivo binário sem extensão)
- Windows:
💡 Nota: O executável inclui uma tela de loading (splash screen) compacta com a imagem
Principal.pngque aparece por 3 segundos durante o carregamento da aplicação.💡 Nota: O executável é autocontido e pode ser movido/copiado para qualquer local ou computador compatível sem precisar do ambiente Python original.
💡 Nota para Linux: O ícone na barra de tarefas depende do desktop environment (GNOME, KDE, etc.) e pode não aparecer exatamente como no Windows, mas a aplicação funcionará normalmente.
Execute o script de instalação que criará o ambiente virtual e instalará as dependências automaticamente:
- Windows: Clique duas vezes em
ProxyHunter-GUI.batou execute no terminal:
ProxyHunter-GUI.bat- Linux/Mac: Execute no terminal:
chmod +x ProxyHunter-GUI.sh
./ProxyHunter-GUI.shO script irá:
- Criar um ambiente virtual (se não existir)
- Instalar as dependências necessárias
- Iniciar a interface gráfica PySide6
💡 Dica: Nas execuções subsequentes, o script detectará o ambiente virtual existente e apenas iniciará a aplicação.
Na interface gráfica, vá para a aba "Regras de Interceptação":
- Host/Domínio: Digite o domínio a ser interceptado (ex:
exemplo.com) - Caminho: Digite o caminho da rota (ex:
/contato) - Nome do Parâmetro: Digite o nome do parâmetro a ser modificado (ex:
Titulo) - Novo Valor: Digite o valor que substituirá o original (ex:
teste1) - Clique em "Adicionar Regra"
Na aba "Histórico de Requisições":
- Filtros: Use os filtros para encontrar requisições específicas
- Filtrar por método (GET, POST, etc.)
- Filtrar por domínio usando regex (ex:
google.com|facebook.com)
- Lista: Veja todas as requisições capturadas com host, data, hora, método e status
- Detalhes: Clique em uma requisição para ver detalhes completos
- Aba "Request": Headers e body da requisição
- Aba "Response": Status, headers e body da resposta
Para mais informações sobre o histórico, veja docs/HISTORY_GUIDE.md
Por padrão, o proxy escuta na porta 9507, mas você pode configurar qualquer porta entre 1 e 65535.
- No frame "Controle do Proxy" (parte superior da janela):
- Veja o campo "Porta" com o valor atual
- Digite a nova porta desejada
- Clique em "Salvar Porta"
- Importante: O proxy deve estar parado para alterar a porta
- A configuração é salva automaticamente e será usada na próxima execução
# Ver a porta configurada
python cli.py get-port
# Definir uma nova porta
python cli.py set-port 9090
# Iniciar o proxy com a porta configurada
python cli.py run
# Ou iniciar com uma porta específica (temporária)
python cli.py run --port 9090💡 Dica: Ao alterar a porta, lembre-se de atualizar também as configurações do seu navegador para usar a nova porta.
Na aba "Intercept Manual", você pode pausar requisições e modificá-las manualmente antes de enviá-las:
-
Ativar Intercept:
- Clique no botão "Intercept is OFF" para ativar
- O botão ficará verde: "Intercept is ON"
-
Interceptar Requisição:
- Quando uma requisição for feita, ela aparecerá na aba
- Você verá: Método, URL, Headers e Body
-
Modificar Requisição:
- Edite os headers no campo "Headers"
- Edite o body no campo "Body"
-
Tomar Ação:
- Forward: Envia a requisição (com suas modificações)
- Drop: Cancela a requisição (não envia ao servidor)
-
Desativar Intercept:
- Clique em "Intercept is ON" para desativar
- As requisições voltarão a passar normalmente
💡 Dica: Esta funcionalidade é inspirada no Burp Suite e é ideal para testes manuais de segurança e análise de requisições.
Para mais informações sobre o Intercept Manual, veja docs/INTERCEPT_MANUAL_FEATURE.md
Na aba "💥 Intruder", você pode realizar ataques automatizados com múltiplas requisições:
-
Marcar Posições de Payload:
- Use
§...§para marcar onde inserir payloads - Exemplo:
GET /login?user=§admin§&pass=§123§ - Selecione texto e clique "📋 Marcar Posições" para facilitar
- Use
-
Escolher Tipo de Ataque:
- Sniper: Testa cada posição individualmente (fuzzing)
- Battering Ram: Mesmo payload em todas as posições
- Pitchfork: Combina sets em paralelo (credenciais)
- Cluster Bomb: Todas as combinações possíveis (brute-force)
-
Configurar Payloads:
- Payload Set 1: Arquivo .txt com payloads (obrigatório)
- Payload Set 2: Arquivo .txt adicional (para Pitchfork/Cluster Bomb)
-
Processamento (opcional):
- ✓ URL Encode, Base64, MD5 Hash
- Prefix/Suffix para adicionar texto aos payloads
-
Grep Extraction (opcional):
- Use regex para extrair dados das respostas
- Exemplo:
token=([a-zA-Z0-9]+)para capturar tokens
-
Iniciar Ataque:
- Ajuste threads (padrão: 10)
- Clique "▶ Iniciar Ataque"
- Monitore resultados em tempo real
Exemplo de Uso - Brute Force:
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=§admin§&password=§password§
Com Pitchfork e dois arquivos (users.txt e passwords.txt), você testa combinações específicas.
💡 Dica: O Intruder é poderoso! Use com responsabilidade e apenas em ambientes autorizados.
Para mais informações detalhadas, veja docs/INTRUDER_GUIDE.md
Na aba "🕷️ Spider/Crawler", você pode descobrir automaticamente páginas, endpoints e formulários:
-
Iniciar o Proxy:
- Primeiro, certifique-se de que o proxy está em execução
-
Configurar o Spider:
- URL Inicial: Digite a URL base do site a mapear (ex:
http://exemplo.com) - Profundidade Máxima: Número de níveis de links a seguir (padrão: 3)
- Máximo de URLs: Limite de URLs a descobrir (padrão: 1000)
- URL Inicial: Digite a URL base do site a mapear (ex:
-
Iniciar Spider:
- Clique em "▶ Iniciar Spider"
- O spider começará a descobrir automaticamente quando você navegar no site
-
Navegar no Site:
- Use seu navegador normalmente
- O spider analisará automaticamente as respostas HTML
- Links, formulários e endpoints serão descobertos
-
Visualizar Descobertas:
- URLs Descobertas: Lista de todas as URLs encontradas
- Formulários: Tabela com formulários, métodos e campos de entrada
- Sitemap: Estrutura do site organizada por host e paths
-
Exportar:
- Use o botão "💾 Exportar" para salvar o sitemap em arquivo
- Use "📋 Copiar Todas" para copiar as URLs para a área de transferência
-
Parar Spider:
- Clique em "⏹ Parar Spider" quando terminar
- Use "🗑 Limpar Dados" para resetar os resultados
💡 Dica: O Spider funciona passivamente analisando as respostas do proxy. Quanto mais você navegar pelo site, mais completo será o mapeamento!
Na aba "Scanner 🔐", você pode executar scans ativos em requisições específicas:
-
Scanner Passivo (Automático):
- Funciona automaticamente em todas as requisições
- Analisa respostas HTTP em busca de padrões conhecidos
- Detecta: SQL Injection (erros), XSS, CSRF, Path Traversal, CVEs, informações sensíveis
-
Scanner Ativo (Manual):
- Testa ativamente enviando payloads específicos
- Como usar:
- Vá para a aba "Histórico de Requisições"
- Selecione uma requisição para testar
- Volte para a aba "Scanner 🔐"
- Clique em "🔍 Scan Ativo"
- Aguarde a conclusão do scan
- Visualize as vulnerabilidades encontradas na lista
-
Tipos de Vulnerabilidades Detectadas pelo Scanner Ativo:
- SQL Injection:
- Error-Based: Detecta erros SQL na resposta
- Boolean-Based: Compara respostas TRUE vs FALSE
- Time-Based: Detecta delays (SLEEP, WAITFOR)
- XSS Refletido: Verifica se payloads são refletidos na resposta
- Command Injection: Testa execução de comandos do sistema
- SQL Injection:
-
Visualizar Resultados:
- Vulnerabilidades aparecem na lista com severidade (Critical/High/Medium/Low)
- Clique em uma vulnerabilidade para ver detalhes completos
- Use filtros para organizar por severidade ou tipo
⚠️ Aviso Importante: O Scanner Ativo envia múltiplas requisições com payloads de teste. Use APENAS em:
- ✅ Seus próprios sistemas ou aplicações
- ✅ Ambientes de teste autorizados
- ✅ Com permissão explícita
NÃO use em sistemas de terceiros sem autorização!
Clique no botão "Iniciar Proxy". O servidor será iniciado na porta configurada (padrão: 9507).
Configure seu navegador para usar o proxy:
- Host/IP:
localhostou127.0.0.1 - Porta: A porta configurada (padrão:
9507)
💡 Para interceptar tráfego HTTPS é obrigatório instalar o certificado raiz do mitmproxy. Com o proxy em execução, acesse
http://mitm.it, baixe o certificado para o seu sistema/navegador e instale-o na lista de autoridades confiáveis. Reinicie o navegador depois dessa etapa.
- Configurações → Geral → Configurações de Rede
- Configurar Proxy Manualmente
- HTTP Proxy:
localhost, Porta: a porta configurada (ex:9507) - Marcar "Usar este proxy para todos os protocolos"
Use as configurações de sistema ou extensões como "Proxy SwitchyOmega"
Navegue normalmente. Quando acessar uma URL que corresponda às regras configuradas, os parâmetros serão automaticamente substituídos.
A aplicação também pode ser controlada via terminal usando scripts/cli.py.
python scripts/cli.py listpython scripts/cli.py add --host exemplo.com --path /login --param user --value adminUse o índice (o número # da lista) para remover.
python scripts/cli.py remove 1Use o índice para ativar ou desativar.
python scripts/cli.py toggle 1# Ver a porta atual
python scripts/cli.py get-port
# Definir uma nova porta
python scripts/cli.py set-port 9090# Inicia com a porta configurada
python scripts/cli.py run
# Ou especifica uma porta temporária
python scripts/cli.py run --port 9090Para automatizar testes de carga ou fuzzing, use o comando send. Crie um arquivo lista.txt com um valor por linha.
# Exemplo de conteúdo para lista.txt
valor1
valor2
valor3python scripts/cli.py send --url http://exemplo.com/api --file lista.txt --param userID --threads 10Este comando enviará requisições para http://exemplo.com/api?userID=valor1, .../api?userID=valor2, etc., usando 10 threads simultâneas.
Para ajudar a decidir o número de threads, use o comando info.
python scripts/cli.py infoConfiguração:
- Host:
exemplo.com - Caminho:
/contato - Parâmetro:
Titulo - Valor:
teste1
Comportamento:
Quando você acessar exemplo.com/contato?Titulo=original&Nome=João, o proxy irá modificar para:
exemplo.com/contato?Titulo=teste1&Nome=João
O parâmetro Titulo é substituído por teste1, mas o parâmetro Nome permanece com seu valor original.
ProxyHunter/
├── scripts/ # Scripts executáveis
│ ├── cli.py # Ponto de entrada para a CLI
│ └── pyside_proxy.py # Ponto de entrada para a GUI PySide6
├── ProxyHunter-GUI.sh # Script de instalação para Linux/Mac
├── ProxyHunter-GUI.bat # Script de instalação para Windows
├── src/ # Código fonte
│ ├── core/ # Lógica principal do proxy
│ └── ui/ # Interface gráfica
├── config/ # Arquivos de configuração
│ ├── requirements.txt # Dependências
│ └── intercept_config.example.json # Configuração de exemplo
├── docs/ # Documentação
├── examples/ # Exemplos de uso
├── test/ # Testes
└── README.md
- Adicionar Regra: Preencha os campos e clique em "Adicionar Regra"
- Remover Regra: Selecione uma regra na lista e clique em "Remover Regra Selecionada"
- Ativar/Desativar: Selecione uma regra e clique em "Ativar/Desativar Regra"
- Python 3: Linguagem de programação
- PySide6: Interface gráfica moderna
- mitmproxy: Servidor proxy HTTP/HTTPS com capacidade de interceptação
- JSON: Armazenamento de configurações
- O proxy intercepta apenas requisições HTTP. Para HTTPS, você precisará instalar o certificado CA do mitmproxy no navegador
- As configurações (regras e porta) são salvas automaticamente no arquivo
intercept_config.json - O proxy mantém todos os parâmetros não configurados com seus valores originais
- A porta padrão é 9507, mas pode ser alterada a qualquer momento via interface ou CLI
- NOVO: A atividade do proxy (regras aplicadas, erros) é registrada no arquivo
proxy.logpara facilitar a depuração.
Se precisar interceptar HTTPS, instale o certificado do mitmproxy:
- Com o proxy rodando, acesse: http://mitm.it
- Siga as instruções para instalar o certificado no seu sistema
- Reinicie o navegador para que ele reconheça a nova autoridade
Se a porta padrão (9507) ou a porta configurada já estiver em uso, você tem algumas opções:
Opção 1 - Alterar a Porta via Interface Gráfica:
- Certifique-se de que o proxy está parado
- No frame "Controle do Proxy", altere o valor no campo "Porta"
- Clique em "Salvar Porta"
- Inicie o proxy novamente
Opção 2 - Alterar a Porta via CLI:
python cli.py set-port 9090
python cli.py runOpção 3 - Usar Porta Temporária (CLI):
# Usa a porta 9090 apenas para esta execução
python cli.py run --port 9090Este projeto é licenciado sob a licença Non-Commercial (custom). Veja LICENSE.
