Evasión de balanceador

Un balanceador de carga es un dispositivo o servicio que recibe todo el tráfico entrante (DNS, TCP o HTTP) y lo distribuye entre varios servidores backend para evitar saturación; al escanearlo con nmap verás únicamente los puertos que expone el balanceador, no los de los servidores reales.

Identificar si hay balanceador o no

lbd netflix.com
  1. Podemos ver que tiene un balanceo de carga de DNS por que el dominio (netflix.com) apunta a 3 IPs distintas que se distribuyen la carga de tráfico.

  2. Tus peticiones HTTP se reparten entre varios servidores/proxies gracias a un balanceador HTTP (se ve por las diferencias en los headers).

Evasión

Para buscar entre todas las direcciones IP para conseguir la real vamos a utilizar dos herramientas además de hacer reconocimiento como buscar en shodan,etc. Normalmente si esta bien configurado, no encontramos la dirección IP de el servidor web real y las que vemos son solo balanceadores que empantallan la IP real.

dig

dig +short netflix.com

dig +short netflix.com | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u >> ip_balanceador.txt

halberd

git clone https://github.com/jmbr/halberd.git
sudo python2 setup.py install

halberd netflix.com | grep "real server"

halberd netflix.com | grep "real server" | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u >> ip_balanceador.txt

lbd

lbd netflix.com

Buscando en el certificado TLS/SNI

echo | openssl s_client -connect netflix.com:443 -servername netflix.com 2>/dev/null | openssl x509 -noout -text | sed -n '/Subject Alternative Name:/,$p' | tr ',' '\n' | sed -e 's/ *DNS://g' -e 's/ *IP Address://g' | while read entry; do dig +short "$entry"; done | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u >> ip_balanceador.txt

Comprobar que IPs no son balanceadores

for ip in $(cat ip_balanceador.txt); do curl -skI --max-time 5 https://$ip -H "Host: netflix.com" | grep -qiE 'via:|x-forwarded|cloudflare|envoy|akamai' || echo "💥 Posible backend real: $ip"; done

Última actualización