Usamos cookies propias y de terceros para que funcione la web, medir visitas y orientar anuncios. Saber más y configurar.

BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Fibra
💡

Obtención de contraseña root/admin en el router ZyXEL EX3301-T0 de Digi

Pini
10
Router Digi GPON Zyxel EX3301-T0

Recientemente he encontrado una vulnerabilidad en el ZyXEL EX3301-T0 con firmware V5.50(ABVY.3.1)G0 aún no documentada por la que podremos inyectar código (como root) a través de cron, y así entre otras cosas sacar el pass de root/admin de nuestro router.

Procedimiento

Necesitamos:

  • Un Pendrive , preferiblemente formateado en FAT32 (debería funcionar también en NTFS y Ext2/4).
  • Tiempo

Pasos a seguir:

1- Descargamos el siguiente script pulsando con el botón derecho y Guardar como del siguiente enlace pass.sh o desde github.com/drumpinicho/ex3301pass/tree/main/script. Lo ponemos en la raíz del pendrive con el nombre de pass.sh.

2- Insertamos el pendrive en el USB del Zyxel y entramos en la página del router, por defecto, http://192.168.1.1 y nos logueamos, si no habéis cambiado el usuario, con usuario user contraseña user.

3- Vamos a Configuración de redServicio USB.

Si ha detectado el pendrive veremos un apartado que pone Volumen y justo debajo el punto de montaje.

Si fuera diferente a usb2_sda1, lo copiamos.

usb

4- * Opcional. Por mayor comodidad activamos la compartición de ficheros añadiendo como recurso compartido, la raíz del USB.

5- Configuración de redDNSDNS Dinámico

  • Seleccionamos DNS User Defined.
  • Introducimos esto en Actualización de URL:
foo -x x ; /bin/sh /mnt/usb2_sda1/pass.sh ;

Donde usb2_sda1 es el punto de montaje anteriormente mencionado. Si este fuera diferente se cambiaría acorde al que corresponda y además lo añadimos justo después de pass.sh, quedando de la siguiente forma:

Ejemplo

foo -x x ; /bin/sh /mnt/usb2_sdb1/pass.sh usb2_sdb1 ;

Rellenamos el resto de las entradas con el formato que corresponda (puede ser inventado).

ddns

Activamos y aplicamos

6- Vamos a MantenimientoTiempo

Cambiamos la Zona Horaria y ponemos la hora lo más cercano posible de las 00:00. Tenéis la referencia de hora actual arriba al principio de la página.

Solo queda aplicar y esperar a las 00:01 apróximadamente

Resultado

Si todo ha ido bien, se crearán 4 archivos en la raiz del USB:

  • zcfb_config.json, que es la configuración actual del router.
  • flashdump dump de la parte de mtd0 donde se guardan las contraseñas.
  • hexdump_pass.txt hexdump en formato texto del archivo flasdump.
  • pass.txt archivo con las cadenas de texto extraidas de flasdump.

En mi caso , la contraseña de root y admin es la misma y tiene un formato alfanumérico con mayúsculas y minúsculas de 10 caracteres que se corresponde con la quinta línea del pass.txt.

Recomendaciones

Recomiendo encarecidamente entrar como admin al router una vez extraída la clave y realizar backup (aunque no hice un diff, debería ser el mismo archivo que zcfg_config.json) antes de toquetear nada y guardarlo a buen recaudo.

Recordad desactivar el DDNS una vez realizado y volver a poner en la hora GMT que le corresponda.

Agradecimientos

Quiero dar las gracias a ThomasRinsma , porque sin sus aportes nunca hubiera adivinado donde se guarda el password.

Actualización

He actualizado el comando a escribir en "Actualización de URL" para asegurarme de que dé error y siga con la ejecución el siguiente comando.

License2Harm

Curioso que no esté activo ningún tipo de filtro de esos campos y que ejecute el script que le suministras para DNS dinámica tal cual.

🗨️ 8
Pini
1

Lo mismo pensé yo a la desesperada cuando lo descubrí (parece que querían dejar una puerta abierta a propósito)

Así queda el archivo cron que se ejecuta cada día a las 00:00

