Mitmproxy 1 - Conhecendo



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
  1. Explicit - O usuário se conecta diretamente ao proxy, esse é o modo padrão
  2. 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.


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

Comentários

Mais visitadas

Usando GPU para Brute-Force com HashCat

Ataque Evil Twin

XSS - Cross-site scripting

Man-in-the-Middle e MITMf - DNS Spoofing e suas defesas

Ataque pelo servidor - Metasploit - Nexpose