Скажем так ... просто для развлечения ... Я получил 2 x 3 пакета Tenda MW6, чтобы покрыть большую область (в помещении и на открытом воздухе). У меня было 3 из моих MW6, обработанных с Ethernet (на самом деле, это адаптеры моста PLC).
В конфигурации «по умолчанию» это работает нормально, однако у меня уже был хороший маршрутизатор OpenWRT и несколько устройств/сервисов. По Dellaul MW6 работает в режиме DHCP, создает подсеть 192.168.5.x и ставит всех туда. Но это 1) приносит дополнительный слой Nat, 2) ломает мои услуги.
Поэтому я решил переключить его в режим Bridge , в котором, согласно руководству, он должен отключить все свои сетевые услуги и просто выступить в качестве моста.
С первого взгляда это сработало, но потом я понял, что некоторые из моих устройств поняли неправильные IPS, а затем понял, что «основной» куб работает своим собственным Luna Park с блэкджеком и проститутками DHCP -сервер. Абсолютно нет страницы веб -администрирования, только телефонное приложение. Я не вижу способов отключить его оттуда.
NMAP говорит, что DHCP -сервер работает, и он перехватывает всех клиентов WiFi и дает IP -адреса из своего пула. И само собой разумеется, эти адреса неверны, а не то, что мне нужно. Googled, обнаружил свою поддержку - та же проблема, однако человек говорит, что dhcp authoritative='1' на главном маршрутизаторе OpenWRT работает для него, но он никогда не работал для меня.
Итак, я начал расследование - как я могу отключить сервер DHCP.
Немногие порты открылись на кубе. Ничто не похоже на Telnet или SSH с самого начала, однако после того, как я подключился к UART - я заметил, что TelnetD запускается, когда вы держите кнопку сброса в течение 3 секунд (6 секунд возвращают настройки по умолчанию).
PORT STATE SERVICE
23/tcp open telnet <--- opened only after you hold Reset for 3 seconds
5500/tcp open hotline
9000/tcp open cslistener
DHCP -сервер встал
sudo nmap -sU -p 67 --script=dhcp-discover 192.168.5.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-18 20:04 MSK
Nmap scan report for _gateway (192.168.5.1)
Host is up (0.0027s latency).
PORT STATE SERVICE
67/udp open dhcps
| dhcp-discover:
| DHCP Message Type: DHCPACK
| Server Identifier: 192.168.5.1
| IP Address Lease Time: 23h30m42s
| Subnet Mask: 255.255.255.0
| Broadcast Address: 192.168.5.255
| Router: 192.168.5.1
| Domain Name Server: 192.168.5.1
|_ Domain Name: tendawifi.com
MAC Address: 04:95:E6:1A:96:E0 (Tenda Technology,Ltd.Dongguan branch)
Nmap done: 1 IP address (1 host up) scanned in 0.75 seconds
PORT STATE SERVICE
1723/tcp closed pptp
Более тщательное изучение прошивки, необходимого для понимания того, что открыто и когда.
Я попробовал root/admin/support/user with admin/password/user/1234/12345678 и некоторые другие .. нет, не работая.
Открытие куба очень просто. Из интересного - uart socket и soiC -8 SPI Flash. Основной чип, закрытый радиатором - Realtek RTL8197F

115200 8n1. Начиная с контакта 1 (ближе к вспышке SPI): VCC, RX, TX, GND.
Bohong BH25Q64 SPI Flash, 8MB. Техническая спецификация
Прошивка недоступна в Интернете. Телефонное приложение ищет это в Tenda Cloud и загружает себя. У моих кубиков есть последняя прошивка, поэтому не может нюхать по сети, где это занимается новым. Только я могу сказать, что это приложение имеет свой собственный протокол общения с Tenda Cloud.
К сожалению, Chip Clamp не работал, он включает в себя все устройство и начинает связь с Chip. Полностью это полностью. Не забудьте каптон. 
Я не читаю Flash Chips каждый день, и у меня нет специального устройства программирования для этого. Однако я обнаружил устройство FTDI FT232H, которое я использовал в качестве отладчика openocd JTAG для ESP32. Этот чип имеет режим SPI и может работать в качестве мастера. Пинота взята из таблицы данных.
| FT2232H Порт | Функция | Флэш -штифт |
|---|---|---|
| Adbus0 | SCK | 6 |
| Adbus1 | Моси | 5 |
| Adbus2 | Мисо | 2 |
| Adbus3 | CS | 1 |
Другие выводы флэш -чипа 4 - GND, 8 - VCC 3.3V, 3 и 7 перейдут в VCC.

