Ir ao contido

Proxychains e SOCKS no Pivoting

Introdución ao Problema do Pivoting

Nun escenario de pivoting, o atacante necesita acceder a unha rede interna á que non ten conectividade directa. A solución clásica pasa por empregar unha máquina comprometida como ponte ou intermediario.

Pero xurde un problema fundamental: como forzamos as nosas ferramentas locais (nmap, hydra, ssh, navegador) a usar esa ponte?

Aquí é onde entran en xogo SOCKS e Proxychains.


Que é SOCKS e por que é fundamental

Definición

SOCKS (Socket Secure) é un protocolo de rede que actúa como proxy a nivel de aplicación, permitindo que calquera programa redirixe as súas conexións TCP/UDP a través dun servidor intermediario.

Versións de SOCKS

Versión Características Uso en Pivoting
SOCKS4 • Só TCP
• Sen autenticación
• Sen resolución DNS remota
Básico, limitado
SOCKS5 • TCP e UDP
• Autenticación opcional
• Resolución DNS remota
• Soporte IPv6
Estándar no pivoting

Por que SOCKS5 é ideal para Pivoting

  1. Transparencia: A aplicación cliente non precisa modificacións
  2. Flexibilidade: Calquera protocolo sobre TCP/UDP
  3. DNS remoto: As consultas DNS resolven no servidor SOCKS, non no cliente
  4. Sen modificación de rutas: Non require tocar iptables, route nin NAT

Proxychains: A peza que falta

Que é Proxychains

Proxychains é unha ferramenta que intercepta as chamadas de rede dun programa e rediríxeas a través dun ou varios proxies (HTTP, SOCKS4, SOCKS5).

Funciona mediante preloading de bibliotecas (LD_PRELOAD), substituíndo as funcións de rede estándar (connect(), bind(), etc.).

Por que é necesario Proxychains

As ferramentas de hacking non teñen soporte nativo para proxies SOCKS:

Ferramenta Soporte SOCKS nativo Como úsala
nmap ❌ Non proxychains nmap
hydra ❌ Non proxychains hydra
ssh ✅ Si (con -o ProxyCommand) proxychains ssh (máis sinxelo)
curl ✅ Si (--socks5) proxychains curl (alternativa)
firefox ✅ Si (config manual) Configuración de proxy no navegador

Conclusión: Proxychains unifica o proceso e evita configuracións manuais en cada ferramenta.


Configuración de Proxychains

Ficheiro de configuración

Ruta: /etc/proxychains4.conf (ou ~/.proxychains/proxychains.conf)

# Editar configuración
sudo nano /etc/proxychains4.conf

Configuración básica

# Opciones de comportamento
dynamic_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000

# Lista de proxies
[ProxyList]
socks5 127.0.0.1 1080

Opcións importantes

Opción Descripción Recomendación
dynamic_chain Usa só proxies dispoñibles ✅ Pivoting estándar
strict_chain Todos os proxies deben funcionar Para encadeamento múltiple
random_chain Usa proxies en orde aleatoria Para ofuscación
proxy_dns Resolve DNS a través do proxy Fundamental (evita leaks)
quiet_mode Reduce saída de depuración Opcional
Por que proxy_dns é crítico

Sen proxy_dns:

Máquina atacante resolve dns (ex: "servidor.local") → Consulta DNS dende máquina atacante → Fallaría

Con proxy_dns: ``` Máquina atacante → SOCKS (máquina pivote) → máquina pivote resolve dns (ex: "servidor.local") → Éxito

```

**Que é un DNS Leak?**  
Un DNS leak ocorre cando as consultas DNS se resolven **fóra do túnel/proxy**, revelando información sobre os destinos aos que intentas acceder e causando fallos ao intentar resolver nomes internos.

**O problema en pivoting:**  
Cando usas proxychains **sen `proxy_dns`**, o teu ordenador resolve os nomes de dominio (como "servidor.local") **antes** de enviar a petición polo proxy. Isto falla porque o teu ordenador non ten acceso á rede interna.

Con `proxy_dns` activado, o nome envíase sen resolver ao proxy, e **a máquina pivote** fai a consulta DNS dende dentro da rede interna.

```bash
# En /etc/proxychains4.conf
proxy_dns  # Obrigatorio para evitar DNS leaks
```

**Resultado:** As túas consultas DNS non "escapan" do túnel, e os nomes internos resolven correctamente.

Uso de Proxychains con ferramentas comúns

Escaneo de portos (nmap)

⚠️ Limitacións: SOCKS non soporta ICMP nin raw sockets

# ❌ NON FUNCIONA: SYN scan (-sS) require raw sockets
proxychains nmap -sS 192.168.57.4

# ✅ FUNCIONA: TCP Connect scan (-sT)
proxychains nmap -sT -Pn -n -p- --min-rate 3000 192.168.57.4

Parámetros obrigatorios:
- -sT: TCP Connect scan (usa connect(), compatible con SOCKS)
- -Pn: Non facer ping (ICMP non funciona a través de SOCKS)
- -n: Non resolver DNS localmente

Brute force (hydra)

proxychains hydra -l usuario -P /usr/share/wordlists/rockyou.txt 192.168.57.4 ssh

Acceso SSH

proxychains ssh usuario@192.168.57.4

Opción 1: Proxychains (lento)

proxychains firefox http://192.168.57.4:631

