前言

  • 设备、固件容易获得,可作为挖掘其他智能硬件(智能家居、智能摄像头)的基础
  • 大多是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思路

怎么看自己路由器的处理器架构 怎么查看路由器芯片_串口

怎么看自己路由器的处理器架构 怎么查看路由器芯片_固件_02

 

怎么看自己路由器的处理器架构 怎么查看路由器芯片_Web_03

 

参考:

https://www.bilibili.com/video/BV16J411T7eG?from=search&seid=1189161941210173922

https://www.anquanke.com/post/id/180714