0 0 * * * /usr/sbin/ez-ipupdate -S userdefined -U foobar ; /bin/sh /mnt/usb2_sda1/pass.sh usb2_sda1 ;/usr/sbin/ez-ipupdate -h example.com -u "foobar:foobar" -i ppp1 -t 10

Lo de poner /usr/sbin/ez-ipupdate después del script es para evitar que cron se quede de forma infinita intentando ejecutar algo (no sé si sirve, pero no se me ha quedado tonto desde que lo puse).

🗨️ 7
License2Harm

Se parece a las inyecciones de SQL más simples

🗨️ 1
alezz
1

Nah, eso no está hecho a propósito. Eso es el trabajo de un programador que no sabe de las implicaciones que tiene el no parsear los datos especialmente cuando ese campo va a utilizarse en un sitio que ejecuta un comando. Sin querer se marcan un RCE.

🗨️ 4
Pini
1

Incluso además de no haber filtros , creo que no hay longitud máxima en la introducción, Si he hecho un script ha sido por facilitar las cosas, se habría podido escribir todos los comandos en la misma linea

🗨️ 2
alezz
🗨️ 1
Pini
License2Harm

programador que no sabe de las implicaciones que tiene el no parsear los datos

El problema es que esos programadores no son una excepción. De hecho, el problema posiblemente esté en que son simplemente programadores y no desarrolladores de software

Burequant
2

Hola, primero dar las gracias a Pini por el tiempo y esfuerzo dedicado. Soy propietario de este modelo de router y confirmo que su método funciona. Ademas el método es sencillo de realizar me llevo 5 min, ahora se muestra el menu completo del router y tengo permisos completos.

Aclaración que me dio Pini sobre el usuario root es solo para las conexiones ssh o telnet, por la interfaz web el usuario es admin y la contraseña es la 5º linea del archivo pass.txt.

La 7º linea es el nº de serie del router, la 8º linea la pass del wifi por defecto. Muchas gracias Pini, maestro.

Jav9i

Decir que he probado suerte con el EMG5523-T50B en la versión V5.50(ABPM.6)b7_K0

O funciona diferente o no tiene dicha vulnerabilidad. Ahora se queda en lo que parece una carga infinita en la pantalla de DNS dinamico, pero no se ha cortado la navegación.

Si da problemas ya le haré el reset.

Joangarcia61

Una pregunta, por favor, para el apartado de DNS Dinámico - Actualización de URL

Mi punto de montaje de USB es usb2_sda1. Por lo tanto, entiendo que en Actualización de URL tengo que indicar exactamente esto, ¿no?:

foo -x x ; /bin/sh /mnt/usb2_sda1/pass.sh ; /usr/sbin/ez-ipupdate

Por favor, verifica también los espacios en blanco y los caracteres ;

Muchas gracias!!

🗨️ 1
Pini

Olvida lo de poner /usr/sbin/ez-ipupdate al final, en cuanto pueda corrijo la captura de pantalla.

Lo que nos interesa, es que ez-ipupdate tire error, y no se quede pensando o a la espera de más información , para así seguir con el siguiente comando

En tu caso , puedes poner foo -x x ; /bin/sh /mnt/usb2_sda1/pass.sh ; o foo -x x ; /bin/sh /mnt/usb2_sda1/pass.sh usb2_sda1 ; , es indiferente .

Por favor, verifica también los espacios en blanco y los caracteres ";"

Por eso lo puse como código, para que copies y pegueis

Tech

En mi caso, con la misma versión de firmware, he conseguido extraer los ficheros pero no soy capaz de entrar como admin, me dice que tanto admin como root están bloqueados.

Lo he seguido todo al pie de la letra

¿A alguien más le ha pasado esto mismo?

🗨️ 29
Pini

Intenta entrar con usuario supervisor , si aún así no entra, prueba siguiendo el mismo tutorial pero cambia esto:

foo -x x ; /bin/sh /mnt/usb2_sda1/pass.sh ;

por esto

foo -x x ; /bin/cp /etc/passwd /mnt/usb2_sda1/ ;

Te creará el archivo passwd en la raíz del USB que contiene los nombres de usuario que pueden acceder al equipo

