
От UART до Root: Взлом Xiaomi C200 через U-Boot
В этом репозитории я покажу, как получил доступ к интерфейсу UART даже без обычного
набора открытых выводов / тестовых площадок, используя U-Boot и трюки для получения root на раннем этапе
и в конечном итоге дампа прошивки.
На плате очевидны несколько ключевых моментов:
Сначала я пошёл по очевидным кандидатам для прямого доступа к UART:
рядом есть 4 тестовые площадки, которые, похоже, являются Tx, Rx, землёй и питанием,
но проверка мультиметром дала неверные показания, как видно на рисунке.
Я попробовал большинство других тестовых площадок, но так и не смог получить правильных показаний, поэтому пришлось
сменить стратегию.
Поскольку на плате не осталось разъёмов или тестовых площадок, которые могли бы помочь,
я решил пойти через источник: подключиться к выводам процессора и получить
оболочку UART таким образом. Я скачал даташит на этот процессор и определил
выводы протокола UART.

Теперь нужно только найти землю на плате и подключить:
Я использовал несколько щупов PCBite и USB 2 TTL адаптер для этой настройки.

Теперь мы можем использовать picocom, чтобы получить нужную нам оболочку UART.
sudo picocom -b 115200 /dev/ttyUSB0
Если ничего не делать, я получал только журнал загрузки и никакой оболочки в конце процесса загрузки,
поэтому мне пришлось прервать U-Boot, сразу нажав Enter.
Получив оболочку U-Boot, я сначала вывел переменные окружения.
Важные для нас вещи:
Чтобы быстро получить root-доступ, я воспользовался трюком с изменением команды init с помощью setenv,
чтобы получить оболочку вместо запуска бинарника linuxrc, затем вручную загрузить память
и запустить устройство (по сути скопировав команду bootcmd).
Теперь после завершения загрузки я окажусь в ранней оболочке с практически ничем не запущенным
на системе, так что я запущу исходный бинарник linuxrc в фоне и проверю
открытые порты на этой системе.
Безрезультатно! Камера общается только со своим облаком на "47.237.75.249", без открытого веб-интерфейса
для возни.
Поскольку реверс-инжиниринг бинарника облачной связи выходит за рамки моего исследования,
здесь я решил закончить своё исследование :)
Немного дополнительной информации для тех, кому интересно поиграться с прошивкой: вот
как её получить.
Та же настройка, что и раньше с UART, но на этот раз только зондирование и загрузка
памяти из флеша в RAM без запуска в неё.
Затем можно вывести данные из памяти RAM и записать вывод терминала
(на этот раз с minicom) в файл, немного очистить его с помощью Python и получить
прошивку, сопоставление binwalk и bootargs поможет назвать каждый раздел.