Opción 2: Configuración nativa (RECOMENDADO)
1. Firefox → Settings → Network Settings
2. Manual proxy configuration:
- SOCKS Host: 127.0.0.1
- Port: 1080
- SOCKS v5: ✅
- Proxy DNS: ✅


Limitacións de SOCKS e Proxychains

O que NON funciona

Técnica Por que non funciona Alternativa
Ping (ICMP) SOCKS só TCP/UDP Ping con TCP (nmap -sT -Pn)
SYN scan (-sS) Require raw sockets Connect scan (nmap -sT)
Traceroute Require ICMP/UDP raw Non hai alternativa real
ARP requests Nivel 2 (datalink) Executar dende máquina pivote

Coidados ao usar Proxychains

  1. DNS Leaks: Sempre activar proxy_dns
  2. Rendimento: SOCKS engade latencia (normal en pivoting)
  3. Compatibilidade: Algúns programas non funcionan ben con LD_PRELOAD
  4. Resolución de nomes: Usar IPs sempre que sexa posible

Chisel: Creando o proxy SOCKS5

Por que Chisel é ideal para pivoting

  • Executables para Windows, Linux, macOS
  • Túneles inversos (reverse tunneling)
  • Cifrado SSH sobre HTTP
  • Un único porto para múltiples túneles
  • Non require privilexios de administrador

Configuración básica

1. Servidor Chisel (Kali - Máquina Atacante)

chisel server --reverse --port 8000

Explicación:
- --reverse: Permite túneles inversos (cliente inicia, servidor expón)
- --port 8000: Porto de escoita para clientes Chisel

2. Cliente Chisel (Máquina comprometida)

chisel.exe client IP_KALI:8000 R:socks

Explicación:
- IP_KALI:8000: Conecta ao servidor Chisel
- R:socks: Crea un túnel inverso que expón un proxy SOCKS5 en Kali

3. Resultado

Chisel server en Kali escoita en:
- Puerto 8000: Para clientes Chisel
- Puerto 1080: Proxy SOCKS5 (automático ao usar R:socks)


Como funciona SOCKS nun escenario real

Escenario de exemplo: 🔗 War → Basic

┌───────────────┐           ┌─────────────────┐           ┌───────────────┐
│  Kali         │ vboxnet0  │  War            │           │  Basic        │
│ 192.168.56.X  │◄─────────►│ 192.168.56.177  │           │               │
│               │           │ 192.168.57.3    │◄─────────►│ 192.168.57.4  │
└───────────────┘           └─────────────────┘  vboxnet1 └───────────────┘

Problema: Kali non ten ruta a 192.168.57.0/24
Solución: Usar War como proxy SOCKS5

Arquitectura do túnel

Fig. Arquitectura do túnel

Fluxo de conexión con SOCKS

1. Kali executa: proxychains ssh usuario@192.168.57.4
2. Proxychains intercepta a conexión
3. Envía a petición ao proxy SOCKS (127.0.0.1:1080)
4. Chisel Server (en Kali) recibe a petición SOCKS
5. Chisel Server envía a petición polo túnel HTTP ao Chisel Client (en War)
6. Chisel Client (en War) conecta a 192.168.57.4:22 dende War
7. Establécese un túnel bidireccional

Fluxo final:
Proxychains → SOCKS:1080 → Chisel Server (Kali) → Túnel HTTP → Chisel Client (War) → Basic:22

Exemplo completo: 🔗 Pivoting War → Basic

Paso 1: Configurar Chisel

En Kali:
Executar servidor na máquina atacante

chisel server --reverse --port 8000

En War:
Executar cliente na máquina comprometida

chisel.exe client 192.168.56.113:8000 R:socks

Paso 2: Configurar Proxychains na máquina atacante

sudo nano /etc/proxychains4.conf
[ProxyList]
socks5 127.0.0.1 1080

Paso 3: Usar ferramentas dende a máquina atacante

Escaneo:

proxychains nmap -sT -Pn -n -p22,80,631 192.168.57.4

Brute force:

proxychains hydra -l usuario -P rockyou.txt 192.168.57.4 ssh

SSH:

proxychains ssh usuario@192.168.57.4

Navegador (CUPS):

# Configurar proxy SOCKS5 en Firefox: 127.0.0.1:1080
# Acceder a: http://192.168.57.4:631
Fig. Proxy Firefox socks5


Resolución de problemas comúns

Erro: "connection refused"

Causa: O túnel SOCKS non está activo

Solución:

# Verificar que Chisel server está escoitando
ss -tlnp | grep 1080

# Verificar conexión do cliente
# Debería aparecer: "proxy#R:127.0.0.1:1080=>socks: Listening"

Erro: "Host seems down"

Causa: Nmap non pode verificar o host con ping

Solución: Sempre usar -Pn

proxychains nmap -sT -Pn -n 192.168.57.4

Lentitude extrema

Causa: Proxychains en modo verbose + DNS queries

Solución:
1. Activar quiet_mode en proxychains.conf
2. Usar IPs en lugar de nomes de dominio
3. Activar proxy_dns

Firefox non usa o proxy

Causa: Configuración incorrecta

Solución:
1. Settings → Network Settings
2. Manual proxy configuration
3. SOCKS Host: 127.0.0.1, Port: 1080
4. Marcar: "SOCKS v5" e "Proxy DNS when using SOCKS v5"


Referencias

Documentación oficial