Kali Linux: Detectar Balanceadores de Carga
Kali Linux: Detectar Balanceadores de Carga
Si estás buscando información sobre lbd (Load Balancing Detector) en Kali Linux, aquí tienes una guía rápida y clara sobre qué es, para qué sirve y cómo utilizarlo.
¿Qué es lbd?
El Load Balancing Detector (lbd) es una herramienta de reconocimiento (footprinting) diseñada para detectar si un dominio o una dirección IP utiliza un balanceador de carga.
Saber si un objetivo tiene balanceo de carga es crucial en las pruebas de penetración porque:
Resultados inconsistentes: Podrías estar enviando ataques a diferentes servidores físicos sin saberlo.
Detección: Los balanceadores de carga a menudo actúan como una capa de seguridad (como un WAF).
Mapeo: Ayuda a entender la infraestructura real del objetivo.
¿Cómo funciona?
lbd analiza las cabeceras HTTP y las respuestas del servidor para encontrar diferencias sutiles. Se fija principalmente en:
Cabeceras HTTP: Diferencias en el campo
Server.Cookies: Inserción de cookies específicas de balanceo.
Diferencias de tiempo: Variaciones en el tiempo de respuesta.
Direcciones IP: Si el mismo DNS resuelve a múltiples máquinas físicas detectables.
Cómo usarlo en Kali Linux
La sintaxis es extremadamente sencilla. Abre tu terminal y escribe:
lbd <nombre_del_dominio_o_ip>
Ejemplo práctico:
lbd google.com
Interpretación de resultados:
"NOT FOUND": El script no detectó indicios claros de balanceo de carga.
"FOUND": Se detectaron diferencias en las cabeceras o cookies, lo que sugiere que hay varios servidores detrás de esa dirección.
Consideraciones importantes
Falsos positivos: A veces, las redes de entrega de contenido (CDN) como Cloudflare pueden confundir a la herramienta.
Herramientas alternativas: Si necesitas algo más avanzado, puedes probar con
nmapusando el scripthttp-load-balancer-detector:Bashnmap --script http-load-balancer-detector <objetivo>
Para interpretar los resultados de lbd, debemos fijarnos en qué tipo de "pista" encontró la herramienta. Cuando el script termina, verás secciones divididas por el método de detección utilizado.
Aquí tienes una guía para entender qué significa cada hallazgo:
1. Detección por Cabeceras HTTP (Server)
Si el resultado indica que hay cambios en la cabecera Server, significa que las peticiones están siendo respondidas por máquinas con configuraciones distintas.
Qué significa: Una petición puede mostrar
Server: Apache/2.4.41y la siguienteServer: nginx/1.18.0.Conclusión: Hay un balanceador distribuyendo el tráfico entre servidores con software o versiones diferentes.
2. Detección por Cookies
Este es el método más común. Los balanceadores suelen insertar una cookie para mantener la "persistencia de sesión" (que siempre vayas al mismo servidor durante tu visita).
Qué buscar: Cookies con nombres como
BIGipServer,citrix_ns_idoAWSALB.Conclusión: El balanceador está "marcando" tu navegador para saber a qué servidor interno enviarte.
3. Diferencias en la Fecha/Hora (Date)
lbd compara los campos de fecha y hora de las respuestas HTTP.
Qué significa: Si hay una diferencia de varios segundos entre dos respuestas consecutivas, es probable que los relojes internos de los servidores detrás del balanceador no estén perfectamente sincronizados.
Conclusión: Es una prueba física de que estás hablando con dos relojes (y por tanto, dos máquinas) distintos.
Ejemplo de Salida Interpretada
Si ejecutas el comando y obtienes algo como esto:
Checking for loadbalancing via HTTP Header Server
google.com -> gws
...
Checking for loadbalancing via HTTP Header Date
11:30:05 <-- Respuesta 1
11:30:08 <-- Respuesta 2 (¡Diferencia de 3 segundos!)
...
google.com loadbalancing found via Date header differences
Interpretación: En este caso, el balanceador fue detectado por el desfase horario. Esto te indica que el objetivo utiliza una infraestructura distribuida y que los ataques de denegación de servicio (DoS) o fuerza bruta serán más difíciles de ejecutar contra un solo nodo.
¿Cómo proceder tras el hallazgo?
Una vez que confirmas que hay un balanceador, el siguiente paso suele ser intentar "saltárselo" o identificar las IPs reales de los servidores finales (esto se llama Backend Discovery).
Esta es la fase conocida como Backend Discovery o Origin IP Discovery. El objetivo es saltarse la "capa de protección" (el balanceador o WAF) para atacar directamente al servidor real, donde las reglas de seguridad suelen ser más relajadas.
Aquí tienes las técnicas más efectivas para lograrlo desde Kali Linux:
1. Historial de DNS (DNS History)
A menudo, antes de poner un balanceador de carga o un servicio como Cloudflare, el servidor estuvo conectado directamente a internet con una IP pública. Esa IP suele quedar registrada en bases de datos históricas.
Herramientas: Usa servicios como ViewDNS.info, SecurityTrails o la herramienta
subfinderen Kali.Lógica: Si hace 6 meses el dominio
ejemplo.comapuntaba a la IP1.2.3.4y ahora apunta a un balanceador, es muy probable que1.2.3.4siga siendo la IP real del servidor.
2. Certificados SSL/TLS (Censys / Shodan)
Incluso si el dominio está oculto tras un balanceador, el servidor real puede tener instalado el certificado SSL para el mismo dominio.
Lógica: Estas plataformas escanean todo internet. Si encuentran un servidor cuya IP no es la del balanceador pero que presenta un certificado válido para
ejemplo.com, habrás encontrado el origen.
3. Cabeceras HTTP Reveladoras
A veces, el balanceador está mal configurado y reenvía cabeceras que delatan la IP interna o el servidor real.
Cabeceras a buscar: *
X-Forwarded-ForX-Originating-IPX-Real-IP
Prueba: Puedes intentar forzar estas cabeceras usando
curl:Bashcurl -I -H "X-Forwarded-For: 127.0.0.1" http://objetivo.com
4. Notificaciones de Correo (Mail Headers)
Si el sitio web tiene un formulario de "Olvidé mi contraseña" o un registro que envía un email, el servidor de correo suele ser el mismo servidor web o estar en la misma red local.
Técnica: Regístrate y analiza las cabeceras del correo recibido (
Ver código fuentedel email).Qué buscar: Busca el campo
Received: from .... La IP que aparezca ahí suele ser la IP real (backend) del servidor que generó el envío.
5. Escaneo de Favicon (Favicon Hash)
Esta es una técnica muy creativa. El icono de la web (favicon.ico) genera un hash único.
Obtén el hash del favicon del objetivo.
Busca ese hash en Shodan.
Shodan te devolverá todos los servidores en internet que tengan ese mismo archivo. Muchos de ellos serán las IPs reales sin protección.
Nota de seguridad: Una vez que creas haber encontrado la IP real, confírmalo intentando acceder a ella directamente en tu navegador (
https://IP_ENCONTRADA). Si carga el sitio web del objetivo, has tenido éxito.
Automatizar esto con Python es una excelente forma de aprender cómo funcionan las peticiones de red. Vamos a crear un script que intente realizar una de las técnicas más efectivas: el análisis de cabeceras HTTP y la búsqueda de posibles fugas de IP interna.
Este script enviará peticiones al dominio y analizará si el servidor "se delata" a sí mismo en las respuestas.
Script: Analizador de Fugas de IP (Origin-IP Finder)
Para que funcione, asegúrate de tener instalada la librería requests en tu Kali (pip install requests).
import requests
def analizar_objetivo(url):
if not url.startswith('http'):
url = 'http://' + url
print(f"[*] Analizando: {url}")
print("-" * 40)
try:
# 1. Realizamos una petición normal
response = requests.get(url, timeout=10)
# 2. Buscamos cabeceras sospechosas que suelen filtrar IPs
cabeceras_criticas = [
'X-Backend-IP', 'X-Origin-IP', 'X-Real-IP',
'Server', 'X-Powered-By', 'CF-Connecting-IP'
]
print("[+] Revisando cabeceras de respuesta:")
for header in cabeceras_criticas:
valor = response.headers.get(header)
if valor:
print(f" [!] Encontrada {header}: {valor}")
else:
print(f" [-] {header}: No presente")
# 3. Verificamos si hay cookies de balanceadores comunes
print("\n[+] Revisando cookies de balanceo:")
cookies = response.cookies.get_dict()
if not cookies:
print(" [-] No se detectaron cookies en la respuesta inicial.")
for name in cookies:
if "BIGip" in name or "NSC_" in name or "AWSELB" in name:
print(f" [!] Cookie de balanceador detectada: {name}")
else:
print(f" [.] Cookie encontrada: {name}")
except Exception as e:
print(f"[!] Error al conectar: {e}")
if __name__ == "__main__":
objetivo = input("Introduce el dominio (ej: google.com): ")
analizar_objetivo(objetivo)
¿Cómo funciona este script?
Detección de Software (
Server): Si el balanceador no oculta la cabecera, podrías ver el nombre real del servidor detrás (ej.nginx/1.14.1).Cabeceras de Proxy: Muchos balanceadores mal configurados pasan el nombre de la máquina interna o su IP privada en cabeceras como
X-Backend-IP.Huellas de Cookies: Identifica cookies específicas de fabricantes de hardware como F5 (BIG-IP) o Citrix (NetScaler).
El siguiente nivel: El "Favicon Hash"
Si quieres algo más avanzado, podrías añadir una función que descargue el favicon.ico, calcule su mmh3 hash y te dé el link directo para buscarlo en Shodan. Esa es, con diferencia, la técnica más "ninja" para encontrar la IP real.
Advertencia: Recuerda usar estas herramientas siempre en entornos controlados o sobre sistemas para los que tengas permiso explícito de auditoría.
Esta es una de las técnicas más creativas y efectivas de reconocimiento pasivo. Muchos administradores ocultan su servidor web principal detrás de un WAF (como Cloudflare) o un balanceador de carga, pero olvidan cambiar o bloquear el acceso al archivo del icono de la web (favicon.ico).
Como el favicon suele ser el mismo en el servidor de origen (la IP real) y en el servidor que da la cara al público, podemos usar un motor de búsqueda como Shodan para encontrar cualquier servidor en Internet que tenga exactamente el mismo archivo.
Actualización del Script: Añadiendo el Favicon Hash
Para que esta función funcione, necesitarás instalar dos librerías adicionales en tu Kali Linux:
pip install mmh3 codecs
mmh3(MurmurHash3): Es el algoritmo de hashing que Shodan utiliza para indexar favicons.codecs: Para codificar el archivo en Base64, que es el formato que requieremmh3.
Aquí tienes el script completo y actualizado:
import requests
import mmh3
import codecs
# Definir colores para una salida más legible
GREEN = '\033[92m'
RED = '\033[91m'
BLUE = '\033[94m'
ENDC = '\033[0m'
def calcular_favicon_hash(url):
"""Descarga el favicon y calcula su MurmurHash3 en Base64."""
if not url.startswith('http'):
url = 'http://' + url
# Intentar asegurar la URL del favicon
if not url.endswith('.ico'):
favicon_url = f"{url.rstrip('/')}/favicon.ico"
else:
favicon_url = url
print(f"\n[{BLUE}* {ENDC}] Intentando calcular Hash del Favicon de: {favicon_url}")
print("-" * 55)
try:
# 1. Descargar el archivo favicon
response = requests.get(favicon_url, timeout=10, stream=True)
response.raise_for_status() # Lanza excepción si hay error HTTP
# 2. Codificar el contenido del favicon en Base64
favicon_content = response.content
favicon_base64 = codecs.encode(favicon_content, "base64")
# 3. Calcular el hash MurmurHash3 del contenido Base64
# Shodan usa una versión firmada de mmh3
favicon_hash = mmh3.hash(favicon_base64)
print(f"[{GREEN}!{ENDC}] {GREEN}Favicon Hash encontrado!{ENDC}")
print(f"[{GREEN}!{ENDC}] {GREEN}Hash MMH3:{ENDC} {favicon_hash}")
# 4. Generar el enlace de búsqueda de Shodan
shodan_query = f"https://www.shodan.io/search?query=http.favicon.hash%3A{favicon_hash}"
print(f"\n[{BLUE}* {ENDC}] {BLUE}Copia y pega este enlace en tu navegador para Shodan:{ENDC}")
print(f"{shodan_query}")
except requests.exceptions.HTTPError as e:
print(f"[{RED}X {ENDC}] No se pudo descargar el favicon (Error HTTP): {e}")
except requests.exceptions.ConnectionError:
print(f"[{RED}X {ENDC}] Error de conexión al intentar descargar el favicon.")
except Exception as e:
print(f"[{RED}X {ENDC}] Ocurrió un error inesperado: {e}")
if __name__ == "__main__":
print("-" * 55)
print(" Origin IP Finder - Módulo de Favicon Hash")
print("-" * 55)
objetivo = input("Introduce el dominio base (ej: ejemplo.com): ")
# Asegurarnos de tener una URL base limpia
dominio_limpio = objetivo.replace("https://", "").replace("http://", "").split('/')[0]
calcular_favicon_hash(dominio_limpio)
Cómo usar los resultados y qué buscar en Shodan
Ejecuta el script: Dale el dominio de tu objetivo (ej:
target.com).Copia el enlace: El script te dará una URL de Shodan como
https://www.shodan.io/search?query=http.favicon.hash%3A12345678.Analiza los resultados en Shodan:
Shodan te mostrará una lista de todas las IPs públicas en el mundo que tienen ese favicon.
Muchas de esas IPs serán servidores de Cloudflare o Akamai (el balanceador). Esas no te interesan.
Busca la IP que "no cuadra": Tienes que buscar una dirección IP que pertenezca a un proveedor de hosting diferente (como DigitalOcean, AWS, OVH, o incluso un servidor dedicado). Esa IP tiene muchas probabilidades de ser la IP real de origen (backend).
Siguientes pasos
Una vez que tengas una IP sospechosa de ser la real:
Verificación Manual: Intenta acceder a esa IP directamente en tu navegador (
https://IP_SOSPECHOSA). Si carga el sitio web del objetivo o un panel de administración asociado, lo has encontrado.Verificación por Cabecera 'Host': A veces el servidor real solo responde si se le pide por su nombre de dominio. Puedes confirmar esto con
curl:Bashcurl -H "Host: target.com" http://IP_SOSPECHOSASi el resultado es el código HTML de
target.com, has saltado el balanceador.
Advertencia de Ética y Legalidad: Esta técnica se considera reconocimiento pasivo porque no interactúas directamente con el servidor del objetivo (solo con el favicon público y con Shodan). Sin embargo, acceder a la IP real de un servidor sin autorización para buscar vulnerabilidades puede violar las leyes locales o los términos de servicio. Úsalo siempre con permiso o en programas de Bug Bounty.