Hace unos días compré un par de estos aparatos para medir el gasto eléctrico en casa de algunos aparatos. En la documentación y en las reviews lo anuncian como que solo se pueden utilizar con una aplicación para Android o iPhone, pero eso no es del todo cierto. En el puerto 10000 tiene un servidor web lighttpd, y varios cgi con los que se pueden hacer ciertas cosas. Además, por suerte, Edimax deja descargar las fuentes GPL y añade a ellas su software precompilado por lo que no es necesario hacer nada especial para tener los cgi y poder examinarlos. En teoría es bastante sencillo compilarse una version propia y con javascript hacer una aplicación que muestre los mismos datos que la aplicación para movil.

Activar backdoor 

Examinando el fichero mappings.cgi me encuentro con que bajo ciertas condiciones se ejecutará el comando telnetd -p 1355 -l /bin/bash, el cual abre un servidor telnet en el puerto 1355.
Para que esto se produzca, la petición web tiene que ser contra /tnb2 y la ejecución por el servidor web del comando mp readhiddenpage tiene que retornar 0. Según retorne 0 u otro valor, se mostrará una página mostrando OK (como se ve en la imagen anterior) o una página que da un error 404 que es diferente a los 404 por defecto del servidor.

Tras investigar un poco, veo que si reinicio de fábrica el SP-2101, el resultado del comando mp da 0, y se abre un servidor telnet en el puerto 1355. Para hacer que sea permanente hay que hacer que el comando mp readhiddenpage siempre retorne cero. Esto se puede averiguar comprobando el comando easyedx y más en concreto la función mp_main, donde veremos que para comprobar el estado de readhiddenpage, verifica que una de estas dos variables esté a ON, Device.Test.HiddenPage.Enable o Device.System.HiddenPage.Enable.
si argv[0] es "readhiddenpages" vamos a sub_41fb80


extracto de sub_41fb80, comprueba estos dos parámetros de configuración

Con esto, probamos a ejecutar el comando nvc set Device.Test.HiddenPage.Enable ON, para dejar habilitado el acceso a la página /tnb2.

Sabiendo todo esto, el procedimiento para habilitar el readhiddenpage, y por tanto poder acceder a la pagina /tnb2 que abre el telnet sería el siguiente:

- Pulsar el boton de reset durante 10 segundos. El SP-2101 se reiniciará en modo de fabríca.
- Conectarse al punto de acceso EdiPlug.Setup. Nos dará la IP 192.168.20.100. La IP del SP-2101 es 192.168.20.3
- Conectar con usuario admin y password 1234 a la dirección http://192.168.20.3/tnb2
- Conectar por telnet a la IP 192.168.20.3 en el puerto 1355
- Ejecutar el comando "nvc set Device.Test.HiddenPage.Enable ON"

Con esto además se deja abierto el modo para cambiar el firmware. Se puede acceder desde http://192.168.0.159:10000/tnupgrade.html
 
Comunicación con el servidor lighttpd en puerto 10000

Si se quiere monitorizar de alguna manera que no sea con el teléfono, ha de hacerse a través del script /smartplug.cgi. A este script hay que hacerle peticiones POST con un xml formateado y que acepta varios parámetros como CMD: get, setup, reboot y reset.

- get : Se utiliza para obtener parámetros de configuracion y el status del SP-2101. Es el principal comando si vamos a programar algo para monitorizarlo.
- setup : Empleado para cambiar parámetros del router.
- reboot : Reinicia el aparato. Al reiniciar, apaga el interruptor.
- reset : Reinicia de fábrica.

Otros posibles usos del adaptador

Aparentemente, además de como medidor, se podría usar como repetidor de Wifi. El aparato realmente es un SoC de Ralink, por lo que no descarto que se pueda configurar manualmente como un AP.

Detalles técnicos del Edimax SP-2101

Procesador
# cat /proc/cpuinfo
system type             : Ralink SoC
processor               : 0
cpu model               : MIPS 24K V4.12
BogoMIPS                : 239.61
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes
ASEs implemented        : mips16 dsp
VCED exceptions         : not available
VCEI exceptions         : not available

Memoria
# cat /proc/meminfo
MemTotal:        30268 kB
MemFree:         17196 kB
Buffers:           772 kB
Cached:           4004 kB
SwapCached:          0 kB
Active:           4492 kB
Inactive:         2184 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:               0 kB
Writeback:           0 kB
AnonPages:        1908 kB
Mapped:           1404 kB
Slab:             3564 kB
SReclaimable:      304 kB
SUnreclaim:       3260 kB
PageTables:        300 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:     15132 kB
Committed_AS:     4836 kB
VmallocTotal:  1048404 kB
VmallocUsed:      2368 kB
VmallocChunk:  1044944 kB

Modulos del kernel
# lsmod
    Tainted: P
rt2860v2_ap 1279024 1 - Live 0xc0227000 (P)
edx_events 5168 0 - Live 0xc0053000
edx_gpio 4128 1 edx_events, Live 0xc0050000 (P)

Linea de arranque
# cat /proc/cmdline
console=ttyS1,57600n8 root=1f04

Montajes
# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / squashfs ro 0 0
proc /proc proc rw 0 0
ramfs /tmp ramfs rw 0 0
ramfs /var ramfs rw 0 0
ramfs /dev ramfs rw 0 0
ramfs /etc ramfs rw 0 0

Mtdblock (particiones)
0x00000000-0x00030000 : "Bootloader"
0x00030000-0x00040000 : "Config"
0x00040000-0x00050000 : "Factory"
0x00050000-0x00110000 : "Kernel"
0x00110000-0x00330000 : "RootFS"
0x00330000-0x00380000 : "elecdata0"
0x00380000-0x003d0000 : "elecdata1"
0x003d0000-0x003f0000 : "nvram"
0x003f0000-0x00400000 : "hwconfig"
0x00050000-0x00330000 : "Uimage"

Version de Kernel
# cat /proc/version
Linux version 2.6.21 (root@localhost.localdomain) (gcc version 3.4.2) #1 Wed Mar 25 10:06:57 CST 2015

Driver Wifi
Ralink APSoC Ethernet Driver Initilization. v3.0  256 rx/tx descriptors allocated, mtu = 1500!
module rt2860v2_ap


0 comentarios:

Publicar un comentario

Nube de Bits, 2011. Con la tecnología de Blogger.