利用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
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
7月前
|
监控 网络协议 物联网
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具。modbus master,modbus,串口,工控,物联网,PLC,嵌入式
184 1
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
|
8月前
|
监控 网络协议 测试技术
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
- 监视串行线路或以太网上的通信数据 - 支持多达 28 种数据格式,包括:Signed、Unsigned、Hex、Binary、Long、Float、Double等 - 支持 Modbus 协议地址和 PLC 地址相互切换 - 对任意数量寄存器中的数据绘制实时图表,监控数据的变化趋势 - 支持同时创建多个连接网络和大量从站设备 - 通过多个标签页进行管理,快速在从站设备之间进行切换 - 通过表格的形式管理寄存器,支持添加变量名和注释,支持切换背景与前景颜色 - 导出/导出从站设备寄存器数据到Excel - 内置字节转换工具,方便将Long、Float、Double类型数据转换为寄存器中的数据
227 0
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
|
12月前
|
XML 测试技术 网络安全
开发调试工具:可编程 USB 转串口适配器开发板
首先声明一下,大家都是搞硬件开发的,这几种接口当然是很简单的事,但有些时候对于一个新的设备或者芯片的测试,有个现成的工具当然更顺手,节省时间,也更可靠嘛。
|
网络安全 数据安全/隐私保护
树莓派3B刷机及调试出通过网络连接
电脑中搜索Win32 Disk imager 这个工具,然后插上读卡器,找到对应的磁盘
108 0
树莓派3B刷机及调试出通过网络连接
|
C语言
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
221 0
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
基于wemos的Arduino环境WIFI控制小车前后左右源码
基于wemos的Arduino环境WIFI控制小车前后左右源码
96 0
基于wemos的Arduino环境WIFI控制小车前后左右源码
|
传感器 测试技术 芯片
可编程 USB 转串口适配器开发板连接计算机使用S2STool工具
S2STool 是为 S2S 固件开发的测试工具,运行于 Windows 平台,内置串口调试助手和 S2S 参数配置工具,支持动态解析自定义的芯片驱动,用户可自行编写、修改、增加任何芯片的驱动程序, 方便对芯片进行测试和评估。
可编程 USB 转串口适配器开发板连接计算机使用S2STool工具
|
Linux 芯片
网络 phy 调试方法
目前嵌入式芯片支持双网卡的有很多。在调试网络驱动时,需要通过mdc 和mdio信号对phy的寄存器进行操作调试。如果每次调试都修改网络驱动的话会很麻烦。下面提供我常用的网络驱动调试方法
|
Python
树莓派和arduino蓝牙通信
树莓派上使用蓝牙通信模块来和arduino进行通信,首发在csdn https://blog.csdn.net/qq_33902044/article/details/98465301
2447 0
|
Android开发
告别USB数据线,利用wifi调试程序
前言:目前在车机开发多媒体的U盘播放功能,每次插U盘就不能调试,调试就不能插U盘很不方便.有了远程调试程序,终于方便多了,唯一的缺点是wifi不稳定容易连接超时 步骤一 使用USB数据线成功连接(抱一下大腿先)程序.
912 0

热门文章

最新文章