Como posso “man-in-the-middle” uma porta específica?

1

Quando quero descobrir como funciona um determinado protocolo (digamos, neste caso, o protocolo HTTP na porta 80), abro duas janelas de terminal:

nc -l 80
nc google.com 80

Eu então inicio o programa que quero "man-in-the-middle", neste caso o FireFox, e vou para http://localhost:80 .

Quando o terminal no lado esquerdo envia uma mensagem, copio e colo os dados no terminal no lado direito. Quando o terminal do lado direito envia uma mensagem, faço o mesmo para o terminal esquerdo.

Além de ser manual e tedioso, esse processo tem duas desvantagens:

  1. Se eu não for rápido o suficiente, a conexão poderá expirar.
  2. Copiar e colar não manipula dados binários muito bem.

Posso automatizar esse processo? Posso ter uma porta encaminhando dados automaticamente para outra porta, ou mesmo para outra máquina, de uma maneira que me permita inspecionar e depurar os dados indo e voltando?

    
por IQAndreas 15.11.2015 / 22:36

2 respostas

4

Use socat , que é o netcat com esteróides.


netcatsocat

Esquerda:modelodecanivetesuíçomodelo1951, foto de Ivlianvs . À direita: Wenger "Giant", foto de Slartibartfass .

socat TCP-LISTEN:8080 TCP:google.com:80

(Você precisa ser root para ouvir em portas abaixo de 1024, então escolha uma porta mais alta.)

Mas se o que você quer é observar o tráfego, e você tem permissões de root, risque e execute o Wireshark . Inicie, defina o filtro para tcp.port == 80 , comece a ouvir na sua interface de rede padrão e comece a navegar.

Observe que o Google redireciona você para HTTPS. Se você observar o tráfego HTTPS, verá apenas a conexão TLS criptografada, o que não é interessante, a menos que você queira observar o handshake TLS. Embora você possa organizar a interceptação de uma sessão HTTPS ao fornecer autoridades de certificado falsas ao seu navegador, é mais difícil configurá-lo. Se você quiser observar o protocolo HTTP, atenha-se à versão não criptografada, ou seja, a sites que não usam SSL.

    
por 15.11.2015 / 23:22
0

** Se estiver no localhost, você pode apenas detectá-lo. Dê uma olhada no ngrep, tcdpump ou wireshark.

ngrep -q "." "port 80"

Como alternativa, você pode usar o socat em um loop.

    
por 15.11.2015 / 22:47

Tags