Beim KuWfi GC111 handelt es sich um einen relativ günstigen Router aus China, der beispielsweise über Aliexpress vertrieben wird. Das Gerät funktioniert grundsätzlich gut. Das Webinterface hat zwar ein paar Fehler (technisch und bei der Übersetzung ins Englisch), kann aber verwendet werden. Da ich solcher Hardware generell nicht vertraue, habe ich ein paar Tests durchgeführt und hier dokumentiert. Wenn Du wissen möchtest, was ich alles für Überraschungen gefunden habe, dann gerne weiterlesen…

Allgemeines
Generell möchte ich vom Kauf dieses Routers abraten. Es wird keine Update-Möglichkeiten für die Firmware geben und die Installation einer alternativen Firmware (wie OpenWRT) ist bis jetzt nicht möglich. Das installierte Linux ist alt und bietet, dank ungeschütztem Telnet-Zugang, Angreiffern ein grösstmögliches Einfallstor. Ausserdem verbindet sich der Router nach dem Start mit einen MQTT-Server in China. Zwar war dieser während meinen Tests offline, aber trotzdem kann man erahnen, dass dort auch persönliche Daten ausgetauscht werden. Ein paar davon konnte ich mit Hilfe einer Umleitung auf meinen MQTT-Broker dokumentieren.
Auf dieser Seite werde ich mit ein paar Kommentaren mein Vorgehen dokumentieren. Kommentare und weitere Ideen von Leser-Seite sind willkommen! Vor allem auch was die Installation von alternativen Firmware-Versionen angeht.
Hardware/Betriebssystem
Atheros AR8033-AL1A / NJ90322R
RTL8192ES
IC+ IP175G / 1936S12
Default IP: 192.168.100.1
root-Password: 1020 (gecrackt: weiter unten mehr dazu)
Weitere Infos zum OS:
– https://osmocom.org/projects/quectel-modems/wiki/EC25
– https://osmocom.org/projects/quectel-modems/wiki/Qualcomm_OE_MSM
Modem
Infos von https://www.qualcomm.com/products/snapdragon-modems-4g-lte-x5
Chipset: Snapdragon X5 LTE Modem, Snapdragon 616 processor, Snapdragon 415 processor, Snapdragon 412 processor, Snapdragon 212 Mobile Platform, Qualcomm 205 Mobile Platform
Multi SIM: LTE Dual SIM Dual Standby (DSDS)
Calling Services: VoLTE with SRVCC to 3G and 2G, Voice over Wi-Fi (VoWiFi) with LTE call continuity, Native HD video calling, HD Voice over 3G and VoLTE, CSFB to 3G and 2G
Downlink LTE Category: LTE Category 4
Downlink LTE Streams: 4x 37.5Mbps LTE streams, 2x 75Mbps LTE streams
Downlink Carrier Aggregation: 2×10 MHz carrier aggregation, 1×20 MHz downlink
Downlink QAM: Up to 64-QAM
Uplink Technology: Uplink Data Compression (UDC)
Uplink Carrier Aggregation: 1×20 MHz
Uplink QAM: Up to 16-QAM
Peak Download Speed: 150 Mbps
Peak Upload Speed: 50 Mbps
Cellular Technology: WCDMA (3C-HSDPA, DC-HSUPA), WCDMA (DC-HSDPA, HSUPA), WCDMA (DC-HSDPA, DC-HSUPA), TD-SCDMA, CDMA 1x, EV-DO, GSM/EDGE, LTE TDD, LTE FDD, LTE Broadcast
/ # uname -a
Linux homerouter.cpe 3.18.44 #1 PREEMPT Wed May 8 16:36:10 CST 2019 armv7l GNU/Linux
Linux version 3.18.44 (chengsong@localhost.localdomain) (gcc version 4.9.3 (GCC) ) #1 PREEMPT Wed May 8 16:36:10 CST 2019
cat /etc/version 3b4418d
Erstes Backup erstellen
Um ein Backup zu erstellen, starten wir den installierten FTP-Server auf dem Router und geben direkt das Root-Verzeichnis „/“ frei:
tcpsvd -vE 0.0.0.0 21 ftpd /
Nun kann z.B. mit „Filezilla“ eine Verbindung aufgebaut werden. Dazu wird kein Login benötigt (Anonym).
Wichtige Verzeichnisse
Die aktive Webseite befindet sich unter:
/data/kthy_web/web
Was genau „wechat“ auf dem System zu suchen hat, kann man nicht genau sagen 😉
/data/kthy_web/web/html/wechat # ls -all
total 120
drwxrwxr-x 7 1000 1000 1152 Apr 1 2012 .
drwxrwxr-x 3 1000 1000 224 Apr 1 2012 ..
-rwxrwxr-x 1 1000 1000 11808 Aug 22 2018 apn.html
drwxrwxr-x 2 1000 1000 320 Apr 1 2012 css
-rwxrwxr-x 1 1000 1000 4005 Aug 22 2018 device.html
-rwxrwxr-x 1 1000 1000 17672 Jun 3 2019 info.html
drwxrwxr-x 2 1000 1000 304 Apr 1 2012 js
drwxrwxr-x 2 1000 1000 304 Apr 1 2012 language
drwxrwxr-x 2 1000 1000 560 Apr 1 2012 lib
-rwxrwxr-x 1 1000 1000 2608 Aug 22 2018 login.html
-rwxrwxr-x 1 1000 1000 10518 Aug 22 2018 login_psw.html
-rwxrwxr-x 1 1000 1000 38896 Aug 22 2018 quicksetting.html
-rwxrwxr-x 1 1000 1000 4700 Aug 22 2018 reboot.html
drwxrwxr-x 2 1000 1000 3392 Apr 1 2012 res
-rwxrwxr-x 1 1000 1000 4816 Aug 22 2018 restore.html
-rwxrwxr-x 1 1000 1000 11539 Aug 22 2018 wifi_repeat.html
http://192.168.100.1/html/wechat/login.html

