Share
## https://sploitus.com/exploit?id=CDC1E468-32FA-5909-95D2-5845D9527518
# ProxyHunter

Intercepta requisições HTTP para um determinado domínio e altera parâmetros específicos antes de enviar a requisição.

## Descriçã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.

## Funcionalidades

- ✅ 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
- ✅ **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

## Instalação

### Pré-requisitos

- Python 3.7 ou superior
- pip (gerenciador de pacotes Python)

### Passos

1. Clone o repositório:
```bash
git clone https://github.com/pwviptbl/ProxyHunter.git
cd ProxyHunter
```

2. Instale as dependências:
```bash
pip install -r config/requirements.txt
```

### Ambiente Virtual

Para isolar as dependências do projeto, é recomendado usar um ambiente virtual.

1. Criar o ambiente virtual:
```bash
python -m venv .venv
```

2. Ativar o ambiente virtual:
   - No Windows:
```bash
.venv\Scripts\activate
```
   - No Linux/Mac:
```bash
source .venv/bin/activate
```

3. Para desativar:
```bash
deactivate
```

> 💡 Lembre-se de ativar o ambiente virtual antes de instalar as dependências e executar o projeto.

## Uso

### 1. Iniciar a Aplicação

Execute o script de instalação que criará o ambiente virtual e instalará as dependências automaticamente:

- **Windows**: Clique duas vezes em `ProxyHunter-GUI.bat` ou execute no terminal:
```cmd
ProxyHunter-GUI.bat
```

- **Linux/Mac**: Execute no terminal:
```bash
./ProxyHunter-GUI.sh
```

O script irá:
1. Criar um ambiente virtual (se não existir)
2. Instalar as dependências necessárias
3. Iniciar a interface gráfica PySide6

> 💡 **Dica**: Nas execuções subsequentes, o script detectará o ambiente virtual existente e apenas iniciará a aplicação.

### 2. Configurar Regras de Interceptação

Na interface gráfica, vá para a aba **"Regras de Interceptação"**:

1. **Host/Domínio**: Digite o domínio a ser interceptado (ex: `exemplo.com`)
2. **Caminho**: Digite o caminho da rota (ex: `/contato`)
3. **Nome do Parâmetro**: Digite o nome do parâmetro a ser modificado (ex: `Titulo`)
4. **Novo Valor**: Digite o valor que substituirá o original (ex: `teste1`)
5. Clique em **"Adicionar Regra"**

### 3. Visualizar Histórico de Requisições

Na aba **"Histórico de Requisições"**:

1. **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`)
2. **Lista**: Veja todas as requisições capturadas com host, data, hora, método e status
3. **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](docs/HISTORY_GUIDE.md)

### 3.0. Configurar a Porta do Proxy

Por padrão, o proxy escuta na porta 9507, mas você pode configurar qualquer porta entre 1 e 65535.

#### Via Interface Gráfica:

1. 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"**
2. **Importante**: O proxy deve estar parado para alterar a porta
3. A configuração é salva automaticamente e será usada na próxima execução

#### Via Linha de Comando:

```bash
# 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.

### 3.1. Intercept Manual (Forward/Drop)

Na aba **"Intercept Manual"**, você pode pausar requisições e modificá-las manualmente antes de enviá-las:

1. **Ativar Intercept**: 
   - Clique no botão "Intercept is OFF" para ativar
   - O botão ficará verde: "Intercept is ON"
   
2. **Interceptar Requisição**:
   - Quando uma requisição for feita, ela aparecerá na aba
   - Você verá: Método, URL, Headers e Body
   
3. **Modificar Requisição**:
   - Edite os headers no campo "Headers"
   - Edite o body no campo "Body"
   
4. **Tomar Ação**:
   - **Forward**: Envia a requisição (com suas modificações)
   - **Drop**: Cancela a requisição (não envia ao servidor)

5. **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](docs/INTERCEPT_MANUAL_FEATURE.md)

### 3.1.5. Intruder Avançado (Ataques Automatizados) 💥

Na aba **"💥 Intruder"**, você pode realizar ataques automatizados com múltiplas requisições:

1. **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

2. **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)

3. **Configurar Payloads**:
   - **Payload Set 1**: Arquivo .txt com payloads (obrigatório)
   - **Payload Set 2**: Arquivo .txt adicional (para Pitchfork/Cluster Bomb)

4. **Processamento** (opcional):
   - ✓ URL Encode, Base64, MD5 Hash
   - Prefix/Suffix para adicionar texto aos payloads

5. **Grep Extraction** (opcional):
   - Use regex para extrair dados das respostas
   - Exemplo: `token=([a-zA-Z0-9]+)` para capturar tokens

6. **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](docs/INTRUDER_GUIDE.md)

### 3.2. Spider/Crawler (Descoberta Automática)

