Как стать автором
Обновить

Исследование прошивки Mi Router 4A Giga Version. Получение интерфейса командной оболочки Linux

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров7.2K
Всего голосов 36: ↑36 и ↓0+36
Комментарии17

Комментарии 17

НЛО прилетело и опубликовало эту надпись здесь

Скорее всего, количество отправляемой информации напрямую зависит от версии прошивки.


Прошивки, предназначенные для китайского рынка, содержат больше специфических для Китая приложений.

Еще не двигался в этом направление, мне пока интересно, кому-то понравится эта статья )

Работа проделана большая, но... Может проще было разобрать образ прошивки? (Даже не из SPI flash, а тупо из образа поставляемого вендором для обновления роутера, хотя конечно стоковая прошивка и шифрованная м.б., это уже смотреть нужно).
И после поиска и нахождения всех разделов flash (в прошивке или дампе flash) варианты -
1) Поправить переменные загрузки в том разделе flash где они хранятся. (он обычно мелкий и в нем перечислены байт значений переменных загрузки).
2) Поправить root раздел (обычно init скрипты) где проверяются boot переменные или же явным образом в этих init скриптах стартовать демоны ssh/telnet/консоли
3) Использовать uboot этой версии от этой платформы без блокировки ввода с клавиатуры. Риск этих экспериментов замены в прошивке, и что можно "окирпичить" роутер, нивелируется возможностью восстановить оригинальную прошивку spi flash программатором.

Конечно Ваши решения упрощают, но мне было интересно разобраться более детально, как все устроено)

Было бы интересно посмотреть на bootcmd, да и весь env.

А вы пробовали получить доступ к шеллу более простыми способами прежде, чем вскрывать пациента и паять? Вот здесь говорят, что широко известный эксплоит работает на этом роутере: https://openwrt.org/inbox/toh/xiaomi/xiaomi_mi_router_4a_gigabit_edition#notes_on_firmware_exploit_procedure

Я то и сам непрочь пошалить программатором и паяльником (см. Xiaomi AC2350 например, которому я стоковую прошивку пересобирал, добавляя плюшек, и куда я в итоге портировал OpenWRT). Но я обычно иду по пути наименьшего сопротивления и прибегаю к более агрессивным действиям только в случае, если простые пути недоступны.

В любом случае благодарю за статью!

Емнип, я на двух таких роутерах openwrt и поставил через уязвимость веб-морды. Кажется, по этому туториалу.

Емнип, самой большой проблемой было перевести китайские иероглифы, будучи подключённым к этому роутеру, когда выход в интернет осуществляется через другой. Приходилось фоткать экран телефоном и пихать в гуглопереводчик.

Запоздавший на неделю совет: если в ПК\Ноутбуке только один выход в сеть, то можно обзавестись переходником USB-to-RJ45, чтобы одновременно иметь выход в интернет и подключать различные сетевые устройства.

Судя по версиям U-Boot и ядра похоже на старые ZyXEL Keenetic. Там тоже mipsel, кажется Ralink 3052

Вижу Xiaomi - хочу перепрошить)

Ну, если есть человек с SPI-программатором, то система беззащитна. Ну хорошо, не всякая и не совсем.

Есть задокументированный формат области переменных окружения U-Boot, что позволяет (при наличии программатора) менять их как заблагорассудится. Хуже когда загрузчик собран без возможности сохранения переменных - но это скорее планшетно-телефонное, чем роутерное.

И еще - консоль хорошо, но особого смысла в этом нет. Разве что DTB декомпилировать или через /proc/device-tree восстановить и попытаться на современные ядра насадить... И то нужно, чтобы ядро чип поддерживало. Тогда можно попробовать OpenWRT насадить или вообще кастомную систему с каким-нить BuildRoot'ом сварганить... Но это уже тема совсем других разговоров... Хотя... Я б взял на работу того, кто это сможет.

Ну, если есть человек с SPI-программатором, то система беззащитна. Ну хорошо, не всякая и не совсем.

К сожалению нет. У меня в одном устройстве процессор включается при подаче питания на spi флешку. И тоже начинает читать флешку.

Есть задокументированный формат области переменных окружения U-Boot, что позволяет (при наличии программатора) менять их как заблагорассудится

Их можно зашифровать. Или разрешить менять в заданном диапазоне. Хотя конечно, в данном случае автор стреляет из пушек по воробьям.

Хуже когда загрузчик собран без возможности сохранения переменных - но это скорее планшетно-телефонное, чем роутерное

В планшето-телефонах обычно стоит андрюша на плечах LK. У которого нет переменных вообще

Android'ный boot.img (kernel+ dtb + initrd) тоже кто-то прочитать должен. Бывает по разному. Бывает вендорский код, а бывает и самый настоящий U-Boot.

И шуточки с питанием - это не страшно. Страшна криптография и подписи. Вот тут появляется несколько вариантов, но ни одного хорошего.

Идеи. Просили же идеи:
1. Не припаивать провода так. Или изолировать (не сдержался).
2. minicom (старый как мои ...) откройте для себя эту древнюю программу, позволяющую не только читать, но и писать. (Вот и статья не нужна вообще?)
hint: подцепиться по uart, запустить minicom, при загрузке проспамить Esc и попасть в меню U-Boot

Ну пайка у автора конечно не фонтан (хотя и не ужас-ужас), но войти в меню кастомизированного вендором U-Boot'а не всегда возможно, "заспамив Esc". Бывает, что ввод на этом этапе отключен и для того, чтобы вогнать U-Boot в состояние, в котором он вообще начнёт реагировать на ввод, необходимы некоторые подпрыгивания с бубном.

Added: И да, в Putty прекрасно работает ввод, так что выпад по поводу терминального софта был точно не уместен - автор на Win, так что Putty вполне адекватный выбор.

Added #2: Например на Xiaomi AC2350 мне приходилось загонять роутер в режим "что-то пошло не так" reset'ом, чтобы попасть в меню U-Boot: https://4pda.to/forum/index.php?showtopic=996681&st=540#entry103414146

Зарегистрируйтесь на Хабре, чтобы оставить комментарий