MITMPROXY: Proxy para analise HTTP

Saudações. Instruções de como instalar e usar o MITMPROXY para analise de requisições HTTP, principalmente para auxilio no desenvolvimento de sistemas, testes de WebHooks, analise de aplicativos.

Pré-requisitos (consta em outros artigos aqui do blog):

  • Instalação do Linux (Debian, Alpine) e programas básicos;
  • Instalar o Docker ou Podman;
  • Proxy-Reverso Traefik para HTTPs com LetsEncrypt;
  • Instale os programas Docker e Traefik do artigo:

1 – Apresentando o MITMPROXY

O MITMPROXY é um sistema desenvolvido em Python3 que auxilia no desenvolvimento de aplicações que fazem uso do protocolo HTTP.

Criado para ser uma ferramenta hacker, ele permite interceptar, redirecionar e repetir requisições HTTP.

Seus principais recursos:

  • Administração web – Possui dashboard e painel de controle acessível pelo navegador para controlar e assistir o tráfego HTTP;
  • Proxy-Reverso – Atua como servidor HTTP e encaminha as requisições recebidas para um servidor interno;
  • Proxy-Transparente – Quando colocado como gateway do acesso à Internet, ele pode interceptar o tráfego e buscar os sites solicitados pelos clientes;
  • Captura inteligente – Permite criar filtros específicos para protocolos e detalhes da requisição;

Para desenvolvimento de sistemas web, automações e integração com inteligência artificial, usaremos o MITMPROXY para investigar o funcionamento de nossos sistemas.

2 – MITMPROXY como WebHook reverso

Nesse exemplo, nosso MITMPROXY vai atuar como proxy-reverso para uma WebHook oficial do N8N.

Nessa topologia, poderemos fornecer a URL dele a sistemas externos, ele irá receber, registrar todos os detalhes da requisição e encaminhar ao N8N (container n8n porta 5678).

O acesso a administração está protegido por senha, altere a senha por segurança.

Bash
# Variaveis
NAME="mitmproxy-webhook";
DOMAIN=$(hostname -f);
IMAGE="mitmproxy/mitmproxy:latest";

FQDN_ADMIN="mitmproxy.$DOMAIN";
FQDN_MITM="webhooks.$DOMAIN";

# Senha de acesso administrativo
PASSWORD="tulipa";

# Diretorio de dados persistentes:
DATADIR=/storage/$NAME;
mkdir -p $DATADIR;

# Renovar/rodar:
docker pull $IMAGE;
docker rm -f $NAME 2>/dev/null;
docker run \
    -d --restart=always --name $NAME -h $NAME.intranet.br \
    --network network_public --ip=10.249.255.241 \
    \
    -v $DATADIR:/home/mitmproxy \
    -p 29080:8080 \
    -p 29081:8081 \
    \
    --label "traefik.enable=true" \
    \
    --label "traefik.http.routers.${NAME}-web.rule=Host(\`$FQDN_ADMIN\`)" \
    --label "traefik.http.routers.${NAME}-web.entrypoints=web,websecure" \
    --label "traefik.http.routers.${NAME}-web.tls=true" \
    --label "traefik.http.routers.${NAME}-web.tls.certresolver=letsencrypt" \
    --label "traefik.http.routers.${NAME}-web.service=${NAME}-web" \
    --label "traefik.http.services.${NAME}-web.loadbalancer.server.port=8081" \
    --label "traefik.http.services.${NAME}-web.loadbalancer.passHostHeader=true" \
    \
    --label "traefik.http.routers.${NAME}-mitm.rule=Host(\`$FQDN_MITM\`)" \
    --label "traefik.http.routers.${NAME}-mitm.entrypoints=web,websecure" \
    --label "traefik.http.routers.${NAME}-mitm.tls=true" \
    --label "traefik.http.routers.${NAME}-mitm.tls.certresolver=letsencrypt" \
    --label "traefik.http.routers.${NAME}-mitm.service=${NAME}-mitm" \
    --label "traefik.http.services.${NAME}-mitm.loadbalancer.server.port=8080" \
    --label "traefik.http.services.${NAME}-mitm.loadbalancer.passHostHeader=true" \
    \
    $IMAGE \
        mitmweb \
            --web-host 0.0.0.0 \
            --web-port 8081 \
            --set web_password=tulipa \
            --mode reverse:http://n8n:5678;

# Acesso:
    echo;
    echo "Acesso MITMPROXY:";
    echo "   WebAdmin.....: $FQDN_MITM";
    echo "   Webhook......: $FQDN_ADMIN";
    echo;

Agora acesse a administração (WebAdmin) na porta HTTP 8081 ou pelo nome registrado no Traefik ($FQDN_ADMIN acima).

3 – Assistindo os acessos

Na guia “Flow” você poderá assistir em tempo real as requisições!

Testando uma WebHook do N8N:

Bash
# Acionando WebHook:
# - Coloque a URL da sua Webhook aqui e substitua o nome FQDN (DNS)
#   pela URL do MITMPROXY
WEBHOOK_URL="https://webhooks.SEU-DOMINIO.com/webhook/ws01";

# - Acione a URL:
curl -qs "$WEBHOOK_URL";

Terminamos por hoje!

Patrick Brandão, patrickbrandao@gmail.com