Joe1sn's Cabinet

【漏洞挖掘】记一次痛苦的VxWorks路由器漏洞挖掘

问题多又多

记一次痛苦的VxWorks路由器漏洞挖掘

路由器很老了,是Mercury MW300R的某个版本,网上找不到固件,所以最开始想用uart进shell

image-20240112140428176

拆开过后可以快速找到UART引脚

image-20240112153117629

UART调试

I 打开UART

路由器断电,然后把万用表调到测接地,黑笔随便找一个电路板上的接口(我用的wifi天线的),红笔测口子,响的那个就是接地

接着路由器连上电源,万用表调到测电压,黑笔随便找一个电路板上的接口,红笔挨个测试接口

  • 如果为3.3V左右,那么是电源线(3.3V)
  • 如果为0V,为接地(GND)
  • 如果为2.5V左右,为TXD(路由器的Write)
  • 如果不断跳动,为RXD(路由器的Read)

然后第一点不寻常的就来了

我在测试的时候只能通过排除法筛选出了RXD,我的RXD一直为0V

image-20240112141505800

这个时候通过

1
2
3
4
FT232: 3.3V -> 路由器: 3.3v
FT232: GND -> 路由器: GND
FT232: RXD -> 路由器: TXD
FT232: TXD -> 路由器: RXD

image-20240112141907775

插上路由器电源线,但是不插插头,通过串口就能连上了

image-20240112141950855

image-20240112142014239

但是会发现无法输入,导致设备一直重启,在这个地方无法停下autoboot,很显然需要输入来打断

image-20240112142420406

但是路由器的RXD一直为0V,说明并没有开启向路由器写入的功能,通过仔细观察电路,发现RXD出口有下面几个接口,不断测试发现RXD可以在下方的焊点使用

image-20240112143120491

img

但是我没有架子,而且焊点太小了(本人电烙铁太菜),所以折弯了一根曲别针来传信号

image-20240112143216503

II 开始调试 A

image-20240112143502782

能用的功能特别少,而且tftp功能用不了,不过md可以查看内存

image-20240112143630442

其实这里可以参考这篇博客进行dump提取的,但是当时没想到。

III 开始调试 B

在进入uboot的时候发现ctrl+C会打断一个TP-Link的shell

img

后续发现插上插头后有概率会停在这里

image-20240112144335565

使用命令查看内存分配

1
flash -layout

image-20240112144442000

看到这里我才明白最开始进的是uboot的控制窗口,这里才是真正的Flash存储的启动点

修改了这篇博客的脚本按照一样的思路试图提取固件出来,但是binwalk没有任何识别,所以UART走到尽头了

CHA341A法

就是传统的飞线法,路由器上能用芯片夹的就两个芯片,用CHA341编程器读取一下就知道了(记得装驱动)

关于组装可以看这篇

芯片没有识别到,但是重要的是芯片存储的大小,通过上flash layout可以看到总空间大小是1024KB=1MB,选择大小为1MB的芯片就好了

image-20240112145236126

用binwalk看一下,发现是VxWorks的系统,而且根本就没有Unix/Linux的文件系统,而是使用了Wind River 文件系统,怪不得所有东西都是一坨,而且知道了程序入口是0x80001000

image-20240112150503842

可以参考这篇来慢慢提取,不过也可以直接

1
binwalk -Me MW300R.bin

image-20240112150701769

看上去挺多的,其实根本不慌,随便看一个

image-20240112150746160

再看看Wind River那段的数据,按顺序就对对应的不同文件了

image-20240112150918772

可以按照对应的格式写脚本提取,不过本文的中心并不在这儿。

在提取的时候发现

image-20240112151253608

49200文件特殊看一下

image-20240112151338519

恭喜,找到了主要文件的

用ida 32位 MIPS大端序打开

image-20240112151500456

根据前文提到的入口地址0x80001000设置入口

image-20240112151550592

在开头按下C就IDA就开始自动分析了

image-20240112151715384

漏洞挖掘

上面的二进制分析起来还是有难度的,不过用常规思路(包括web)即可

比如一个很明显的DOS洞,很明显只做了前端校验

image-20240112151913239

直接把路由器打崩,得重启才能恢复正常工作

引用

https://paper.seebug.org/2024

https://e3pem.github.io/2019/07/03/IoT/提取tl-wdr5620固件/

https://blog.quarkslab.com/reverse-engineering-a-vxworks-os-based-router.html