Wobei eine alternative Seite in einem anderen Verzeichnis liegt:
/WEBSERVER/www # ls
QCMAP.html QCMAP_IPV4.html QCMAP_UPNP_DLNA_MDNS.html QCMAP_login.html
QCMAP_Account.html QCMAP_IPV4_Help.html QCMAP_UPNP_DLNA_MDNS_Help.html cgi-bin
QCMAP_Account_Help.html QCMAP_IPV6.html QCMAP_WLAN.html images
QCMAP_Firewall.html QCMAP_IPV6_Help.html QCMAP_WLAN_Help.html js
QCMAP_Firewall_Help.html QCMAP_NAT.html QCMAP_WWAN.html
QCMAP_Help.html QCMAP_NAT_Help.html QCMAP_WWAN_Help.html
Dies scheint das Original-Webinterface von Qualcomm zu sein.
Mit folgendem Befehl, habe ich den httpd Deamon auf Port 81 gestartet (Port 80 ist durch das aktive Webinterface benutzt) und das Webinterfice eingebunden: httpd -h /WEBSERVER/www -p 81
Das Interface ist dann unter dieser URL erreichbar (IP wenn nötig anpassen): http://192.168.100.1:81/QCMAP.html

Das Qualcomm-Webinterface ist so natürlich nicht nutzbar und gibt bei mir auch „Bad State“ Fehlermeldungen aus. Trotzdem kann man so kurz einen Blick darauf werfen 😉
QCMAP steht übrigens für QualComm Mobile Access Point.
Das QCMAP_CLI Binary, dass ein Text-Basiertes Interface darstellt, findet man unter /usr/bin/QCMAP_CLI
Leider konnte ich das Interface per Telnet nicht einfach direkt starten.
Logfiles
/data/kthy_web/kthy_log
Netzwerk-Analyse
Etwas erschreckend ist, dass dämtliche Dienste (auch das ungeschützte Telnet) auf allen Netzwerk-Interfaces erreichbar ist. Also auch über das Internet! Dies ist natürlich inakzeptabel und macht den Router sozusagen unbrauchbar. In meinem Fall vergibt der Mobile-Anbiter keine öffentlichen IP’s, was somit sehr hilfreich ist. Denn so ist der Router immerhin nicht vom Internet her erreichbar.
netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:5037 0.0.0.0:* LISTEN 236/adbd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 796/kthy_topsw_goah
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1732/dnsmasq
tcp 0 0 :::53 :::* LISTEN 1732/dnsmasq
tcp 0 0 :::23 :::* LISTEN 767/busybox
Netstat zeigt Verbindungen an. Eine davon ist suspekt:
tcp 0 1 10.35.247.226:36517 134.175.160.67:1883 SYN_SENT
Port 1883 wird für MQTT verwendet. Ich war schon leicht verwirrt, dass mosquito auf der Kiste installiert ist. Was jedoch über MQTT übertragen wird, muss erst analysiert werden.
IP | 134.175.160.67 |
Hostname | 134.175.160.67 |
ISP | Tencent Cloud Computing (Beijing) Co., Ltd |
RIR | APNIC |
Origin | AS45090 |
Netrange | 134.175.0.0 – 134.175.255.255 |
Country | CN |
Die IP gehört also einem Cloud-Dienst Anbieter: https://intl.cloud.tencent.com/
Der Laufende Dienst, der die MQTT-Verbindung herstellt, heisst: googol_mosquitto_client_version2. Im Internet findet man nicht viele Infos dazu.
Wird der googol Client manuell gestartet, gibt dieser folgenden Output:
googol_mosquitto_client_version2
googol_qmi_client.c,153: err_ret = 0
googol_qmi_client.c,304: kthy_topsw_mdm_read_transparent rc is 0
googol_qmi_client.c,305: resp.error: 0, resp.result: 0
googol_qmi_client.c,309: sw1: 90, sw2: 0
googol_qmi_client.c,314: content_len is 10
googol_qmi_client.c,347: kthy_topsw_mdm_get_iccid resp_status is 0
googol_qmi_client.c,354: 98
googol_qmi_client.c,354: 14
googol_qmi_client.c,354: 20
googol_qmi_client.c,354: 10
googol_qmi_client.c,354: 07
googol_qmi_client.c,354: 44
googol_qmi_client.c,354: XX
googol_qmi_client.c,354: XX
googol_qmi_client.c,354: XX
googol_qmi_client.c,354: XX
googol_qmi_client.c,359:
sim_iccid str is 89410201704400XXXXXX
googol_qmi_client.c,385: rc is 0
googol_qmi_client.c,386: resp.error: 0, resp.result: 0
rsp_data.card_status_valid= 1
googol_qmi_client.c,391: ...hantao: card info begin...
googol_qmi_client.c,392: index_gw_pri: 0x0
googol_qmi_client.c,393: index_1x_pri: 0xffff
googol_qmi_client.c,394: index_gw_sec: 0xffff
googol_qmi_client.c,395: index_1x_sec: 0xffff
googol_qmi_client.c,398: rsp_data.card_status.card_info[0].app_info_len 0x2
googol_qmi_client.c,401: app_info[0]
googol_qmi_client.c,402: app_type 0x2
googol_qmi_client.c,403: app_state 0x7
googol_qmi_client.c,404: app_pin status 3 3 10
googol_qmi_client.c,401: app_info[1]
googol_qmi_client.c,402: app_type 0x5
googol_qmi_client.c,403: app_state 0x1
googol_qmi_client.c,404: app_pin status 0 0 0
googol_qmi_client.c,435: apptype: 0x2
googol_qmi_client.c,451: 3gpp
googol_qmi_client.c,455: ...hantao: card info end...
googol_qmi_client.c,457: KTHY_usim_card: 1
googol_qmi_client.c,304: kthy_topsw_mdm_read_transparent rc is 0
googol_qmi_client.c,305: resp.error: 0, resp.result: 0
googol_qmi_client.c,309: sw1: 90, sw2: 0
googol_qmi_client.c,314: content_len is 9
googol_qmi_client.c,495: googol_get_imsi resp_status is 0
googol_qmi_client.c,498: googol: card_result_valid
googol_qmi_client.c,504: 08
googol_qmi_client.c,504: 29
googol_qmi_client.c,504: 82
googol_qmi_client.c,504: 20
googol_qmi_client.c,504: 51
googol_qmi_client.c,504: 60
googol_qmi_client.c,504: 80
googol_qmi_client.c,504: 33
googol_qmi_client.c,504: 52
googol_qmi_client.c,508:
googol_qmi_client.c,509: tmp_imsi_str: 809228021506XXXXXX
googol_qmi_client.c,512: imsi: 228021506XXXXXX
utils.c,285: no client_id, use imei [356053080XXXXXX]
utils.c,334: no subscribe_topic, use imei [356053080XXXXXX]
utils.c,408: new_server_host is empty, set it to client->host
utils.c,421: new_port is 0, set it to client->port
googol_mosquitto_client.c,910: host: 134.175.160.67
googol_mosquitto_client.c,911: post: 1883
Das verwendete Config-File (im JSON-Format) beinhaltet folgendes:
cat /usr/kthy/kthy_conf/config/googol_mosquitto_client.json
{
"server_host": "134.175.160.67",
"server_port": 1883,
"client_id": "",
"clean_session": true,
"username": "100000002",
"password": "passwd",
"subscribe_topic": "",
"subscribe_qos": 2,
"publish_topic": "100000000",
"publish_qos": 2,
"report_interval": 600,
"ping_interval": 30,
"product_key": "bbegq8aixmpb7o6z",
"new_server_host":"",
"new_server_port": 0,
"need_report": 1
}
Um zu sehen, was MQTT genau übermittelt, versuche ich eine IP-Umleitung mit iptables auf dem Router zu einer lokalen IP. Dort ist Mosquitto (Default Installation unter Raspian) installiert und hört auf Anfragen mit der IP 192.168.100.104.
Der iptables-Befehl überlebt so einen Reboot des Routers übrigens nicht.
iptables -t nat -A OUTPUT -d [ipaddress1] -j DNAT --to-destination [ipaddress2]
Bei meinem Versuch sind folgende IPs in Verwendung:
iptables -t nat -A OUTPUT -d 134.175.160.67 -j DNAT --to-destination 192.168.100.104
Nun können wir auf dem Lokalen MQTT-Server den Traffic mitlesen. Als Topic wird „10000000“ verwendet. Ich verwende dazu die Software MQTT.fx: http://www.mqttfx.org/. Alle 10 Minuten wird ein MQTT-Packet übertragen. Die unten aufgeführten Daten sind leicht anonymisiert (mit X).
Der MQTT-Server meldet bei der Anmeldung:
New client connected from X.X.X.X(IP) as 356053080XXXXXX (c1, k30, u'100000002').
Die erste Übertragung vom Router:
{"to":"100000000","from":"356053080XXXXXX","msgType":1,"method":"reportDevProperties","msgID":"1","date":"2020-08-20 18:54:28","data":{"product_key":"bbegq8aixmpb7o6z","udid":"356053080XXXXXX","properties":{"version":"GC111-GL-LM321_V3.0_20191211","imei":"356053080XXXXXX","iccid":"89410201704400XXXXXX","imsi":"228021506XXXXXX","flow":2881836938,"up":0,"down":0,"lock":"00","cellId":"2624776","lac":"41000","mcc":"228","mnc":"2","monthly_flow":27000501468,"wan_type":"4G"}}}
Bei den weiteren Übertragungen fehlen dann jeweils die Daten zur „version“. Diese wird also nur bei der ersten Übertragung nach der Anmeldung mitgesendet.
Unter Anderem sind sämtliche Daten zum Lokalisieren der Mobilfunk-Antenne enthalten. Diese können z.B. über http://www.cell2gps.com/ analysiert werden und zeigen so auch den Standort der Antenne (und des Routers).

