利用Arduino对路由器进行调试,居然这么简单!

简介: 本文讲的是利用Arduino对路由器进行调试,居然这么简单!,在生产嵌入式系统,如路由器或网络摄像头时,制造商就已预留了一些调试端口。不过对于一般的用户来说,这些预留的调试端口显然是用不到的,因为它们通常是被焊接的并受到设备外壳的保护。
本文讲的是 利用Arduino对路由器进行调试,居然这么简单!

利用Arduino对路由器进行调试,居然这么简单!

在生产嵌入式系统,如路由器或网络摄像头时,制造商就已预留了一些调试端口。不过对于一般的用户来说,这些预留的调试端口显然是用不到的,因为它们通常是被焊接的并受到设备外壳的保护。但是对于攻击者来说,访问这些端口就显得轻而易举了,对他们来说这些预留的端口就是连接系统的一个外部设备而已。这些端口通常会通过串行通信协议进行通信,并且包括JTAG,SPI和UART等接口。通常研究人员会利用诸如BusPirate,JTAGulator或Shikra之类的定制硬件与设备接口进行连接。

在本文中,我们将使用Arduino Uno / Nano / Mega来模拟路由器上的调试引脚硬件连接 ,然后使用Arduino作为USB到串行转换器与设备进行通信,并由此获得对该设备的控制。请注意,该项目是通过通用异步收发器(UART)进行创建的,其他项目如JTAGenum已被创建,可以通过其他接口与Arduino进行通信。

首先,需要识别物理调试引脚,在本文中,我们很幸运有一个已经被焊接在路由器上的调试端口:

利用Arduino对路由器进行调试,居然这么简单!

为便于参考,我们将分别从左到右分配引脚:pin0-pin4。我们会在这5个引脚中,一一寻找能够Tx(发送)和Rx(接收)的引脚,以便能够与路由器进行通信。幸运的是,我们可以用万用表对引脚进行连续性测试,以识别可以跟这个引脚相连的公共端(GND)。最后发现,GND原来是pin1(从左起第二个)。

接下来,我们就要确定是哪个引脚正在传输数据(Tx)以及Arduino所在的波特率。我们可以使用Arduino的SoftwareSerial库来模拟所有未知引脚上的串行连接,并在设备启动通信过程,任何传输数据的端口都可能是我们的Tx。

首先,将MDSec UartFuzz代码项目上传到您的Arduino

接下来,将路由器连接公共端的引脚(pin1)连接到Arduino的公共端。然后将路由器的引脚从0-4(不包括公共端)顺序插入到Arduino引脚9-12(这些值在代码中互相关联,可以根据需要进行更改和扩展):

利用Arduino对路由器进行调试,居然这么简单!

引脚配置:

利用Arduino对路由器进行调试,居然这么简单!

开始启动包括路由器在内的运行,使用Arduino IDE的串行显示器,就可以看到该软件正在运行。请注意,由于我们是需要通过引脚进行数据传输,所以请务必不断地重新设置设备,以确保引导过程正在发送数据:

利用Arduino对路由器进行调试,居然这么简单!

设备输出:

利用Arduino对路由器进行调试,居然这么简单!

由于有时其他引脚会在通电或关闭时跳转或传输数据,所以用户要选择引脚或寻找更多的数据。我们建议用户最好多进行一些分析,看看哪个引脚会反复发送数据。在我们的案例中,pin0就是我们所寻找到干扰因素。我们还可以看到,软件使我们的波特率变得模糊,看起来像115200的速率的明文显示如下:

利用Arduino对路由器进行调试,居然这么简单!

请注意,“wps eNabled”有一些损坏,这是由于SoftwareSerial是使用Bit-Banging来实现的,但显然不如UART那么精确,这一点我们已在寻找明文时考虑到这一点了。现在我们知道了公共端,Tx和波特率,就可以尝试从设备中进行读取并找到Rx。

将Arduino转换成TTL-Serial-to-USB转换器,通过删除ATmega芯片,或简单地将复位和公共端连接在一起(这取决于路由器的型号),然后重新进行电路连接:

利用Arduino对路由器进行调试,居然这么简单!

引脚配置:

利用Arduino对路由器进行调试,居然这么简单!

请注意,通常Tx要始终与Rx保持连接。可以利用Arduino Uno进行反转,可以尝试在你的Arduino pin0(Rx)进行反转,如果这不适合你,可以使用你最喜欢的软件来连接到串行控制台,本文使用的是minicom,并将波特率设置为了115200,重置路由器:

利用Arduino对路由器进行调试,居然这么简单!

但在引导过程结束时,我们似乎没有得到一个shell或一个提示,这样就使Rx很难进行测试。可是我们确实看到启动过程可能会中断,最后一个过程就是将一根电线连接到Arduino的Rx引脚(通常应该是Tx引脚,因为会发送数据),并且继续绑定路由器上剩余的3个引脚,并按ctrl + c进行引导。如果它中断,则问题就出在Rx。

Rx和Tx通信的最终接线如下:

利用Arduino对路由器进行调试,居然这么简单!

中断引导过程可以让用户访问#hi引导加载程序shell:

利用Arduino对路由器进行调试,居然这么简单!

现在就可以使用tftp命令来上传自定义内核映像以进一步利用路由器。




原文发布时间为:2017年5月24日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
监控 网络协议 物联网
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具。modbus master,modbus,串口,工控,物联网,PLC,嵌入式
269 1
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
|
监控 网络协议 测试技术
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
- 监视串行线路或以太网上的通信数据 - 支持多达 28 种数据格式,包括:Signed、Unsigned、Hex、Binary、Long、Float、Double等 - 支持 Modbus 协议地址和 PLC 地址相互切换 - 对任意数量寄存器中的数据绘制实时图表,监控数据的变化趋势 - 支持同时创建多个连接网络和大量从站设备 - 通过多个标签页进行管理,快速在从站设备之间进行切换 - 通过表格的形式管理寄存器,支持添加变量名和注释,支持切换背景与前景颜色 - 导出/导出从站设备寄存器数据到Excel - 内置字节转换工具,方便将Long、Float、Double类型数据转换为寄存器中的数据
328 0
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
|
JavaScript
Arduino Ethernet构建简易服务器
Arduino Ethernet构建简易服务器
|
XML 测试技术 网络安全
开发调试工具:可编程 USB 转串口适配器开发板
首先声明一下,大家都是搞硬件开发的,这几种接口当然是很简单的事,但有些时候对于一个新的设备或者芯片的测试,有个现成的工具当然更顺手,节省时间,也更可靠嘛。
|
网络安全 数据安全/隐私保护
树莓派3B刷机及调试出通过网络连接
电脑中搜索Win32 Disk imager 这个工具,然后插上读卡器,找到对应的磁盘
148 0
树莓派3B刷机及调试出通过网络连接
基于wemos的Arduino环境WIFI控制小车前后左右源码
基于wemos的Arduino环境WIFI控制小车前后左右源码
146 0
基于wemos的Arduino环境WIFI控制小车前后左右源码
|
传感器 测试技术 芯片
可编程 USB 转串口适配器开发板连接计算机使用S2STool工具
S2STool 是为 S2S 固件开发的测试工具,运行于 Windows 平台,内置串口调试助手和 S2S 参数配置工具,支持动态解析自定义的芯片驱动,用户可自行编写、修改、增加任何芯片的驱动程序, 方便对芯片进行测试和评估。
可编程 USB 转串口适配器开发板连接计算机使用S2STool工具
可编程 USB 转串口适配器开发板常见问题及注意事项
当使用导线连接外部设备或芯片时,导线不可过长,一般控制在 20CM 以内,IIC、SPI、UART 等数字接口数据线驱动能力有限,过长的导线会导致通讯波形迟缓。当导线确实无法缩短时,可通过降低通讯速率的方法来解决、缓解通讯异常问题。
可编程 USB 转串口适配器开发板常见问题及注意事项
可编程 USB 转串口适配器开发板 常见问题及注意事项
当使用导线连接外部设备或芯片时,导线不可过长,一般控制在 20CM 以内,IIC、SPI、UART 等数字接口数据线驱动能力有限,过长的导线会导致通讯波形迟缓。当导线确实无法缩短时,可通过降低通讯速率的方法来解决、缓解通讯异常问题。
可编程 USB 转串口适配器开发板 常见问题及注意事项
|
传感器 测试技术 芯片
可编程 USB 转串口适配器开发板如何用S2STool工具
S2STool 是为 S2S 固件开发的测试工具,运行于 Windows 平台,内置串口调试助手和 S2S 参数配置工具,支持动态解析自定义的芯片驱动,用户可自行编写、修改、增加任何芯片的驱动程序, 方便对芯片进行测试和评估。
可编程 USB 转串口适配器开发板如何用S2STool工具