Neste artigo pretendo mostrar o funcionamento básico do mitmproxy, em breve farei outro artigo demonstrando como podemos usar essa ferramenta para ataques poderosos escrevendo nossos próprios scripts.
Mitmproxy é um proxy compatível com SSL que funciona como man-in-the-middle para comunicação HTTP e HTTPS. É uma ferramenta interativa muito boa que permite monitorar, modificar e reproduzir o tráfego HTTP / HTTPS que passa por ele.
Para poder espionar e modificar a comunicação HTTPS, o mitmproxy pretende ser o servidor para o cliente e o cliente para o servidor, enquanto está posicionado no meio, decodifica o tráfego de ambos. Mitmproxy gera certificados on-the-fly para enganar o cliente em acreditar que estão se comunicando com o servidor.
mitmproxy se difere do mitmf que faz todo o trabalho hoje pesado por nós, mas só permite injetar codigos html ou javascript nas páginas em que o alvo entra, porém se quisermos enviar um .exe ou download? com o mitmproxy poderemos manualmete analisar e modificar qualquer packets(pacotes).
Ele é um proxy como o SSlstrip que já falamos, porém diferente deste que tem um objetivo (downgrade de https para http) mitmproxy não faz nada, mas te dá uma liberdade para fazer o que quiser.
Instalação
Vamos fazer o download na pagina: https://github.com/mitmproxy/mitmproxy/releases
Extrair os arquivos e colocar na pasta opt (optional applications) dentro de uma nova pasta chamada mitmproxy
São três programas, mitmdump é o modelo em formato de linha de comando, mitmproxy é a ferramenta principal e mitmweb é com uma interface web.
Vamos imaginar que queremos atacar quando um usuário entrar em certa página, antes disso precisamos analisar o que acontece quando alguém entra naquela página web, para poder criar uma tática correta.
Para isso vamos iniciar o mitmweb no terminal
> cd /opt/mitmproxy
> ls
> ./mitmweb
Podemos ver que foi iniciado duas URL, a primeira, proxy server é o endereço onde o proxy está sendo rodado, interceptando packets, no segundo URL temos a interface web na qual podemos utilizar o proxy.
Vamos copiar o web server e copiar no navegador.
Podemos ver uma simples interface web na qual podemos ver os packets abaixo, filtrá-las e intercepta-las. Por enquanto não há packets pois não temos nenhum tráfego na rede.
O mitmproxy tem duas formas principais de funcionamento
- Explicit - O usuário se conecta diretamente ao proxy, esse é o modo padrão
- Transparent - os dados são redirecionados ao proxy
Por enquanto vamos somente ler e analisar os dados, para isso utilizaremos o modo padrão, que é o modo explicito.
Precisamos configurar nosso navegador para se conectar com o proxy e enviar data para ele.
no firefox do kali: Menu - preferences - advanced - network - settings
Marcar a opção: Manual proxy configuration
O endereço será local host pois o mitmprox está rodando em nosso computador.
Http proxy: 127.0.0.1
Porta: devemos ver a porta que o mitmf está rodando no terminal, como podemos ver na imagem acima que o proxy server está rodando na porta 8080
Port: 8080
OK
O que acontece agora é que qualquer dado no navegador firefox, a dado vai passar antes pelo mitmproxy e depois vai para a web, e quando receber dados, ele vai passar pelo mitmproxy e depois para o navegador, pois configuramos manualmente para usar o mitmproxy como o proxy, como se disséssemos ao navegador que confiamos nesse proxy.
Qualquer acesso pelo navegador, banco, jogo, filmes passam antes pelo proxy, vamos estudar como receber esses dados e criar a estratégia de ataque.
Estamos fazendo isso no nosso próprio computador para aprendermos como analisar os dados recebidos, posteriormente vamos ver como usar o mitmproxy para atacar diferentes computadores.
Agora vamos abrir o navegador, entrar em uma página e ver o que acontece entrando no bing.com:
Depois de usar a ferramenta é importante lembrar de retirar o proxy da navegação indo novamente, pois se não desmarcar isso quando desligar o mitmproxy o navegador vai perder a conexão pois não encontra o proxy para se conectar.
no firefox do kali: Menu - preferences - advanced - network - settings
Marcar a opção: No proxy
Analisando dados
Sempre que solicitamos ao navegador para entrar em um site ele comeca com essa ordem.
No primeiro vemos um pedido para entrar no bing.com, vamos clicar nele e entender melhor.
Vemos um GET para o bing.com
o User-agent mozilla
Clicando em Response vemos:
Que é a resposta que o navegador recebe quando ele solicita o bing.com, em Date vemos o código html que o usuário recebe quando ele se conecta a essa página
Na barra de navegação acima:
Search: encontrar alguma palavra nos packets
Intercept: Para interceptar packets (veremos como usar depois)
Search
Ao clicar na opção Search ele já oferece várias opções de busca:
Por exemplo usando a primeira pesquisa ~a que significa assets como CSS, Javascript, flash e imagens ele só irá me mostrar esses componentes: Como vemos abaixo dois Javascript e uma imagem.
Selecionando a imagem por exemplo, podemos baixar ela se quisermos como demonstrado no quadro a direita da imagem abaixo.
Podemos usar para filtrar o que quisermos, se a intenção é procurar somente javascript por exemplo se faz o comando ~a .js
Podemos usar também o comando ~m method que procura por algum método por exemplo ~m POST
Highlight
O highlight é bem similar ao search, porém ele não filtra ele apenas marca a pesquisa desejadas, se fizermos o mesmo comando anterior ficará assim:
Interceptando packets
Vamos ver como interceptar e evitar ou editar determinado packet antes de chegar ao alvo ou ao destino:
Com o mitmproxy iniciado e o navegador passando por ele:
Iniciamos o Bing.com
Colocamos para interceptar os POST com o comando no campo intercept ~m POST.
Há embaixo a esquerda um botão verde intercept ~m POST, significa que qualquer método POST será interceptado.
Agora vamos ao bing e pesquisar por qualquer coisa: "test"
Podemos ver que todos os POST REQUEST foram pausados
Se clicamos nele podemos ver todas as informações , e se clicamos em Resume acima ele é enfim enviado ao alvo.
Como podemos ver esse POST foi liberado ao alvo, e será enviado após 2 minutos pois o pausamos
No menu acima podemos fazer Downolad, duplicar deletar e até abortar essa solicitação.
Vamos ver outro exemplo fazendo escrevendo no campo de pesquisa /* que irá interceptar tudo
Quando tentamos entrar em qualquer site o proxy pausa tudo e não é possível entrar no site como podemos ver nas solicitações abaixo
Interceptando packets e modificando packets On-The-Fly
Antes vamos analisar, criar uma estratégia de ataque e decidir o que modificar.
O alvo entrou no Bing.com vamos enteder quais as respostas que ele recebe do servidor
Essa é a informação que o proxy recebe de uma simples solicitação ao site Bing.com Filtrando as respostas com o comando ~s
O primeiro quando abrimos e clicamos em Response teremos o código html da página que será enviada ao alvo, e assim com cada elemento acima como imagens e códigos serão enviados ao alvo.
Sendo o atacante um proxy de mitmproxy ele pode modificar qualquer parte para enviar ao alvo, html, javascript imagens ou qualquer coisa.
vamos clicar na página do Bing e ver o código fonte
A página termina com o tag </body> podemos colocar Javascript em qualquer lugar da página, mas o melhor lugar é após o tag de </body> pois o alvo não saberá que este código está sendo executado.
Vamos agora fazer outra pesquisa com o comando ~bs que significa response body
Como estamos procurando o comando </body> para injetar o Javascript antes
Logo vemos um erro porém mesmo assim ele funciona
Agora quando o alvo fizer um refresh na página do Bing vai ficar pensando e não vai entrar na página pois ela está sendo interceptada pois contém o tag </body>
Podemos ver que foi interceptado e para modificar e inserir nosso código precisa clicar na caneta acima e injetar o código antes da tag </body>
o Código será bem simples para testar: <script>alert('test');</script>
Salvamos a mudança, (há um bug que o botão some quando queremos salvar para concertar clicar encima do Date pressionando tab no qual vai levar para a outra guia "Details", depois volta a Response e salva )
Agora só precisamos liberar o pacote ao alvo, clicamos no que pausamos, vamos em Flow acima e Resume
Voilá
O código foi injetado :)
Por enquanto apenas conhecemos no próprio computador, aprendemos a analisar os dados, depois aprenderemos como atacar outras máquinas conectadas na mesma rede ou com um fake access point e injetar códigos mais poderosos.
Funcionando no mundo real - Modo Transparente
Podemos entrar em uma máquina diferente como MITM, ettercap, arp spoofing, fake AP… e redirecionar os dados da porta 80 para o mitmproxy.
Vamos fazer com Ettercap (https://cibersegurancawernik.blogspot.co.il/2018/01/ettercap-e-ultrapassando-seguranca-do.html)
> ettercap -Tq -M arp:remote -i eth0 -S /10.20.215.9// /10.20.215.1//
Agora que somos MITM tudo que a máquina faz é redirecionada ao Kali pois o windows pensa que ele é o Router.
Agora redirecionaremos o tráfego do alvo para nossa porta do mitmproxy como fizemos com o SSlstrip veja tudo mais detalhado no post sobre Ettercap.
Adicionaremos o tráfego da porta 80 para porta 8080. Isso é o equivalente a configurar o navegador da vítima para utilizar nosso mitmproxy
> iptables -t -nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Agora que direcionamos a vítima para porta 8080 precisamos iniciar nosso mitmproxy, porém faremos um comando diferente para ele ser transparente, ou seja o navegador não está configurado, somente arpspoof e iptables.
dentro do diretorio opt/mitmproxy#
> ./mitmweb --transparent
Agora vamos ao navegador do Kali e entramos no endereço onde está rodando o mitmproxy web server 127.0.0.1:8081
Podemos reparar embaixo, de verde que está no modo transparent
Agora, entrando na máquina do alvo, acessando qualquer site e estamos recebendo todos os pacotes da vítima e podemos modificar qualquer coisa.. :
Sempre é bom testar os ataques em nossa própria máquina antes.
Desligando
Depois do ataque devemos re-configurar o Iptables e desligar o server do mitmproxy para o alvo não perder conexão.
> iptables -t -nat --flush
Em outro post demonstrarei como utilizar essa técnica com ataques mais poderosos e como escrever nossos próprios scripts.