Na aba **"🕷️ Spider/Crawler"**, você pode descobrir automaticamente páginas, endpoints e formulários:

1. **Iniciar o Proxy**: 
   - Primeiro, certifique-se de que o proxy está em execução
   
2. **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)
   
3. **Iniciar Spider**:
   - Clique em "▶ Iniciar Spider"
   - O spider começará a descobrir automaticamente quando você navegar no site
   
4. **Navegar no Site**:
   - Use seu navegador normalmente
   - O spider analisará automaticamente as respostas HTML
   - Links, formulários e endpoints serão descobertos
   
5. **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
   
6. **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
   
7. **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!

### 3.3. Scanner Ativo (Detecção Avançada de Vulnerabilidades)

Na aba **"Scanner 🔐"**, você pode executar scans ativos em requisições específicas:

1. **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
   
2. **Scanner Ativo (Manual)**:
   - Testa ativamente enviando payloads específicos
   - **Como usar**:
     1. Vá para a aba "Histórico de Requisições"
     2. Selecione uma requisição para testar
     3. Volte para a aba "Scanner 🔐"
     4. Clique em "🔍 Scan Ativo"
     5. Aguarde a conclusão do scan
     6. Visualize as vulnerabilidades encontradas na lista

3. **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
   
4. **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!

### 4. Iniciar o Proxy

Clique no botão **"Iniciar Proxy"**. O servidor será iniciado na porta configurada (padrão: 9507).

### 5. Configurar o Navegador

Configure seu navegador para usar o proxy:

- **Host/IP**: `localhost` ou `127.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.

#### Exemplo no Firefox:
1. Configurações → Geral → Configurações de Rede
2. Configurar Proxy Manualmente
3. HTTP Proxy: `localhost`, Porta: a porta configurada (ex: `9507`)
4. Marcar "Usar este proxy para todos os protocolos"

#### Exemplo no Chrome:
Use as configurações de sistema ou extensões como "Proxy SwitchyOmega"

### 6. Navegação

Navegue normalmente. Quando acessar uma URL que corresponda às regras configuradas, os parâmetros serão automaticamente substituídos.

### Uso via Linha de Comando (CLI)

A aplicação também pode ser controlada via terminal usando `scripts/cli.py`.

#### Listar Regras
```bash
python scripts/cli.py list
```

#### Adicionar uma Regra
```bash
python scripts/cli.py add --host exemplo.com --path /login --param user --value admin
```

#### Remover uma Regra
Use o índice (o número # da lista) para remover.
```bash
python scripts/cli.py remove 1
```

#### Ativar/Desativar uma Regra
Use o índice para ativar ou desativar.
```bash
python scripts/cli.py toggle 1
```

#### Configurar a Porta
```bash
# Ver a porta atual
python scripts/cli.py get-port

# Definir uma nova porta
python scripts/cli.py set-port 9090
```

#### Iniciar o Proxy (Headless)
```bash
# Inicia com a porta configurada
python scripts/cli.py run

# Ou especifica uma porta temporária
python scripts/cli.py run --port 9090
```

#### Enviar Requisições em Massa (Sender)
Para automatizar testes de carga ou fuzzing, use o comando `send`. Crie um arquivo `lista.txt` com um valor por linha.

```bash
# Exemplo de conteúdo para lista.txt
valor1
valor2
valor3
```

```bash
python scripts/cli.py send --url http://exemplo.com/api --file lista.txt --param userID --threads 10
```
Este comando enviará requisições para `http://exemplo.com/api?userID=valor1`, `.../api?userID=valor2`, etc., usando 10 threads simultâneas.

#### Obter Informações do Sistema
Para ajudar a decidir o número de threads, use o comando `info`.
```bash
python scripts/cli.py info
```

## Exemplo de Uso

**Configuraçã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.

## Estrutura de Arquivos

```
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
```

## Gerenciamento de Regras

- **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"

## Tecnologias Utilizadas

- **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

## Observaçõ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.log` para facilitar a depuração.

## Solução de Problemas

### Certificado HTTPS
Se precisar interceptar HTTPS, instale o certificado do mitmproxy:
1. Com o proxy rodando, acesse: http://mitm.it
2. Siga as instruções para instalar o certificado no seu sistema
3. Reinicie o navegador para que ele reconheça a nova autoridade

### Porta já em uso
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:**
1. Certifique-se de que o proxy está parado
2. No frame "Controle do Proxy", altere o valor no campo "Porta"
3. Clique em "Salvar Porta"
4. Inicie o proxy novamente

**Opção 2 - Alterar a Porta via CLI:**
```bash
python cli.py set-port 9090
python cli.py run
```

**Opção 3 - Usar Porta Temporária (CLI):**
```bash
# Usa a porta 9090 apenas para esta execução
python cli.py run --port 9090
```

## Licença

Este projeto é de código aberto.