
Do UART ao Root: Invadindo o Xiaomi C200 via U-Boot
Neste repositório, mostrarei como obtive acesso à interface UART mesmo sem o conjunto comum de pinos expostos / pads de teste, usando U-Boot e truques para obter root em um estágio inicial e, eventualmente, extrair o firmware.
Há algumas coisas importantes claras na PCB
Primeiro, fui para os candidatos óbvios para um acesso UART direto. Há 4 pads de teste em uma fileira que parecem ser Tx, Rx, GND e alimentação, mas testá-los com um multímetro deu leituras erradas, como visto na imagem. Tentei a maioria dos outros pads de teste e ainda não consegui encontrar a leitura correta, então tive que mudar de estratégia.
Como não há conectores restantes na placa nem pads de teste que possam ajudar, decidi ir direto à fonte, conectando-me aos pinos do processador e obtendo um shell UART dessa forma. Peguei o datasheet daquele processador e identifiquei os pinos do protocolo UART.

Agora só precisamos encontrar o aterramento na placa e conectar:
Usei algumas pontas de prova PCBite e um adaptador USB 2 TTL para esta configuração.

Agora podemos usar picocom para obter o shell UART que procuramos.
sudo picocom -b 115200 /dev/ttyUSB0
Se nada for feito, eu só obtenho os logs de boot e nenhum shell no final do processo de inicialização, então tive que interromper o U-Boot pressionando Enter imediatamente. Ao obter um shell U-Boot, primeiro imprimi os argumentos de ambiente.
As coisas importantes para nós são:
Para obter acesso root rapidamente, posso usar o truque de alterar o comando init com setenv para obter um shell em vez de executar o binário linuxrc; então posso carregar a memória manualmente e inicializar o dispositivo (essencialmente copiando o comando bootcmd).
Agora, quando a inicialização terminar, serei jogado em um shell inicial com essencialmente nada rodando no sistema, então executarei o binário linuxrc original em segundo plano e verificarei portas abertas neste sistema.
Sem sorte! A câmera só se comunica com sua nuvem em " 47.237.75.249 ", nenhuma interface web exposta para mexer. Como reverter o binário de comunicação com a nuvem está fora do escopo da minha pesquisa, foi aqui que decidi encerrar minha pesquisa :)
Um extra para quem estiver interessado em brincar com o firmware: aqui está como obtê-lo. Mesma configuração de antes com o UART, mas desta vez apenas sondando e carregando a memória da flash para a RAM sem inicializá-la. Então você pode imprimir os dados da memória RAM e gravar a saída do terminal (com minicom desta vez) para salvar em um arquivo, limpá-lo um pouco com Python e obter o firmware; combinar binwalk e bootargs ajuda a nomear cada seção.