Auch die imei-Nummer wird übertragen. Damit kann der Hersteller des 4G-Moduls ermittelt werden. Folgende Daten erhällt man von imei24.com:
Brand | Hong Kong Mcard Technology Co Limited |
---|---|
Model | LC111 |
IMEI.info: The format of the ICCID is: MMCC IINN NNNN NNNN NN C x
MM = Constant (ISO 7812 Major Industry Identifier)
CC = Country Code
II= Issuer Identifier
N{12} = Account ID („SIM number“)
C = Checksum calculated from the other 19 digits using the Luhn algorithm.
x= An extra 20th digit is returned by the ‚AT!ICCID?‘ command, but it is not officially part of the ICCID.
iccid (Integrated Circuit Card Identifier) identifiziert die SIM-Card. Auch diese Daten gehen an den Hersteller. Mehr Infos: https://en.wikipedia.org/wiki/SIM_card#ICCID.
Was mit dem lokalen MQTT-Server jedoch nicht evaluiert werden kann, ist in wiefern der Router gesteuert werden kann. Also ob und wie er Befehle über MQTT ausführt. Hierzu könnte z.B. ein Firmware-Upgrade gehören, das vom Hersteller her initiiert wird.
netstat zeigt folgende offenen Ports (lokal):
/ # netstat -npl
netstat: showing only processes with your user ID
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:5037 0.0.0.0:* LISTEN 236/adbd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 795/kthy_topsw_goah
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1712/dnsmasq
tcp 0 0 :::53 :::* LISTEN 1712/dnsmasq
tcp 0 0 :::23 :::* LISTEN 766/busybox
udp 0 0 0.0.0.0:500 0.0.0.0:* 1870/charon
udp 0 0 0.0.0.0:53 0.0.0.0:* 1712/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1712/dnsmasq
udp 0 0 0.0.0.0:4500 0.0.0.0:* UNKNOWN 1870/charon
udp 0 0 0.0.0.0:1701 0.0.0.0:* 1874/xl2tpd
udp 0 0 127.0.0.1:5053 0.0.0.0:* 1144/kthy_doh_proxy
udp 0 0 :::500 :::* 1870/charon
udp 0 0 :::53 :::* 1712/dnsmasq
udp 0 0 :::4500 :::* 1870/charon
raw 0 0 :::58 :::* 58 442/QCMAP_Connectio
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 6838 611/netmgrd /data/netmgr_connect_socket
unix 2 [ ACC ] STREAM LISTENING 6541 223/psmd /tmp/psm_socket/psm
unix 2 [ ACC ] STREAM LISTENING 6581 760/QCMAP_CLI /media/kthy/kthy_socket/MSG_ID_SAP_CM
unix 2 [ ACC ] STREAM LISTENING 6584 763/kthy_topsw_cfg /tmp/kthy_cfg_path
unix 2 [ ACC ] STREAM LISTENING 6592 772/kthy_topsw_daem /media/kthy/kthy_socket/MSG_ID_DAEMON
unix 2 [ ACC ] STREAM LISTENING 6595 779/kthy_topsw_nvco /media/kthy/kthy_socket/kthy_nvconfig_server
unix 2 [ ACC ] STREAM LISTENING 6605 783/kthy_topsw_wan_ /media/kthy/kthy_socket/MSG_ID_WAN_CTRL
unix 2 [ ACC ] STREAM LISTENING 6608 781/kthy_topsw_rout /media/kthy/kthy_socket/MSG_ID_ROUTER
unix 2 [ ACC ] STREAM LISTENING 6636 801/kthy_topsw_wms /media/kthy/kthy_socket/kthy_topsw_wms
unix 2 [ ACC ] STREAM LISTENING 6642 785/kthy_topsw_ppp_ /media/kthy/kthy_socket/MSG_ID_WAN_PPP
unix 2 [ ACC ] STREAM LISTENING 6643 787/kthy_wan_nwinfo /media/kthy/kthy_socket/MSG_ID_WAN_NWINFO
unix 2 [ ACC ] STREAM LISTENING 6644 793/kthy_topsw_mdm /media/kthy/kthy_socket/kthy_mdm_path
unix 2 [ ACC ] STREAM LISTENING 6676 802/kthy_topsw_pbm /media/kthy/kthy_socket/kthy_pbm
unix 2 [ ACC ] STREAM LISTENING 6680 791/kthy_topsw_mc_s /media/kthy/kthy_socket/kthy_mc_startup_path
unix 2 [ ACC ] STREAM LISTENING 6778 789/kthy_topsw_mc /media/kthy/kthy_socket/kthy_mc_path
unix 2 [ ACC ] STREAM LISTENING 7160 800/kthy_topsw_lan /media/kthy/kthy_socket/MSG_ID_WLAN
unix 2 [ ACC ] STREAM LISTENING 8214 772/kthy_topsw_daem /media/kthy/kthy_socket/kthy_proc_daemon
unix 2 [ ACC ] STREAM LISTENING 11733 1870/charon /var/run/charon.ctl
unix 2 [ ACC ] STREAM LISTENING 11734 1870/charon /var/run/charon.vici
unix 2 [ ACC ] STREAM LISTENING 6153 236/adbd @jdwp-control
Init-Scripte
ls /etc/init.d/ adbd psmd alignment.sh qmi_shutdown_modemd banner.sh qseecomd bootlogd rc bootmisc.sh rcS bsp_paths.sh read-only-rootfs-hook.sh busybox-cron reboot checkroot.sh reset_reboot_cookie chgrp-diag rmnologin.sh data-init save-rtc.sh dbus-1 sendsigs devpts.sh set_core_pattern.sh dmesg.sh sfs_config dnsmasq shutdown find_partitions.sh single firmware-links.sh start_MCM_MOBILEAP_ConnectionManager_le functions start_MCM_atcop_svc_le functions.initscripts start_QCMAP_ConnectionManager_le halt start_atfwd_daemon hostname.sh start_eMBMs_TunnelingModule_le hwclock.sh start_embms_le inetd.busybox start_mcm_data_srv_le init_irsc_util start_mcm_ril_srv_le keymap.sh start_qti_le mcmlocserverd start_stop_qmi_ip_multiclient mdev start_stop_qti_ppp_le misc-daemon start_subsystem_ramdump modem-shutdown stop-bootlogd modutils.sh sysfs.sh mountall.sh syslog mountnfs.sh syslog.busybox mssboot time_serviced netmgrd umountfs networking umountnfs.sh populate-volatile.sh urandom port_bridge usb power_config xl2tpd ppp
Busybox
busybox
BusyBox v1.23.2 (2019-12-11 11:54:25 CST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]…]
or: busybox --list[-full]
or: busybox --install [-s] [DIR]
or: function [arguments]…
BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as.
Currently defined functions:
[, [[, acpid, add-shell, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk, base64, basename, beep, blkid,
blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpst, chroot,
chrt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, delgroup, deluser,
depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo, ed,
egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat,
fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fstrim, fsync, ftpd, ftpget, ftpput, fuser,
getopt, getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id,
ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm,
ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, less, linux32, linux64, linuxrc, ln,
loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lspci, lsusb, lzcat,
lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.vfat, mknod,
mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mpstat, mt, mv, nameif, nbd-client, nc, netstat, nice, nmeter,
nohup, nslookup, ntpd, od, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir,
poweroff, powertop, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile,
realpath, reboot, reformime, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake,
run-parts, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes,
setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey, shuf, slattach, sleep, smemcap, softlimit,
sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync,
sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr,
traceroute, traceroute6, true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos,
unlink, unlzma, unlzop, unxz, unzip, uptime, users, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, watch,
watchdog, wc, wget, which, who, whoami, xargs, xz, xzcat, yes, zcat, zcip
Zugriff auf den Router (ausser über das Webinterface)
Der Telnet-Zugang ist aus dem LAN ungeschützt (ohne User/Password) mit root-Rechten erreichbar. Entsprechend können grundlegende Informationen auf einfache Weise abgerufen werden. Leider ist Telnet auch vom WAN-Netzwerk aus (grundsätzlich auf allen Netzwerk-Interfaces) erreichbar, was natürlich extrem fahrlässig und unsicher ist.
Allgemeine Informationen zum System
Um auch ohne Geräte einen Überblick über das System und die Hardware zu erhalten, habe ich hier ein paar Systemabfragen (Copy/Paste) angefügt.
cpuinfo
cat cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
Hardware : Qualcomm Technologies, Inc MDM9607
Revision : 0000
Serial : 0000000000000000
Processor : ARMv7 Processor rev 5 (v7l)
ps
/ # ps
PID USER TIME COMMAND
1 root 0:22 init [5]
2 root 0:00 [kthreadd]
3 root 36:02 [ksoftirqd/0]
5 root 0:00 [kworker/0:0H]
7 root 8:02 [rcu_preempt]
8 root 0:00 [rcu_sched]
9 root 0:00 [rcu_bh]
10 root 0:00 [khelper]
11 root 0:00 [netns]
12 root 0:00 [perf]
13 root 0:02 [msm_watchdog]
14 root 0:00 [smd_channel_clo]
15 root 0:00 [smsm_cb_wq]
16 root 0:00 [kworker/u2:1]
17 root 0:00 [deferwq]
19 root 0:01 [irq/46-cpr]
20 root 0:00 [mpm]
22 root 0:00 [writeback]
23 root 0:00 [crypto]
24 root 0:00 [bioset]
25 root 0:00 [kblockd]
26 root 0:00 [system]
27 root 0:00 [devfreq_wq]
28 root 0:00 [cfg80211]
29 root 0:00 [power_off_alarm]
30 root 0:00 [kswapd0]
31 root 0:00 [fsnotify_mark]
40 root 0:00 [glink_ssr_wq]
41 root 0:52 [hwrng]
43 root 0:00 [diag_real_time_]
44 root 0:00 [diag_wq]
45 root 0:00 [DIAG_USB_diag]
46 root 0:00 [diag_cntl_wq]
47 root 0:00 [diag_dci_wq]
48 root 0:00 [DIAG_SMD_MODEM_]
49 root 0:00 [DIAG_SMD_MODEM_]
50 root 0:00 [DIAG_SMD_MODEM_]
51 root 0:00 [DIAG_SMD_MODEM_]
52 root 0:00 [DIAG_SMD_MODEM_]
53 root 0:00 [DIAG_SMD_LPASS_]
54 root 0:00 [DIAG_SMD_LPASS_]
55 root 0:00 [DIAG_SMD_LPASS_]
56 root 0:00 [DIAG_SMD_LPASS_]
57 root 0:00 [DIAG_SMD_LPASS_]
58 root 0:00 [DIAG_SMD_WCNSS_]
59 root 0:00 [DIAG_SMD_WCNSS_]
60 root 0:00 [DIAG_SMD_WCNSS_]
61 root 0:00 [DIAG_SMD_WCNSS_]
62 root 0:00 [DIAG_SMD_WCNSS_]
63 root 0:00 [DIAG_SMD_SENSOR]
64 root 0:00 [DIAG_SMD_SENSOR]
65 root 0:00 [DIAG_SMD_SENSOR]
66 root 0:00 [DIAG_SMD_SENSOR]
67 root 0:00 [DIAG_SMD_SENSOR]
68 root 0:00 [DIAG_SOCKMODEM_]
69 root 0:00 [DIAG_SOCKMODEM_]
70 root 0:00 [DIAG_SOCKMODEM_]
71 root 0:00 [DIAG_SOCKMODEM_]
72 root 0:00 [DIAG_SOCKMODEM_]
73 root 0:00 [DIAG_SOCKLPASS_]
74 root 0:00 [DIAG_SOCKLPASS_]
75 root 0:00 [DIAG_SOCKLPASS_]
76 root 0:00 [DIAG_SOCKLPASS_]
77 root 0:00 [DIAG_SOCKLPASS_]
78 root 0:00 [DIAG_SOCKWCNSS_]
79 root 0:00 [DIAG_SOCKWCNSS_]
80 root 0:00 [DIAG_SOCKWCNSS_]
81 root 0:00 [DIAG_SOCKWCNSS_]
82 root 0:00 [DIAG_SOCKWCNSS_]
83 root 0:00 [DIAG_SOCKSENSOR]
84 root 0:00 [DIAG_SOCKSENSOR]
85 root 0:00 [DIAG_SOCKSENSOR]
86 root 0:00 [DIAG_SOCKSENSOR]
87 root 0:00 [DIAG_SOCKSENSOR]
88 root 0:00 [DIAG_CNTL_SOCKE]
89 root 0:00 [qcrypto_seq_res]
110 root 0:00 [spi1]
113 root 0:00 [k_gserial]
114 root 0:00 [k_ipa_usb]
115 root 0:00 [uether]
116 root 0:00 [k_gbridge]
117 root 19:38 [cfinteractive]
119 root 0:00 [usb_bam_wq]
120 root 0:00 [irq/31-7824900.]
121 root 237:36 [irq/30-mmc0]
122 root 0:00 [soc:rpm_etm0]
123 root 0:00 [qmi_svc_event_w]
124 root 0:00 [msm_ipc_router]
125 root 0:00 [soc:modem_etm0]
126 root 0:00 [ipv6_addrconf]
127 root 0:00 [irq/198-modem]
128 root 0:00 [sysmon_wq]
129 root 0:00 [bam_dmux_rx]
130 root 0:00 [bam_dmux_tx]
131 root 1:26 [ubi_bgt0d]
132 root 0:00 [kthy_usb_discon]
133 root 0:00 [kthy_usb_switch]
134 root 0:00 [k_bam_data]
135 root 0:00 [f_mtp]
140 root 0:08 [ubifs_bgt0_0]
163 root 0:00 [ubifs_bgt0_2]
181 root 0:38 [ubifs_bgt0_1]
190 root 0:00 [ubi_bgt1d]
223 root 0:04 psmd -c /data/psm
236 root 0:00 /sbin/adbd
442 root 0:15 QCMAP_ConnectionManager /data/mobileap_cfg.xml d
578 root 0:00 [IPCRTR]
580 root 0:00 [modem_IPCRTR]
611 root 0:00 /usr/bin/netmgrd
642 root 0:00 /usr/bin/atfwd_daemon
658 root 0:00 /usr/bin/mbimd
659 root 0:00 {getty} /bin/busybox /sbin/getty -L ttyHSL0 115200 console
760 root 0:00 QCMAP_CLI
763 root 0:04 kthy_topsw_cfg
766 root 0:00 {telnetd} /bin/busybox /sbin/telnetd -l /bin/sh
772 root 2:07 kthy_topsw_daemon -i5 -d
779 root 245:42 kthy_topsw_nvconfig
781 root 9:15 kthy_topsw_router
783 root 41:51 kthy_topsw_wan_ctrl
785 root 0:00 kthy_topsw_ppp_dial
787 root 0:44 kthy_wan_nwinfor
789 root 1:28 kthy_topsw_mc
791 root 0:18 kthy_topsw_mc_startup
793 root 0:34 kthy_topsw_mdm
795 root 17:39 kthy_topsw_goahead
800 root 0:25 kthy_topsw_lan
801 root 0:00 kthy_topsw_wms
802 root 0:00 kthy_topsw_pbm
814 root 0:03 googol_mosquitto_client_version2
1047 root 0:00 [irq/78-emac_wol]
1144 root 0:08 kthy_doh_proxy -d -x -S 3600 -l /data/kthy_web/kthy_log/doh_proxy.log
1360 root 43:10 [rtw_xmit/wlan0]
1361 root 309:53 [rtw_cmd/wlan0]
1712 nobody 0:08 dnsmasq --log-async=5 -K -C /usr/kthy/kthy_conf/config/dnsmasq.conf
1868 root 0:00 /usr/lib/strongswan/ipsec/starter --daemon charon
1870 root 0:54 /usr/lib/strongswan/ipsec/charon --use-syslog --debug-dmn 1 --debug-mgr 4 --debug-ike 4 --debug-chd 1 --deb
1874 root 0:26 xl2tpd -c /etc/xl2tpd.conf
5945 root 0:02 [kworker/u2:2]
12086 root 0:03 [kworker/0:1]
13862 root 0:01 [kworker/u2:0]
15887 root 0:02 [kworker/0:0]
16199 root 0:00 [kworker/u2:3]
16803 root 0:00 [kworker/0:2]
17512 root 0:00 {sh} /bin/busybox /bin/sh
18537 root 0:00 {ps} /bin/busybox /bin/ps
mount (Dateisystem)
# mount
rootfs on / type rootfs (rw)
ubi0:rootfs on / type ubifs (rw,relatime,bulk_read,chk_data_crc)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
/dev/ubi0_2 on /softsim type ubifs (rw,relatime,chk_data_crc)
ubi0:usrfs on /data type ubifs (rw,relatime,bulk_read,chk_data_crc)
/dev/ubi1_0 on /firmware type ubifs (ro,relatime,bulk_read,chk_data_crc)
none on /sys/kernel/config type configfs (rw,relatime)
adb on /dev/usb-ffs/adb type functionfs (rw,relatime)
Boot-Log
/var/volatile/log # cat boot
Fri Jan 16 23:33:49 1970: MTD : Detected block device : /firmware for modem
Fri Jan 16 23:33:49 1970: UBI device number 1, total 478 LEBs (60694528 bytes, 57.9 MiB), available 0 LEBs (0 bytes), LEB size 126976 bytes (124.0 KiB)
Fri Jan 16 23:33:49 1970: soc: MDM9607
Fri Jan 16 23:33:49 1970: serialno: d99f9932
Fri Jan 16 23:33:49 1970: Configuring the USB gadget using ConfigFS...
Fri Jan 16 23:33:49 1970: mkdir: can't create directory 'functions/ffs.adb': Device or resource busy
Fri Jan 16 23:33:49 1970: mkdir: can't create directory 'functions/diag.diag': No such file or directory
Fri Jan 16 23:33:49 1970: /etc/rcS.d/S30usb: line 160: setprop: not found
Fri Jan 16 23:33:49 1970: Switching to composition number 0x9025
Fri Jan 16 23:33:51 1970: Starting port_bridge: done
Fri Jan 16 23:33:51 1970: hwclock: can't open '/dev/misc/rtc': No such file or directory
Thu Aug 13 19:25:32 2020: Thu Aug 13 19:25:32 UTC 2020
Thu Aug 13 19:25:32 2020: hwclock: can't open '/dev/misc/rtc': No such file or directory
Thu Aug 13 19:25:32 2020: INIT: Entering runlevel: 5
Thu Aug 13 19:25:32 2020: Configuring network interfaces... Error: argument "eth0" is wrong: Unknown device
Thu Aug 13 19:25:32 2020: kernel.core_pattern = /var/tmp/core.%e.%p.%s.%t
Thu Aug 13 19:25:32 2020: ln: /system/lib/lib: File exists
Thu Aug 13 19:25:32 2020: ln: /vendor/vendor: File exists
Thu Aug 13 19:25:32 2020: chown: /media/card: No such file or directory
Thu Aug 13 19:25:32 2020: hwclock: can't open '/dev/misc/rtc': No such file or directory
Thu Aug 13 19:25:33 2020: /etc/rc5.d/S20xl2tpd: .: line 23: can't open '/lib/lsb/init-functions'
Thu Aug 13 19:25:33 2020: Starting irsc_util: Starting irsc tool
Thu Aug 13 19:25:33 2020: Failed to open file:/etc/sec_config
Thu Aug 13 19:25:33 2020: Absent/Invalid config,Default rules apply
Thu Aug 13 19:25:33 2020: Ending irsc tool
Thu Aug 13 19:25:33 2020: done
Thu Aug 13 19:25:33 2020: Starting time_services: done
Thu Aug 13 19:25:33 2020: Starting modem dependent daemons: time_daemon_mdm:[566]: genoff_pre_init::Base = 0
Thu Aug 13 19:25:33 2020:
Thu Aug 13 19:25:33 2020: time_daemon_mdm:[566]: ats_rtc_init: Unable to open RTC device
Thu Aug 13 19:25:33 2020:
Thu Aug 13 19:25:33 2020: time_daemon_mdm:[566]: genoff_init_config: RTC initilization failed
Thu Aug 13 19:25:33 2020:
Thu Aug 13 19:25:33 2020: time_daemon_mdm:[566]: Unable to initialize bases, exiting
Thu Aug 13 19:25:33 2020:
Thu Aug 13 19:25:36 2020: Starting/Loading embms_kernel module: done loading embms_kernel module
Thu Aug 13 19:25:36 2020: Starting netmgrd: done
Thu Aug 13 19:25:36 2020: Starting qmi_shutdown_modem: done
Thu Aug 13 19:25:36 2020: Starting subsystem_ramdump: done
Thu Aug 13 19:25:36 2020: Starting miscellaneous daemons: Starting atreset: done
Thu Aug 13 19:25:36 2020: done
Thu Aug 13 19:25:36 2020:
passwd
cat passwd
root:x:0:0:root:/home/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
diag:x:53:53:diag:/nonexistent:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
messagebus:x:999:998::/var/lib/dbus:/bin/false
shadow
cat shadow
root:C98ULvDZe7zQ2:18241:0:99999:7:::
daemon:*:18241:0:99999:7:::
bin:*:18241:0:99999:7:::
sys:*:18241:0:99999:7:::
sync:*:18241:0:99999:7:::
games:*:18241:0:99999:7:::
man:*:18241:0:99999:7:::
lp:*:18241:0:99999:7:::
mail:*:18241:0:99999:7:::
news:*:18241:0:99999:7:::
uucp:*:18241:0:99999:7:::
proxy:*:18241:0:99999:7:::
www-data:*:18241:0:99999:7:::
backup:*:18241:0:99999:7:::
list:*:18241:0:99999:7:::
irc:*:18241:0:99999:7:::
gnats:*:18241:0:99999:7:::
diag:*:18241:0:99999:7:::
nobody:*:18241:0:99999:7:::
messagebus:!:18241:0:99999:7:::
Zwar wird das root-Passwort gar nicht benötigt, trotzdem habe ich online geschaut ob der Hash schon gecrackt wurde. Jawohl: Das Passwort lautet: 1020

group
cat group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
input:x:19:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:
audio:x:29:
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
shutdown:x:70:
users:x:100:
sdcard:x:1015:diag
diag:x:53:
rebooters:x:1301:diag
nogroup:x:65534:
netdev:x:999:
messagebus:x:998:
iptables
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
chain_kthy_input all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
chain_kthy_forward all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain chain_kthy_forward (1 references)
target prot opt source destination
chain_lan_mac all -- anywhere anywhere
chain_lan_ip all -- anywhere anywhere
chain_portal all -- anywhere anywhere
chain_specialapp all -- anywhere anywhere
chain_mqtt all -- anywhere anywhere
Chain chain_kthy_input (1 references)
target prot opt source destination
chain_wanping all -- anywhere anywhere
chain_service_ctrl all -- anywhere anywhere
Chain chain_lan_ip (2 references)
target prot opt source destination
zone_lan_ip all -- anywhere anywhere
policy_lan_ip all -- anywhere anywhere
Chain chain_lan_mac (1 references)
target prot opt source destination
zone_lan_mac all -- anywhere anywhere
policy_lan_mac all -- anywhere anywhere
Chain chain_mqtt (2 references)
target prot opt source destination
zone_mqtt all -- anywhere anywhere
policy_mqtt all -- anywhere anywhere
Chain chain_portal (2 references)
target prot opt source destination
zone_portal all -- anywhere anywhere
policy_portal all -- anywhere anywhere
Chain chain_service_ctrl (2 references)
target prot opt source destination
zone_service_ctrl all -- anywhere anywhere
policy_service_ctrl all -- anywhere anywhere
Chain chain_specialapp (2 references)
target prot opt source destination
zone_specialapp all -- anywhere anywhere
policy_specialapp all -- anywhere anywhere
Chain chain_wanping (1 references)
target prot opt source destination
zone_wanping all -- anywhere anywhere
policy_wanping all -- anywhere anywhere
Chain policy_kthy_forward (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain policy_kthy_input (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain policy_lan_ip (1 references)
target prot opt source destination
chain_portal all -- anywhere anywhere
Chain policy_lan_mac (1 references)
target prot opt source destination
chain_lan_ip all -- anywhere anywhere
Chain policy_mqtt (1 references)
target prot opt source destination
policy_kthy_forward all -- anywhere anywhere
Chain policy_portal (1 references)
target prot opt source destination
chain_specialapp all -- anywhere anywhere
Chain policy_service_ctrl (1 references)
target prot opt source destination
policy_kthy_input all -- anywhere anywhere
Chain policy_specialapp (1 references)
target prot opt source destination
chain_mqtt all -- anywhere anywhere
Chain policy_wanping (1 references)
target prot opt source destination
chain_service_ctrl all -- anywhere anywhere
Chain zone_lan_ip (1 references)
target prot opt source destination
Chain zone_lan_mac (1 references)
target prot opt source destination
Chain zone_mqtt (1 references)
target prot opt source destination
Chain zone_portal (1 references)
target prot opt source destination
Chain zone_service_ctrl (1 references)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:http
DROP tcp -- anywhere anywhere tcp dpt:https
Chain zone_specialapp (1 references)
target prot opt source destination
Chain zone_wanping (1 references)
target prot opt source destination
DROP icmp -- anywhere anywhere icmp echo-request
Hi Markus,
Great analisys!
I’m dealing with a similar router but in an outdoor box.
I’m relly new to linux and I’m trying to get the frquency band the modem is connected to.
Did you se any option to read it from console or running any script?
Thanks a lot in advance.
Sergio
Hallo Markus,
Tolle Analysen!
Ich habe es mit einem ähnlichen Router zu tun, aber in einer Outdoor-Box.
Ich bin wirklich neu in Linux und versuche, das Frequenzband zu erhalten, mit dem das Modem verbunden ist.
Haben Sie eine Option gesehen, um es von der Konsole zu lesen oder ein Skript auszuführen?
Vielen Dank im Voraus.
Sergio
Hallo Sergio!
Leider kann ich dir keine Antwort dazu geben – und die Hardware, zum selber ausprobieren, habe ich momentan nicht zur Verfügung. Wenn es eine Möglichkeit gibt, wäre diese sicher im Manual vom Linux-Treiber des Qualcomm-Modems aufgeführt. Weiterführende Informationen zu den Quectel-Modems habe ich hier gefunden: https://osmocom.org/projects/quectel-modems/wiki/EC25
Ich hoffe Du findest eine Lösung und würde mich freuen, diese auch hier im Blog zu veröffentlichen!
Mit Linux ist fast alles möglich… Weiterhin viel Freude beim Experimentieren und viel Erfolg!
Tipp: Schau doch, ob es bei dir in der näheren Umgebung eine Linux User-Gruppe gibt. Diese helfen meistens gerne weiter 🙂
Markus