在本仓库中,我将展示我是如何在没有常见的暴露引脚/测试点的情况下访问 UART 接口的,利用 U-Boot 和一些技巧在早期阶段获得 root 权限,并最终转储固件。
从 PCB 上可以明确看出几个关键点:
首先,我尝试了那些最直接的 UART 访问候选点,有 4 个排成一排的测试点,看起来像是 Tx、Rx、地线和电源,但用万用表测试时读数不对,如图所示。我尝试了大多数其他测试点,仍然找不到正确的读数,因此我不得不改变策略。
由于板上既没有连接器,也没有可用的测试点,我决定从源头入手,直接连接到处理器引脚,以此获得 UART shell。我查阅了该处理器的数据手册,并确定了 UART 协议引脚。
现在我们只需在板上找到地线,然后连接:
我使用了一些 PCBite 探针和 USB 转 TTL 适配器来完成这个设置。

现在我们可以使用 picocom 来获得我们想要的 UART shell。
sudo picocom -b 115200 /dev/ttyUSB0
如果不做任何操作,我只能在启动过程结束时看到启动日志,而不会获得 shell,所以我必须立刻按回车键中断 U-Boot。在进入 U-Boot shell 后,我首先打印了环境变量。
对我们重要的内容有:
为了快速获得 root 权限,我可以利用 setenv 修改 init 命令的技巧,这样我会得到一个 shell,而不是运行 linuxrc 二进制文件,然后我可以手动加载内存并启动设备(本质上就是复制 bootcmd 命令)。
现在,当启动完成后,我将进入一个早期 shell,系统上几乎没有运行任何东西,所以我将在后台运行原始的 linuxrc 二进制文件,并检查系统上是否有开放的端口。
运气不佳!该摄像头只与其云服务器 " 47.237.75.249 " 通信,没有可供摆弄的 Web 管理界面。
由于逆向云通信二进制文件不在我的研究范围内,因此我决定在此结束我的研究 :)
给对玩固件感兴趣的读者一个额外内容,以下是如何获取固件。
与之前的 UART 设置相同,但这次只探测并将闪存中的数据加载到 RAM,而不启动进入系统。
然后,你可以打印 RAM 内存中的数据,并记录终端输出(这次使用 minicom)保存到文件,再用 python 稍作清理,即可获得固件,结合 binwalk 和 bootargs 帮助命名每个分区。