$ flashrom -p ft2232_spi:type=2232H,port=A
И это приносит только грусть ...
flashrom v0.9.9-r1954 on Linux 4.18.0-25-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
Found Generic flash chip "unknown SPI chip (RDID)" (0 kB, SPI) on ft2232_spi.
===
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to [email protected] if any of the above operations
work correctly for you with this flash chip. Please include the flashrom log
file for all operations you tested (see the man page for details), and mention
which mainboard or programmer you tested in the subject line.
Thanks for your help!
No operations were specified.
Посмотрел вокруг и нашел сайт Skproj с приложением Sketch и .net (на русском языке), которое хорошо для меня работало, чтобы читать китайский флеш -чип.
Я использовал плату Nodemcu ESP8266, так как она 3,3 В, и я не хотел думать о конверсии уровня 5 В <> 3 В.
ВАЖНО : SPI Chip должен быть подключен к HSPI PINS GPIO12-GPIO14 в соответствии с официальной документацией.
serprog , которые работают со flashrom , но я не смог быстро найти его порт для ESP8266 
Чтобы облегчить мигание, я только что купил пару чипсов Winbond W25Q64FV. Они должным образом работают со flashrom , и мне не нужно запускать Windows для Flash Chip. Я написал Flash Dump в новый чип с
flashrom -p ft2232_spi:type=2232H,port=A -w image.bin
Tenda Bootloader обнаружил новый флэш -чип и начал нормально.
Прямой пробег Binwalk дает много регулярных выводов.
binwalk all.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
35096 0x8918 CRC32 polynomial table, little endian
36192 0x8D60 gzip compressed data, maximum compression, from Unix, last modified: 2018-04-20 02:17:42
206872 0x32818 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 6890804 bytes
2261010 0x228012 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 3071844 bytes, 378 inodes, blocksize: 131072 bytes, created: 1902-05-30 15:13:04
6160384 0x5E0000 JFFS2 filesystem, little endian
Однако, надеясь иметь возможность склеить все вместе, я разделил изображение Flash на 9 файлов в соответствии с блоками MTD в Bootlog с dd
flash vendor: BOHONG
m25p80 spi0.0: BH25Q64 (8192 Kbytes) (55000000 Hz)
m25p80 spi0.0: change speed to 55000000Hz, div 2
Kernel code size:0x1f8012
9 rtkxxpart partitions found on MTD device m25p80
Creating 9 MTD partitions on "m25p80":
0x000000000000-0x000000800000 : "ALL"
0x000000000000-0x000000020000 : "Bootloader"
0x000000020000-0x000000030000 : "CFG"
0x000000030000-0x0000005c0000 : "KernelFS"
0x000000228012-0x0000005c0000 : "RootFS"
0x0000005c0000-0x0000005d0000 : "CFM"
0x0000005d0000-0x0000005e0000 : "CFM_BACKUP"
0x0000005e0000-0x0000007f0000 : "LOG"
0x0000007f0000-0x000000800000 : "ENV"
Не ясно для меня, почему KernelFS и RootFS пересекаются в соответствии с таблицей MTD.
Просто unsquashfs чтобы распаковывать файловую систему. Его Busybox на основе.
Cat /etc/passwd
root:$1$nalENqL8$jnRFwb1x5S.ygN.3nwTbG1:0:0:root:/:/bin/sh
Кошка /etc/shadow
root:$1$OVhtCyFa$7tISyKW1KGssHAQj1vI3i1:14319::::::
Кошка /etc/inittab
::sysinit:/etc_ro/init.d/rcS
ttyS0::respawn:/sbin/sulogin
::ctrlaltdel:/bin/umount -a -r
::shutdown:/usr/sbin/usb led_off
Первая попытка была очень наивной: давайте обновляем /etc/inittab и вернем его.
Изменен ttyS0::respawn:/sbin/sulogin на ttyS0::respawn:/bin/login -f root
Обновил файл, упакованные файлы в SQUSHFS Back - OOOPS, он больше, чем он был. Исследуемое сжатие - это было изначально XZ , но mksquashfs использовали LZMA по умолчанию. Изменено на XZ, теперь он довольно же размер и подходит для Rootfs MTD. Файл Newrootfs с мягкой лентой с FF, пока не достигнет оригинального размера раздела MTD. Объединил все файлы обратно в один файл изображения, написал для Flash, загрузите ...
Booting...
init_ram
00000202 M init ddr ok
DRAM Type: DDR2
DRAM frequency: 533MHz
DRAM Size: 128MB
JEDEC id EF4017, EXT id 0x0000
found w25q64
flash vendor: Winbond
w25q64, size=8MB, erasesize=64KB, max_speed_hz=29000000Hz
auto_mode=0 addr_width=3 erase_opcode=0x000000d8
=>CPU Wake-up interrupt happen! GISR=89000004
---Realtek RTL8197F boot code at 2018.04.20-10:17+0800 v3.4.11B.9 (999MHz)
Mac addr:04-95-e6-1a-96-e0
lan_wan_isolation Initing...
config: lan port mask is 0x000000f7
config: wan port mask is 0x000000e8
lan_wan_isolation Initing has been completed.
lan_wan_isolation Initing...
config: lan port mask is 0x000000f7
config: wan port mask is 0x000000e8
lan_wan_isolation Initing has been completed.
wait for upgrage
port[0] link:down
port[1] link:down
port[2] link:down
port[3] link:down
port[4] link:down
irq:0x00008080
rootfs checksum error at 00228012!
<RealTek>
Как я мог забыть о CRC ... Я потратил пару часов, пытаясь найти правильный способ вычисления CRC - найден RSDK, пытался понять создание изображения ... слишком много для моего мозга сейчас.
Давайте попробуем что -нибудь еще.
Согласно журналу загрузки, существует процесс netctrl , который начинается рано и изменяет пароль root.
argv[0] = netctrl
netctrl
prod_change_root_passwd(83)
Итак, давайте сделаем трудный путь. Попробуйте разобрать и изменить код. Оу. Никогда не видел MIPS ASM ...
Просмотр файлов, найденных, многие из них используют prod_change_root_passwd , netctrl использует его и выглядит как сама функция, определенная в /lib/libcommonprod.so .
Open /bin/netctrl в IDA. Открытая функция main . Сначала он очищает буферы, затем считывает параметр sys.role из конфигурации и зависит от этого либо спит, либо вызывает внешнюю функцию prod_change_root_passwd без параметров.

