700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 小米3c虚拟服务器 小米路由器3C固件逆向与测评-新手向

小米3c虚拟服务器 小米路由器3C固件逆向与测评-新手向

时间:2019-03-15 12:44:14

相关推荐

小米3c虚拟服务器 小米路由器3C固件逆向与测评-新手向

本帖最后由 icqb32d3a26 于 -2-7 11:20 编辑

之前一直在关注i春秋论坛,觉得氛围挺好的,但一直只是处于观望的态度。最近刚好碰上一个与智能硬件的活动,自己算是一个初学者,靠着厚脸皮参加了这个活动并做了一个分享,希望会对一些志同道合的人有些帮助。后期继续更新

0x00 前期准备

硬件准备:

万用电表(用于查找uart的GND、TXD、RXD)

逻辑分析仪(主要用于观察数字信号电平变化)

usb-ttl模块(某宝有,价格在4元左右)

杜邦线若干

软件准备:

debian/ubuntu,推荐ubuntu14.04

sublime text 3

#For debian or ubuntu

sudo apt-get install binwalk

qemu

#For debian or ubuntu

sudo apt-get install qemu

0x01 明确目标

硬件拆解,了解构造

固件分析,了解执行

逻辑测试,查找缺陷

作为一个新手目前浅显的见解,如果你的目的发现代码层面上的漏洞,那么应该专注于2和3步骤,步骤1提提供的更多是用于调试的串口或者固件的获取;但如果你想以geek的方式来使用智能硬件,那么应该专注1和2。

0x02 我们有什么

1. I have a 小米3C路由器

2.1_.jpg (127.54 KB, 下载次数: 98)

-2-7 10:47 上传

2. I have a 小米3C路由器固件

3. 啊,开始漏洞分析

0x03 固件解包与概览

0. 查看下我们的固件是否包含文件系统

binwalk miwifi_r3l_firmware_3032e_2.12.15.stable.bin

3.1.jpg (93.18 KB, 下载次数: 92)

-2-7 09:57 上传

从binwalk中获取到的信息中有

MIPS指令集的MIPS OpenWrt Linux-3.10.14

包含Squashfs文件系统

文件系统压缩方式为xz

1. binwalk大显神通

binwalk本身可以根据文件魔术头来提取文件,我们只需要使用-M和-e参数

-M:递归扫描提取

-e:自动提取已经文件类型

3.2.jpg (107.38 KB, 下载次数: 92)

-2-7 10:06 上传

binwalk -Me miwifi_r3l_firmware_3032e_2.12.15.stable.bin

从下图输出结果,我们可以进一步确定,使用little endian(小尾格式)的MIPS。

提取后的文件会输出到_固件名称.extracted文件夹中,比如上述命令会将固件的解包内容输出到

_miwifi_r3l_firmware_3032e_2.12.15.stable.bin.extracted目录中

3.3.jpg (238.22 KB, 下载次数: 115)

-2-7 10:06 上传

2. tree查看提取到固件目录

tree ./_miwifi_r3l_firmware_3032e_2.12.15.stable.bin.extracted -L 2

-L:显示层级为2层

3.4.jpg (51.23 KB, 下载次数: 96)

-2-7 10:06 上传

通过上图,我们可以看到小米路由固件包含一个linux系统,但目前我们还能确定与路由器相关的文件具体在哪一个目录。

0x04 黑盒测试

nmap端口扫描

分析登录认证机制

分析系统管理功能

对特定url进行fuzzing

0x05 白盒测试

1.登录界面,输入错误的密码,获取json响应

{"code":401,"msg":"not auth"}

5.1.jpg (12.71 KB, 下载次数: 96)

-2-7 10:14 上传

2.查找对应的处理程序或者文件

grep -n -ir "{\"code\":401" ./* 2>/dev/null

5.2.jpg (29.75 KB, 下载次数: 95)

-2-7 10:14 上传

通过grep命令,我们可以快速定位到登录失败的处理文件是位于./usr/lib/lua/luci/的dispatcher.lua,通过sublime text 3打开看一下处理登录逻辑部分的代码,位于240行左右

5.3.jpg (116.4 KB, 下载次数: 94)

-2-7 10:14 上传

通过分析代码结构,我们可以了解到一下几点,不同逻辑以为着不同的攻击面

登录时获取post的数据是通过luci.http.xqformvalue这个方法来获取

登录时根据是否传入nonce参数来进入不同验证逻辑

如果 nonce 不为空

调用XQSecureUtil.checkUser(user, nonce, pass)来进行登录检查

如果 nonce 为空

调用XQSecureUtil.checkPlaintextPwd(user, pass)来进行登录检查

3.我们查看一下./usr/lib/lua下的目录结构

ls -alht ./usr/lib/lua

5.4.jpg (212.86 KB, 下载次数: 92)

-2-7 10:14 上传

其中luci、xiaoqiang需要我们重要关注

如果你问为什么,步骤2中登录处理逻辑的dispatcher.lua就在luci目录,而xiaoqiang这一个目录不是OpenWrt中自带,那么它应该小米官方基于OpenWrt修改的,因而我们也需要重点关注。

4.具体查看luci的目录结构

tree ./usr/lib/lua/luci -L 1

5.5.jpg (50.89 KB, 下载次数: 94)

-2-7 10:14 上传

由上图的目录结构,我们可以看出

OpenWrt使用lua以MVC(Model、Controller、View)模式去开发路由器后台管理系统

如果我们想查看路由,我们可以查看Controller下面对应文件夹的lua文件

5.6.jpg (57.89 KB, 下载次数: 92)

-2-7 10:14 上传

比如我们查看web目录下index.lua,可以发现发面内容,每一个entry函数就是一个web路径映射。

5.7.jpg (249.33 KB, 下载次数: 102)

-2-7 10:14 上传

5.具体查看xiaoqiang目录结构

tree ./usr/lib/lua/xiaoqiang -L 1

5.8.jpg (32.6 KB, 下载次数: 99)

-2-7 10:14 上传

可以看到,xiaoqiang目录下的是一些关于小米路由器系统的工具、配置相关的lua文件。

6.如何更便利的审计这些lua源代码

使用sublime text 3打开./usr/lib/lua/目录,sublime text 3目录会将目录间的文件中建立交叉引用,这样就可以通过点击跳转到具体的文件中

效果如下图:

5.9.jpg (50.83 KB, 下载次数: 92)

-2-7 10:14 上传

0x06 串口调试

1.拆机

路由底部是嵌合的

2.2_.jpg (148.41 KB, 下载次数: 94)

-2-7 10:55 上传

在路由器中间有一颗螺丝

2.3.jpg (168.79 KB, 下载次数: 86)

-2-7 10:55 上传

2.uart连接

靠近为发烧而生的四个通孔,分别为TXD、GND、RXD

2.6.png (954.19 KB, 下载次数: 105)

-2-7 10:55 上传

我们只需要连接RXD、TXD、GND

2.5.jpg (233 KB, 下载次数: 100)

-2-7 10:58 上传

3.终端输出

小米修改了等待时间,并设置为0。即使串口连接上去也不能进入uboot或者console。

2.png (39.61 KB, 下载次数: 91)

-2-7 10:28 上传

1.png (65.49 KB, 下载次数: 80)

-2-7 10:28 上传

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。