前言
- 设备、固件容易获得,可作为挖掘其他智能硬件(智能家居、智能摄像头)的基础
- 大多是Web层面的漏洞,适合Web选手直接上手入门
预备知识
1、路由器的组成
- CPU
- RAM
- Flash ROM
- UART 串口\JTAG调试口:最常见的为UART串口,可以通过UART串口来直接与机器交互,通过串口输出、输入信息,做动态调试。可以使用SecureCRT工具来分析串口信息。用工具连接上串口,可以查看路由器的启动信息、分区情况、初始化信息等
- 在路由器的硬件层面中,主要关注Flash rom和UART、JTAG等调试口
2、路由器组件的识别
- Flash rom:用来存储文件系统、内核、U-boot(bootloader),路由器配置信息
- Flash rom的识别和区分:1、芯片上有厂商的首字母缩写。在编程器中找到厂商对应的型号即可。2、没有芯片的标识信息,只有一些丝印数字(不规则)。可以在网上或购物网站上尝试寻找信息
3、固件的获取:路由器固件漏洞WJ必备步骤
- 官网技术支持处下载固件升级包
- 本地OTA升级抓包
- 从路由器Flash rom中获取(编程器)
- 九种获取固件的方法:https://bbs.pediy.com/thread-230095.htm
- 工具:binwalk
4、BusyBox
- 在路由系统中,因为存储空间受限制,所以使用的Shell通常是一个经过裁剪的名为BusyBox的程序
- BusyBox是一个集成了300多个最常用Linux命令和工具的软件
- BusyBox包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具
- 常用在Linux内核的嵌入式设备上,入路由器、摄像头
5、MIPS指令集
- 分析工具:IDA无法直接反汇编mips代码,Ghidra可以帮助我们生成mips的伪C代码,但是,在使用Ghidra分析mips的时候,PLT和GOT经常会出现问题,如果需要定位GOT表,还是需要使用IDA查找更为方便
- 寄存器数量多
- 流水线效应
- 汇编指令都是4字节对齐
- 对栈的操作靠指针的增减来实现
6、路由器系统类型
- 嵌入式Linux系统
- VxWorks系统
7、文件系统类型
- Squashfs(最常见)
- cpio
- jffs2
固件分析、模拟仿真环境搭建准备
1、必备环境
- QEMU2.4.0编译版本(版本过低或过高都会出问题)
- 静态调试:IDA+Ghidra
- 动态调试:gdb、gdb-multiarch、gdbserver
- 自动化动态仿真固件:Firmadyne
- binwalk
- 其他一些IDA脚本:Mipsrop、MipsAduit(MipsAduit是一个比较方便定位二进制程序敏感函数的python插件,MIPS静态汇编审计辅助脚本,通过敏感函数回溯的方法,可以较方便的审计出C语言中的危险函数,https://github.com/giantbranch/mipsAudit)
2、可选环境
- 交叉编译环境:mips、arm
3、路由器漏洞WJ的特点
- 测试点比较全面:Web、二进制、协议层面(厂商自定义协议)、代码审计(php、asp、lua)
- 可能需要接触到硬件:基本的拆焊能力、硬件组件的识别
路由器常见漏洞点举例
1、Web层面
- XSS:CVE-2018-10107
- 越权(获取配置文件)
2、二进制层面
- 命令执行漏洞
- 栈溢出
3、协议层面
- smb、upnp等通信协议
- 路由器厂商私有协议
路由器漏洞WJ思路
参考:
https://www.bilibili.com/video/BV16J411T7eG?from=search&seid=1189161941210173922
https://www.anquanke.com/post/id/180714