Huawei HS8546V5

Este router poco conocido lo están introduciendo operadoras de fibra locales debido al bajo costo del mismo (lo podemos encontrar en aliexpress, por ejemplo). El mismo viene capado con un usuario y contraseña modificado por el operador que nos lo instale. Las contraseñas por defecto no funcionan.
Realizando un escaneo rápido, descubrimos que tiene el puerto 23 (telnet) abierto y ahí las contraseñas son por defecto (root/admin). Probamos a acceder con PuTTY:

En mi caso, la ip del router es la 192.168.100.1

Probamos las credenciales por defecto mencionadas mas arriba:

Tenemos acceso a un menú especial del router.
Con los comandos su y shell accedemos como root al router

El archivo que nos interesa se encuentra en /mnt/jfss2 y tiene como nombre hw_ctree.xml. Aunque a simple vista pueda parecer un simple archivo xml, en realidad es un archivo cifrado y comprimido. Pero lo podemos descifrar y descomprimir desde el propio router con los siguientes comandos:

cp hw_ctree.xml wy.xml 
cp wy.xml wy1.xml.gz 
aescrypt2 1 wy1.xml.gz tmp 
gzip -d wy1.xml.gz 

En la línea 1 tenemos una copia del archivo de configuración. En la línea 2 le cambiamos la extensión a la de un archivo gzip. En la 3ª desciframos (desencriptamos, como solemos decir en español). Y, finalmente, descomprimimos el archivo.

Con esto tenemos el archivo wy1.xml descifrado y descomprimido. Lo podemos pasar a nuestro PC, ya sea usando un servidor tftp en nuestro PC y transfiriéndolo o bien usando un servidor ftp/sftp/tftp en el router y accediendo a él con programas del estilo de Filezilla.

Una vez tenemos el archivo en nuestro Pc, procedemos a abrirlo con nuestro editor de texto favorito (en mi caso es el Notepad++).

Veremos un montón de configuraciones del router. Los apartados donde hay contraseñas (login en el router, VoIP, clave del WiFi, etc.) vienen cifradas. La que nos interesa en este caso es la de acceso al router. Preguntamos a nuestro operador de cable y nos da la contraseña del usuario root. Pensamos que genial, que el usuario root puede acceder a todas las áreas del router y modificar la configuración a su antojo, pero no es así. En este modelo, y supongo que en muchos otros, el usuario con acceso total es uno llamado telecomadmin, del cual no nos han dado la contraseña.

Pantalla de login.

Lo que más me interesaba era poder cambiar las DNS que el router asigna en el DHCP para redirigir todas las peticiones a dos servidores pi-hole que tengo montados en VPS (ya escribiré sobre ello en otra entrada). Pero el usuario root no era capaz de ello. Así que me dirjo al archivo comentado anteriormente y me encuentro lo siguiente:

Las contraseñas cifradas de los usuarios que se pueden loguear en el router.

Así que, conociendo la contaseña del root, copio el string password de dicho usuario (línea 1523) y lo pego en el usuario telecomadmin, machacando la contraseña original. Con el parámetro salt hago lo mismo.

Ambas líneas quedarán tal que así:

<X_HW_WebUserInfoInstance InstanceID="1" UserName="root" Password="$2$Q1Z9ex/9AP4}7.N*{7C~7jQAS8Oa.{96J1.Ra8T4fh;4Ac=uPFX:n5;8={QFlwW@p8|dTB#K><!Q"G"E7I0:=(Ro%9jEq"_-/|T$" UserLevel="1" Enable="1" ModifyPasswordFlag="1" PassMode="3" Alias="cpe-1" Salt="4d28bdd0cf559f6a0c8c5467"/>
<X_HW_WebUserInfoInstance InstanceID="2" UserName="telecomadmin" Password="$2$Q1Z9ex/9AP4}7.N*{7C~7jQAS8Oa.{96J1.Ra8T4fh;4Ac=uPFX:n5;8={QFlwW@p8|dTB#K><!Q"G"E7I0:=(Ro%9jEq"_-/|T$" UserLevel="0" Enable="1" ModifyPasswordFlag="1" PassMode="3" Alias="cpe-2" Salt="4d28bdd0cf559f6a0c8c5467"/>

Ahora sólo queda hacer el paso inverso para aplicarlo al router; lo pasamos en la otra dirección (PC –> router) en el mismo directorio que se encuentra el original, comentado más arriba. Después, escribimos los comandos en orden inverso para sobreescribir la configuración:

gzip wy1.xml
aescrypt2 0 wy1.xml tmp 
cp wy.xml hw_ctree.xml

Reiniciamos el router y podremos acceder como telecomadmin con todos los privilegios. Pobablemente cambiando el parámetro UserLevel del usuario root de 1 a 0 habría sido suficiente para dar permisos totales al usuario, pero eso no llegué a probarlo.