Además, asegúrate de que has escogido y copiado bien la contraseña , tiene un formato de 10 caracteres como esto r2DFaWQes1 (esta es inventada)

🗨️ 27
Tech

Parece que no tienen más usuarios :

nobody:x:99:99:nobody:/nonexistent:/bin/false
root:x:0:0:root:/home/root:/bin/sh
admin:x:12:12:admin:/home/admin:/bin/sh
user:x:21:21:user:/home/user:/usr/bin/zysh

En cuanto a la línea, estoy tomando la 5a. El formato es similar, pero no me accede.

🗨️ 26
Pini

Vale, intenta acceder por FTP al router usando por ejemplo FileZilla con la IP del router al puerto 21 con usuario admin y la contraseña que has extraido

Si no te va con admin, prueba con usuario root

Si te va con root y no con admin, entonces habría que crear una sesión telnet o ssh como root y cambiar el password de admin

Puede que el usuario admin tenga restringido el uso de GUI (la web)

🗨️ 25
dano88
🗨️ 24
Pini
🗨️ 23
dano88
🗨️ 22
Pini
🗨️ 21
dano88
🗨️ 20
Pini
🗨️ 19
dano88
🗨️ 5
Pini
🗨️ 4
dano88
🗨️ 3
Pini
🗨️ 2
dano88
🗨️ 1
Tech
OtroPezMas
🗨️ 12
Pini
🗨️ 11
OtroPezMas
🗨️ 10
Pini
🗨️ 9
OtroPezMas
🗨️ 8
Pini
🗨️ 7
OtroPezMas
🗨️ 6
Pini
🗨️ 5
OtroPezMas
🗨️ 2
Pini
🗨️ 1
dano88

A mí también me ha pasado. No consigo acceder ya que me dice que ambos usuarios están bloqueados.

fps2001

no funcionó… ¿el enrutador tiene que estar conectado a Internet? Gracias.

🗨️ 6
Pini

Es posible (no lo he probado) , ya que el archivo que se crea en cron hace uso del interface ppp1 y este no se crea si no hay conexión. También es posible que lo ejecutaras muy cercano a las "00:00" (en mis pruebas , activar cron a menos de 1 minuto de las doce, daba fallos aleatorios, a veces iba, a veces no)

🗨️ 5
fps2001

Entonces, ¿no hay forma de saber la contraseña de administrador con un enrutador sin Internet?

🗨️ 4
Pini

Tengo servicios corriendo ahora mismo y no puedo desconectar internet, pero en cuanto pueda pruebo y te comento si funciona

🗨️ 1
fps2001
Ashrambo

sin internet no va el script…lo que no se si permitira hacer es ponerlo como punto de acceso, y no como router principal, para los que tenemos ya un router neutro. Con DHCP deshabilitado, IP fija fuera del rango DHCP del router principal y un cable ethernet de una boca LAN del router principal a una boca LAN de este. Asi si tendria salida y en principio se activaria el servicio DNS…

🗨️ 1
Ashrambo
Ashrambo
1

Voy a decirlo…entonces es posible hacer un update de firm limpio y bloquear el TR069…te queda un router neutro limpio…

Newfulluser

Que firmware le montariais, el mismo que trae o uno más nuevo que termina en 3.4?

zyxel.com/global/en/support/download?model=ex3301-t0

Yo ya pedí los datos PPPoE esperando poder hacer esto, una vez formateado y planchado firmware oficial no hay forma de que Digi remotamente pueda actualizarlo resolviendo el bug.

🗨️ 11
Pini

No seré yo el que te diga como hacerlo, pero como admin puedes restringir el acceso a tu router, incluso por tr069. No hace falta cambiar el firmware

🗨️ 10
Newfulluser

Lo de cambiar el firm es porque el actual no permite todos los canales en 5GHz, en españa hay canales legales que en este router no aparecen (ni en el de otros operadores) y en bloques de pisos con muchas redes se generan interferencias, pero luego tienes estos canales legales que estan totalmente libres y permiten ancho de banda a 80mhz. Supongo que el oficial si que lo permite.

Como bien dices se puede quitar el acceso una vez tenemos contraseña de admin, pero yo queria mejorar la señal, tengo muchisimos vecinos y todos usamos los mismos canales…

