双十二为了耳朵愉悦,购买了 DT880,为了能推动这个玩意儿,之前的山灵 M1 自然是不行了,于是在综合比较后选择了山灵 M2x,选择山灵 M2x 的原因有如下几点:
- 穷
- 手上有山灵 M1,且对其体验满意
- 看评测感觉还不错
- Linux 系统,根据之前拆山灵 M1 包的经验,感觉可玩性不错,可以拿来当玩具玩
- 支持国砖
好了言归正传,接下来来记录一下我的搞事过程。因为这篇文章是到货以后 hack 掉才写的,所以一些截图是边写边截的。
难易度:简单。
0x01 探索固件
之前研究过山灵 M1 的固件,山灵 M1 的固件就是很简单的一个 ubifs 的镜像,估计更新也就是直接把这个镜像给怼进 mtd,里面的 Linux 是 buildroot 的。M1 的系统中有 sshd,这也是我买山灵 M2x 的原因,因为它有 WiFi,可能可以直接 ssh 进去。
于是在到货的前一晚,我先在官网上下载了最新的镜像,然后拆了它。要吐槽的一点是,说好的 .tar.gz
结果并没有 gz 过。
根据分析 nand 文件夹里放的就是固件文件了。
诶!怎么和之前不一样了!之前是单个 bin 就完事儿了,现在怎么是一堆 update*.zip!而且每个文件都有用 SignApk 签名,那看来通过修改 ubi 文件来搞事这一点是行不通了。那就先把所有内容提出来吧。
提出来就可以看到 m2xsystem.ubi_*
,盲猜是把 ubi 分卷了。然后阅读 update.xml
可得更新文件名为 m2xsystem.ubi
然后分为了 48 个 chunk,那就是确实这样了。用 cat m2xsystem.ubi_* > m2xsystem.ubi
得到了完整的 ubifs 镜像。然后将其挂载。
好,那我们就可以看看这个系统了。
接下来是 soha 游览系统的时间,此处略去 1k 字。
看完系统,我找到的唯一能用来玩的就是 /etc/thttpd.conf
,里面有跑一个 Web 服务,阅读了其中指向的 /usr/share/web
之后发现了这似乎是个通过 Web 上传文件的功能,然后我把其中的 cgi 文件都拿出来准备之后研究。因为升级固件的 zip 们有签名,在不拆机的情况下最快捷的应该也就是这个了。山灵 M1 有 ssh,但是 M2x 就没有了。
顺便发现个好玩的,/home
里面有个 chenyou 文件夹,目测是 chenyou 同志打包的时候没注意把这些带进来浪费空间了。
0x02 Web 好玩
一共有六个 cgi 文件。
阅读 /usr/share/web
中的 HTML 和 JS 之后,得知六个文件分别用来创建文件夹、删除文件、下载文件、列目录、移动文件、上传文件。
把得到的 cgi 文件拖进 IDA,仔细阅读后得出以下结论:
- 所有 path 在传的时候都是系统的绝对路径
- list.cgi 列文件的时候限制了列出的扩展名
- 上传等地方的扩展名限制是仅前端的
- create 里面是 system("mkdir"),delete 里面是 system("rm"),move 和 upload 里面是 system("mv")
- 而且没有过滤引号,也就是说 system() 里面的指令是可以注入的。
得到这些资料我就心满意足的睡觉去了。
0x03 在手里没活过五分钟
到货了以后首先验货验完然后试听,这些结束后我开始搞事了。首先连上 WiFi,然后打开其 WiFi 传歌功能。
根据我昨晚得到的资料,首先尝试通过 cgi 上传一个文件到 SD 卡中。
因为 list.cgi 限制,所以只能通过 USB 来看。显然上传成功了(那肯定,毕竟都已经读过一遍反编译的 cgi 了)。
然后尝试上传一个 html 到 /usr/share/web
下面,但是 gg 了。文件上传上去默认是带了 x 属性,然后 thttpd 不愿意用。
那这时候就可以利用那个注入漏洞了。将 path 改为 /usr/share/web/hack.html"; chmod 644 /usr/share/web/hack.html #
再上传一次,就成功了。(万呆呆(即 twd2)表示“soha试图栽赃陷害”)
其实只是为了使用 html 才会需要用到那个注入漏洞。如果是上传一个 cgi 文件,那么本身带 x 属性就很方便了,上传一个 webshell 到 web 目录下即可使用。
0x04 getshell
最后就用 getshell 来结尾吧。很简单,用 C 读入 QUERY_STRING 然后用 popen/fgets 然后输出就行了。
0x05 工程预留测试
我又游览了一遍 ROM,发现启动播放器主程序的 /etc/init.d/S90play
有这样一段代码。
if [ -f /mnt/mmc/factory_test/a35c2bg0suw=rvbsug97z8#2fp ] && [ -f /mnt/mmc/factory_test/factorytestapp ]
then
/mnt/mmc/factory_test/factorytestapp &
else
/usr/bin/shanling-play &
fi
即如果开机时的 SD 卡上的 factory_test
文件夹里存在一个名为 a35c2bg0suw=rvbsug97z8#2fp
的文件,那么就会执行这个文件夹下面的 factorytestapp
。
这个就不需要利用漏洞就可以搞事了。
0x06 ssh
晚上编译了一个 dropbear,然后把它放在了 SD 卡里,然后用上面发现的工程测试 factorytestapp
让它可以在开机的时候启动。然后就可以玩了。
这个充电宝价格有点贵啊,不过是Linux系统就很好玩了。
reply
为什么soha这么强
reply
为什么soha这么强
reply