
Uma maneira um pouco menos hackish de interceptar e modificar protocolos não-HTTP através do Burp e outros.
Uma forma um pouco menos 'hackish' de interceptar e modificar protocolos não HTTP por meio do Burp e outros com suporte a interceptação SSL e TLS. Esta ferramenta é para pesquisadores e testadores de penetração de aplicações que realizam avaliações de segurança de clientes thick.
Uma versão melhorada do fantástico projeto mitm_relay.
Como parte do nosso trabalho no departamento de pesquisa da CyberArk Labs, precisávamos de uma forma de inspecionar a comunicação SSL e TLS sobre TCP e ter a opção de modificar o conteúdo dos pacotes em tempo real. Existem muitas formas de fazer isso (por exemplo, a conhecida extensão do Burp Suite NoPE), mas nenhuma delas funcionou para nós em alguns casos. No final, encontramos o mitm_relay.
mitm_relay é uma forma rápida e fácil de realizar MITM de qualquer protocolo baseado em TCP através de softwares de interceptação HTTP existentes, como o proxy do Burp Suite. É particularmente útil para avaliações de segurança de clientes thick. Mas não funcionou completamente para nós, então precisamos personalizá-lo. Após muitas personalizações, cada nova alteração exigia muito trabalho, e acabamos reescrevendo tudo de uma forma mais modular.
Esperamos que outros achem este script útil, e esperamos que adicionar funcionalidades seja fácil.
Para começar, os endereços e portas dos listeners precisam ser configurados. Para cada listener, também precisa ser configurado um alvo (endereço e porta). Cada dado recebido do listener será encapsulado no corpo de uma requisição HTTP POST com a URL contendo 'CLIENT_REQUEST'. Cada dado recebido do alvo será encapsulado no corpo de uma requisição HTTP POST com a URL contendo 'SERVER_RESPONSE'. Essas requisições são enviadas para um servidor de interceptação HTTP local.
Há a opção de configurar um proxy HTTP e usar uma ferramenta como o burp suite como ferramenta de interceptação HTTP e visualizar as mensagens lá. Dessa forma, é fácil modificar as mensagens usando 'Match and Replace' do Burp, extensões ou até mesmo manualmente (Lembre-se, o mecanismo de timeout do protocolo interceptado pode ser muito curto).
Outra forma de modificar as mensagens é usando um script Python que o servidor de interceptação HTTP executará quando receber mensagens.
O corpo das mensagens enviadas ao servidor de interceptação HTTP será impresso no shell. As mensagens serão impressas após as alterações se o script de modificação for fornecido. Após todas as modificações, o servidor de interceptação também ecoará de volta como corpo da resposta HTTP.
Para descriptografar a comunicação SSL/TLS, o mitm_intercept precisa receber um certificado e uma chave que o cliente aceitará ao iniciar um handshake com o listener. Se o servidor alvo exigir um certificado específico para handshake, há a opção de fornecer um certificado e uma chave.
Um pequeno gráfico para mostrar o fluxo de tráfego típico:

mitm_intercept é compatível com versões mais recentes do Python 3 (Python 3.9) e também é compatível com Windows (por exemplo, socket.MSG_DONTWAIT não existe no Windows). Mantivemos a opção de usar 'STARTTLS', e a chamamos de modo 'Mixed'. O uso do arquivo de log de chaves SSL foi atualizado (a opção embutida para usá-lo é nova desde Python 3.8), e adicionamos a opção de alterar o cabeçalho SNI. Agora, o gerenciamento da comunicação de entrada e saída é feito por socketserver, e todos os dados são enviados para uma subclasse de ThreadingHTTPServer que lida com a representação e modificação dos dados. Dessa forma, é possível ver as alterações aplicadas pelo script de modificação na resposta (conveniente para usar Burp). Além disso, agora podemos alterar as cifras disponíveis que o script usa usando o formato de lista de cifras OpenSSL.
$ python -m pip install requestsusage: mitm_intercept.py [-h] [-m] -l [u|t:]<interface>:<port> [[u|t:]<interface>:<port> ...] -t
[u|t:]<addr>:<port> [[u|t:]<addr>:<port> ...] [-lc <cert_path>]
[-lk <key_path>] [-tc <cert_path>] [-tk <key_path>] [-w <interface>:<port>]
[-p <addr>:<port>] [-s <script_path>] [--sni <server_name>]
[-tv <defualt|tls12|tls11|ssl3|tls1|ssl2>] [-ci <ciphers>]
mitm_intercept version 1.6