🗨️ 9
Pini
1

Estaba mirando lo que comentas, en el config aparece:

"X_ZYXEL_Auto_Channel_Skip":"120,124,128",
"X_ZYXEL_Manual_Channels_Skip":"120,124,128",
Pero eliminar esas lineas o sus valores hace que el wifi no levante hasta que se restaure la configuración previa
🗨️ 8
Newfulluser
3
🗨️ 6
Pini
1
🗨️ 2
Newfulluser
2
🗨️ 1
Pini
1
Burequant
🗨️ 2
Newfulluser
1
🗨️ 1
OtroPezMas

@Pini, disculpa, no tienes ninguna novedad respecto a los que tenemos el usuario admin bloqueado mediante web, verdad? Gracias.

🗨️ 2
Pini

No hay que disculpar nada, pero esta semana se me hace imposible. No me olvido, en cuanto pueda y tenga novedades , lo publico

🗨️ 1
OtroPezMas

Vale, muchas gracias. Un saludo.

pjpmosteiro

Genial, acceso completo.

Pregunta: Ahora como carallo se decodifica la pass del SIP? 😂

🗨️ 2
Pini

Sé que lleva cifrado AES 256 cbc con md sha1 y una clave salt no sé de que longitud … Muy parecido a lo que publicó Thomas Risma, pero difiere , y no sé en que… Si te animas.

Por cierto, Mosteiro , Meis o donde?

🗨️ 1
pjpmosteiro

Coruña pero con abuelos de Sigüeiro y Melide :)

Ashrambo

Pregunta…alguno sabe como obtener los firmwares de Digi…

🗨️ 1
zallaevan
1

Aupa ahí, compañero.

Antes de nada, te agradezco sinceramente el tiempo que le has dedicado a todo esto. He intentado poner a práctica tu script de GitHub pero no he tenido éxito. En el primer intento, he probado con un USB exFAT que era lo que tenía a mano, pero como es un formato un poco raro pues he pensado que quizás sea eso y he cogido otro pendrive con formato FAT32 esta vez, y lo he enchufado.

usb2_sdb1, cambio comando y configuración, pongo timezone a helsinki para que el cronjob se ejecute… Pero nada… USB vacío, como mis manos y mis esperanzas.

image

He revisado infinidad de veces la configuración para ver si se me escapaba algo, pero creo que desafortunadamente sea el caso más problable lo que esté pasando: lo han parcheado.

La instalación del router me lo han hecho hoy así que entiendo que vendrá con la última versión del fw, pero el nombre de la versión me da la corazada de que no es así… Version:

V5.50(ABVY.3.1)G0_20220905.

Espero que con tu sabiduría puedas iluminar a un shur más de este foro.

Un saludo,

zallaevan

🗨️ 6
Pini

Como lo has hecho más de una vez, lo más seguro es que se quedara un proceso en memoria tocando las narices y no deje ejecutar de nuevo el cron, haz lo siguiente:

Borra las lineas , aplica, acepta, reinicia el router y empieza de cero.

Si estuviera parcheado el problema no te dejaría escribir ciertos caracteres en "URL Update". La versión que tienes es la misma que tengo yo.

Suerte y sobretodo… paciencia

🗨️ 5
zallaevan

He intentado de todo… Borrar → reiniciar → aplicar → nada… He incluso reinicializado (botón reset) para ver si era eso, pero tampoco ha habido suerte…

Encima, tengo que esperar 1h entre intento e intento, pues al final me ha sacado ya de quicio todo esto jajajja

10 veces comprobando el nombre del USB, cambiar de zona horaria pa'lante pa'trás, a este paso me voy a saber de memoria todas las ciudades y sus correspondientes zonas horarias!!

Ya estoy casi desesperado, y encima súmale que hoy es un día de mierda que toda la gente está venga pa'quí pa'yá con lo de las elecciones…

A ver si consigo algo, a la tarde probaré algo nuevo,

Un saludo,

zallaevan

🗨️ 4
Pini
1

Es algo obvio, pero ajusta la hora para las 00:00 de la noche.

Usa un pendrive en Fat32 (exFat creo que no es compatible)

🗨️ 3
Pini
Pini