
Browser-in-the-Middle (BitM) Armado para Testadores de Penetração

Navegador-no-meio (BitM) multi-usuário armado para testadores de penetração. Este ataque pode ser usado para contornar a autenticação multifator em muitas aplicações web de alto valor. Funciona até mesmo para aplicações que não utilizam tokens de sessão e, portanto, não seriam exploráveis usando ataques tradicionais de roubo de tokens. Esta é uma ferramenta de engenharia social e não explora nenhuma falha técnica no serviço alvo.
Esta ferramenta é um servidor web especializado. Foi projetada para ser executada em um servidor Linux Debian 11 (Bullseye) e depende de informações de IP público para proteger a funcionalidade de administração. Não espere conseguir testar localmente sem enfrentar grandes dificuldades.
Aviso: Chromium não é suportado em ARM. Embora seja tecnicamente possível forçar o uso de um binário Chromium ARM, você perderá todos os recursos/proteções adicionais do puppeteer-extra.
Esta configuração de exemplo utiliza o Caddy para lidar com TLS, SNI e adicionar alguns cabeçalhos personalizados, como 'X-Real-IP', a cada requisição. Você não precisa usar o Caddy com o Cuddlephish, pois o mesmo proxy reverso pode ser configurado usando Nginx, Apache, etc. Eu gosto do Caddy porque é fácil de instalar com Docker e tem plugins para gerenciar certificados Letsencrypt para a maioria dos registradores de domínio. O Caddyfile de exemplo mostra como configurá-lo para Gandi. Consulte a documentação do seu registrador.
Instale Docker, Node, XVFB e algumas outras dependências:
git clone https://github.com/fkasler/cuddlephish
cd cuddlephish
sudo bash install_deps.sh
Você pode então usar o Docker para construir o Caddy com um plugin de certificado curinga para seu registrador. O exemplo é para Gandi. Consulte a documentação aqui e a lista de módulos de provedores DNS aqui. Você pode modificar o Dockerfile para seu registrador antes de construir:
sudo docker build -t caddy .
Agora modifique o Caddyfile para trocar seu domínio e a chave de API do Gandi (ou outro registrador) e inicie o Caddy. Recomendo iniciar isso em uma janela screen ou tmux para que você possa executar o servidor Node em outra janela em breve:
sudo docker run -p 80:80 -p 443:443 -p 2019:2019 -v $PWD/Caddyfile:/etc/caddy/Caddyfile --network=host caddy:latest
Com o Caddy lidando com o tráfego para nós nas portas 80 e 443, podemos finalmente executar a ferramenta!
Instale as dependências do Node:
npm install
Alguns ajustes de configuração: PASSO CRÍTICO: Certifique-se de modificar o config.json de exemplo para adicionar seu(s) IP(s) público(s) aprovado(s) para acesso de administrador. Essa lista de permissões de IPs é o que dita o acesso à interface web "/admin". Você também deve alterar a chave de socket padrão para algo mais seguro.
A ferramenta não está configurada para atacar nenhum login por padrão, então você precisará adicionar alguns. Há um script 'add_target.js' para facilitar essa etapa. Basta executar o script e colar a URL do portal de login que você deseja segmentar quando solicitado:
node add_target.js
Isso capturará o nome do serviço, o título da aba e o favicon para você e adicionará uma entrada em 'targets.json'. Você pode executar este script várias vezes e ele adicionará seus novos alvos. O script nomeará cada serviço com base no domínio, sem o nível superior. Então, para 'https://www.example.com/login.php', o serviço seria apenas 'example' ao especificar seu alvo quando você...
Execute-o!
node index.js example
Após alguns segundos, você deve ver uma mensagem no console quando sua primeira instância automatizada do Chrome fizer check-in via websockets. Agora, os visitantes do seu site de phishing devem ver o que parece ser a página de login alvo, mas na verdade é um feed de vídeo da sua instância automatizada do navegador. Eles também podem interagir com sua instância do navegador e fazer login para você.
Se você configurou corretamente seu(s) IP(s) de administrador no config.json, você deve conseguir visualizar uma interface web especial '/admin' para rastrear usuários, visualizar logs de teclas, assumir o controle de instâncias do navegador logadas, roubar cookies e excluir instâncias indesejadas do navegador.
Nota: Você não verá nada na página de administração até ter algumas vítimas. Assim que tiver uma vítima, a instância do navegador dela deve aparecer na UI de administração.
Várias pessoas abriram issues sobre uma "Página Branca em Branco", que é mais um sintoma de muitos problemas possíveis, e não um problema em si. Por favor, não abra issues com nomes de sintomas vagos. Em vez disso, se você tiver uma página em branco no lado do usuário, tente primeiro verificar o seguinte:
Em um nível alto, se você apenas vê uma página em branco no front-end, isso significa que há alguma quebra ocorrendo na cadeia de fluxo de dados desde "Iniciar WebRTC" > "Selecionar Aba para Transmitir" > "Negociar ICE com o Navegador da Vítima" > "Transmitir Vídeo". As etapas de solução de problemas acima visam ajudá-lo a seguir os dados através desse processo. Quando funcionando corretamente, você deve esperar ver um fluxo de log no servidor semelhante ao seguinte:
Espero que isso ajude com quaisquer problemas e, como sempre, informações suficientes para reproduzir consistentemente um problema são um pré-requisito para abrir issues para investigação adicional.