烽火HG110-B
家庭网关是一种大多由联通/电信赠送的智能家庭网关,手中分析的这款是14年的老产品了,是联通定制的家庭网关。该网关除了具有“猫”功能,同时还具有路由功能,不过默认情况下,运营商并不提供配置Wifi
的管理员密码,即功能已经被锁死。
去除外壳,它的样子。
在外部,需要收集的信息,包括板子的UART
口,使用的Flash型号,开放的端口。首先可以看到UART
是固定好的,通过使用电压表测量,是可以正常使用的。通过查看PCB
板,找到了疑似的Flash
,通过使用电子放大镜查到了型号【MX25L3206E】。(现在的角度看来,没有抹去芯片型号,也可以算是一个存在的问题了)
使用的廉价的电子放大镜:
加电运行后,使用树莓派进行了端口扫描:
敞开盖子工作的树莓派。。这代树莓派实在是太热了
经过对这些端口的尝试,没有发现可利用端口,本来以为老机器会由telnet
之类的呢。
从现在的角度看,这样一个IoT设备没有移除UART口是不负责任的。从看到内部的第一眼,注意力就被UART口吸引过去。使用转换工具连接笔记本,可以看到顺利打印出启动信息:
可以尝试通过串口登录到系统中,使用用户名root
,密码使用脚本跑了80多个IoT常用密码,最终都没有登录到系统(挖的一个坑)。所幸换一个方式,直接读取存储密码的文件,解密即可得到密码。我们都知道,Linux的用户的信息存储在/etc/passwd
中,passwd
是所有人可读的,为了安全考虑,passwd中通常使用x
显示密码,而真正的密码存储在shadow
中,在早期的系统中没有考虑这些安全性问题,密码同样存储在passwd
中,综上,只需要拿到passwd
或shadow
文件即可(挖的另一个坑)。
要想获取密码,首先需要拿到固件。固件获取的方式有几种方式:
前两者明显是行不通了,直接物理hacking,编程器读取。
使用编程器读取有3种方式:
拿到固件后,没有想更多,直接扔到虚拟机中,binwalk
查看信息。
可以看到文件系统是Squashfs
,我们想要的系统文件都在这里,直接解包。切换到etc
目录,查看文件信息:
没有看到shadow
,passwd
也变成了链接文件,情况变得有些出乎意料。
沿着passwd
指向的地址找下去,切换到var
目录,查看目录结构:
似乎这些文件都不存在。推测可能是后期以某种方式写入或挂载的,在fstab
文件中,也证实了我的猜想:
什么是tmpfs?tmpfs
是一个不存在于实体硬盘上、而是驻在内存里的特殊文件系统。
将 /tmp
放置在 tmpfs
上有数个好处:
tmpfs
驻守在内存里,它的速度极快。它的寻觅时间与驻守在硬盘上的一般文件系统根本不能相比。举个例说,tmpwatch
采用 atime
这个属性,但这属性经常基于效率的原故而在普通文件系统上被停用。在 tmpfs
上使用 atime
所带来影响却很轻微。到这里,对直接读取passwd
已经不抱有太多希望了,做最终的尝试,看看哪个文件中含有/passwd
这样的字符串:
貌似第一个匹配的文件更像是想要的,拉出来拖到IDA
中,先进行简单分析,观察到只有rut_createLoginCfg
函数调用了/etc/passwd
,尝试F5,失败了。想起来了之前用过的对于IoT更好用的Ghrida
,这款NSA发布的开源逆向工具,查找该函数,注意到以下代码片段:
无心插柳柳成荫,原来可登录用户是admin
、support
、user
。
再次使用弱口令字典爆破密码,额,分分钟出来结果:
我们可以执行部分命令了,查看/etc/passwd
文件,使用工具可爆破解密出密码:
文章开始提到,该网关的一些功能被运营商锁死的,在固件中相关的配置文件中,找到了相关的账户配置,使用这些账户,即可解锁相应功能。
在工厂配置文件中,同样还发现了一个重要的账户——telnet账户:
虽然整个过程没有挖掘新的漏洞,但是已经获取到了系统的权限,可以修改防火墙,使用telnet
,上传gdbserver
进行调试分析。