Open /lib/libcommonprod.so . Открыть функцию prod_change_root_passw . Также сначала очищает буферы, затем считывает некоторые параметры из config и вызовов Encode64() со значением либо wl2g.ssid0.wpapsk_psk или TD_WLAN1_SSID0_PWD .
А затем просто устанавливает пароль root через командную строку (echo %s;sleep 1;echo %s) | passwd root -a s> /dev/null

Вуаля!
Рассчитан BASE64 моего пароля по умолчанию с наклейки, подключенного через последовательный ...
Normal startupGive root password for system maintenance
(or type Control-D for normal startup):
System Maintenance Mode
~ #
~ # uname -a
Linux NOVA-xxxxxxxxxxxx 3.10.90 #4 Mon Jul 2 10:57:35 CST 2018 mips GNU/Linux
В основном здесь нет ничего интересного. Нет пользователей, кроме корня, зарегистрировано в системе.
~ # cat /proc/cpuinfo
system type : RTL8197F
machine : Unknown
processor : 0
cpu model : MIPS 24Kc V8.5
BogoMIPS : 666.41
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa : mips1 mips2 mips32r2
ASEs implemented : mips16
shadow register sets : 4
kscratch registers : 0
core : 1
VCED exceptions : not available
VCEI exceptions : not available
~ # ls -l /sys/class/gpio/
total 0
--w------- 1 root root 16384 Jan 1 1970 export
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio18 -> ../../devices/virtual/gpio/gpio18
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio19 -> ../../devices/virtual/gpio/gpio19
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio58 -> ../../devices/virtual/gpio/gpio58
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
--w------- 1 root root 16384 Jan 1 1970 unexport
~ # ls -l /sys/devices/platform/
total 0
drwxr-xr-x 2 root root 0 Jul 18 21:12 alarmtimer
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_i2c_pin.1
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_i2c_pin.2
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_reset_pin.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_btn.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.1
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.2
drwxr-xr-x 3 root root 0 Jan 1 1970 serial8250
drwxr-xr-x 3 root root 0 Jan 1 1970 spi-sheipa.0
-rw-r--r-- 1 root root 16384 Jul 18 21:12 uevent
И вот процессы работают
~ # ps
PID USER TIME COMMAND
1 root 0:01 init
2 root 0:00 [kthreadd]
3 root 0:40 [ksoftirqd/0]
4 root 0:00 [kworker/0:0]
5 root 0:00 [kworker/0:0H]
6 root 0:01 [kworker/u2:0]
7 root 0:00 [khelper]
8 root 0:00 [kworker/u2:1]
75 root 0:00 [writeback]
78 root 0:00 [bioset]
79 root 0:00 [crypto]
81 root 0:00 [kblockd]
84 root 0:01 [spi0]
102 root 0:00 [kworker/0:1]
106 root 0:00 [kswapd0]
154 root 0:00 [fsnotify_mark]
708 root 0:00 [mtdblock0]
713 root 0:00 [mtdblock1]
718 root 0:00 [mtdblock2]
723 root 0:00 [mtdblock3]
728 root 0:00 [mtdblock4]
733 root 0:00 [mtdblock5]
738 root 0:00 [mtdblock6]
743 root 0:00 [mtdblock7]
748 root 0:00 [mtdblock8]
802 root 0:00 [deferwq]
860 root 0:03 klogd -n
862 root 0:00 monitor
863 root 1:55 sh /usr/bin/ugw_watchdog.sh
869 root 0:00 syslogd -f /var/etc/syslog.conf -s 50
914 root 0:15 cfmd
1030 root 0:00 [jffs2_gcd_mtd7]
1032 root 0:11 timer
1033 root 0:00 logserver
1034 root 0:14 netctrl
1069 root 0:01 device_list
1071 root 3:20 sh /usr/bin/mesh_op.sh
1530 root 0:10 pann
1531 root 0:00 gpio_ctrl
1532 root 0:00 mesh_status_check
1534 root 0:19 network_check
1570 root 0:00 redis-server /etc_ro/redis.conf
1571 root 0:01 cmdsrv -l tcp://0.0.0.0:12598 -R tcp://127.0.0.1:6379
1572 root 0:00 [kworker/0:1H]
1573 root 0:05 confsrv
1599 root 0:01 dhcps -C /etc/dhcps.conf -l /etc/dhcps.leases -x /etc/dhc
1931 root 0:00 ucloud -l 4
1962 root 0:00 sntp 1 28800 43200
2370 root 0:00 ftd -br br0 -w wlan0 wlan1 -pid /var/run/ft.pid -c /tmp/f
2375 root 0:00 pathsel -i wlan-msh -P -t 9
2387 root 0:00 multiWAN
2488 root 0:00 dhcpcd_wan1 -c /etc/wan1.ini -m 1 eth1 -h NOVA-0495e61a96
2567 root 0:00 dnrd -t 3 -M 600 --cache=off -b -R /etc/dnrd -r 3 -s 192.
2955 root 0:00 miniupnpd -f /etc/miniupnpd.config -w
2991 root 0:00 igmpproxy
10388 root 0:00 -sh
12125 root 0:00 sleep 5
12155 root 0:00 sleep 1
12156 root 0:00 ps
У меня есть корневой доступ к новой Tenda MW6, который делает меня счастливым, так как я ненавижу иметь черные ящики.
Корневой пароль - это только ваш текущий пароль Wi -Fi, закодированный с Base64.
(Спасибо @crees, чтобы закончить исследование DHCP. Протестировано на MW5, но у него есть аналогичное программное обеспечение)
Утилита cfm может быть обнаружена в сценариях в /usr/sbin , и используется для манипулирования параметрами, которые сохраняются в результате перезагрузки (вы можете осмотреть хранилище непосредственно с помощью cat /dev/mtd5 ).
~ # cfm get ^dhcps
dhcps.Staticip1=
dhcps.Staticnum=0
dhcps.apmode.list1=1;br1;192.168.1.31;192.168.1.254;192.168.1.1;255.255.255.0;1440;192.168.1.66;192.168.1.70;host
dhcps.apmode.list2=1;br1;192.168.1.2;192.168.1.30;192.168.1.1;255.255.255.0;1440;192.168.1.66;192.168.1.70;dev
dhcps.en=1
dhcps.list1=1;br0;192.168.1.31;192.168.1.254;192.168.1.1;255.255.255.0;1440;192.168.1.1;;host
dhcps.list2=1;br0;192.168.1.2;192.168.1.30;192.168.1.1;255.255.255.0;1440;192.168.1.1;;dev
dhcps.listnum=2
dhcps.static.list1=1 14:DA:E9:38:EC:40 192.168.1.70
dhcps.static.listnum=1
Как правило, вам нужно сначала настроить пересылку портов, так как в противном случае пользовательский интерфейс может не распознать ваше устройство.
Для dhcps.listnum , если вы установите его на 0, он не пишет A /etc/dhcps.conf на перезагрузку, отключая DHCP.
~ # cfm set dhcps.listnum 0
Это будет продолжаться через перезагрузку и может быть легко отменено, изменяя dhcps.listnum обратно на исходное значение, и сброс заводов также отменит его.
Вам разрешено только 8 правил пересылки портов в приложении, что довольно ограничивает. Настройка работы DMZ (или вы также можете связываться с правилами пересылки, используя CFM- правила Virtualser выглядят довольно просто.
~ # cfm set wan1.dmzip ip.address.here
~ # cfm set wan1.dmzen 1
~ # reboot
Похоже, что многие бизнес -логика выполняется в C/C ++ и скомпилирована (против создания много сценариев). Другое осложнение - это не наложение FS, все монтированные R/O, за исключением /dev/mtdblock7 on /tmp/log/crash type jffs2 (rw,relatime) - настройки хранятся непосредственно в /dev/mtd5 и манипулируются с использованием cfm .
Это было весело.