5分钟教程:如何通过UART获得root权限
写在前面的话
你知道物联网设备以及其他硬件制造商是如何调试和测试自家设备的吗?没错,绝大多数情况下,他们都会留下一个串行接口,这样就可以利用这个接口并通过shell来读取实时的调试日志或与硬件进行交互。现在主要有两种不同的串行接口,但最常见的一种是通用异步收发器(UART)。
在这篇文章中,我们将讨论如何通过UART来与TP-Link WR841N (v9.0)进行连接,整个实际动手操作时间大约在五分钟左右。
UART
在开始之前,我想先跟大家简单介绍一下UART的工作机制,如果你已经了解了的话,可以直接跳过这个部分。
UART指的是通用异步收发器,跟其他串行接口不同的是,它是一种不依赖于时钟的串行通信接口,它可以适用于单向通信、半双工通信或全双工等场景下,通信本身主要是通过数据包实现的:
寻找UART接口
UART接口在物理设备的电路板上,一般是一个拥有3/4个针脚的面板。在我们的分析场景中(TP-Link WR841N v9.0),端口情况如下图所示:
当你找到UART端口之后,我们还需要区分每一个针脚的功能(GND, VCC, TX, RX)。此时我们需要按照以下步骤进行操作:
1. 识别GND:关掉设备,把你的万用表调到‘连续模式‘,把黑色探针接地(或接其他金属),然后把红色探针依次与上述四个针脚进行接触,如果发出了“哔哔”声,则说明这个针脚为GND。
2. 识别VCC:把万用表调到“DC Voltage(V-)”,把黑色探头接到GND,然后用红色探头去检查UART针脚。然后接点,如果哪个针脚能够出现恒定的高电压(约3.3V或5V),则说明这个针脚就是VCC。
3. 识别TX:在启动过程中的10-15秒时间里,TX针脚会引起非常大的电压波动,因为启动过程中有很多数据需要传输,方法跟寻找VCC针脚的方法相同。
4. 识别RX:RX针脚在整个过程中电压是最低的,相比不用解释太多了。
识别出了所有针脚之后,你就可以焊接一些连接器上去了(Attify Badge):
利用UART与设备交互
在我们真正与UART接口进行通信之前,我们需要先弄清楚波特率(Baud Rate)。所谓波特率,指的是数据在设备之间的传输频率。换句话来说,就是每秒传输几比特的数据。常见的波特率为9600, 38400, 19200, 57600和115200,但是理论上来说,制造商是可以随意设置的。
我们可以使用devttys0的Python脚本来快速寻找到适当的波特率:
$ git clone https://github.com/devttys0/baudrate
$ cd baudrate
下载之后,我们将TP-Link路由器接电,然后在开启设备的同时运行Python脚本:
$ sudo python baudrate.py
之后,你就可以用上下键来扫描不同的波特率了,这个过程其实跟你调整无线电台频率是一样的。
在我们的测试场景下,TP-Link路由器使用的波特率为115200。
为了通过UART来与设备进行交互,我们需要运行下列命令:
screen/dev/ttyUSB0 115200
Boom!!我们成功拿到了shell的root访问权!没错,就是这么简单!接下来,你可以随意查看或修改设备的文件系统了。
意外情况
下面是我在测试过程中所遇到的一些有意思的情况。
TP-Link的安全性确实不容乐观
近期我还对TP-Link WR841N v.9和v.20进行了测试,而我发现当我通过UART尝试访问v.9路由器的shell时,它会要求我输入用户名和密码。但是v.20路由器却直接给我访问设备shell了。
UART+首次启动=启动失败
如果你连接好UART后首次启动设备失败的话,你可以拔掉TX和RX接头,然后再重启设备时重新连接。此时你将会看到Dropbear rsa/dss密钥的创建信息:
后续研究
我现在的主要目标是通过UART在这些路由器中创建后门,创建恶意固件,或修改目标设备上的特定文件。除此之外,我还会分析这两个版本路由器之间的区别。希望本文能够给各位同学的Hacking带来一些思路。
5分钟教程:如何通过UART获得root权限的更多相关文章
- 三星Galaxy s4(i9505)得到完美root权限教程
三星Galaxy s4(i9505)完美获取root权限教程 论坛上贴吧上关于三星s4 i9505 root的介绍有非常多,方法多种多样.今天小编来介绍一种使用root软件来实现三星i9505一键ro ...
- 华为U8810的用户如何获取ROOT权限详细教程
由于在论坛里看到有人在找这个手机的详细的root教程,所以刷机啦小编在这里整理了一下方便新手来操作,其实这个手机root起来还是蛮简单的,只需要一个root软件就可以了,相当于一键root了,在这里整 ...
- 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)
[项目管理和构建]十分钟教程,eclipse配置maven + 创建maven项目(三) 上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合 ...
- [转载]GDB十分钟教程
转自:http://blog.csdn.net/liigo/article/details/582231/ GDB十分钟教程 作者: liigo原文链接: http://blog.csdn.net/l ...
- JUnit三分钟教程 ---- 实际应用
JUnit三分钟教程 ---- 实际应用 摘自http://lavasoft.blog.51cto.com/62575/65775 接上文"JUnit三分钟教程 ---- 快速起步&qu ...
- JUnit三分钟教程 ---- 快速起步
JUnit三分钟教程 ---- 快速起步 摘自http://lavasoft.blog.51cto.com/62575/65625/ JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因 ...
- Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客
Org-mode五分钟教程ZZZ - Kaka Abel的日志 - 网易博客 Org-mode五分钟教程ZZZ
- GDB十几分钟教程
GDB十分钟教程 作者: liigo原文链接: http://blog.csdn.net/liigo/archive/2006/01/17/582231.aspx日期: 2006年1月16日 本文写给 ...
- MIUI11系统怎么样启用root权限的教程
MIUI11系统如何启用了ROOT超级权限?做开发的人都知道,安卓机器有ROOT超级权限,一旦手机启用了root相关权限,可以实现更多的功能,举个例子做开发的人公司的营销部门的妹纸,使用较多营销工具都 ...
随机推荐
- 【bzoj5017】[Snoi2017]炸弹 线段树优化建图+Tarjan+拓扑排序
题目描述 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足: Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆. 现在 ...
- 动态规划DP的斜率优化 个人浅解 附HDU 3669 Cross the Wall
首先要感谢叉姐的指导Orz 这一类问题的DP方程都有如下形式 dp[i] = w(i) + max/min(a(i)*b(j) + c(j)) ( 0 <= j < i ) 其中,b, c ...
- GDI+ 双缓存 和 刷新桌面(F5)
GDI+双缓存 POINT currentPoint; GetCursorPos(¤tPoint); HWND hWnd = ::GetDesktopWindow(); int n ...
- template.js 模板引擎
例子: html代码: <div id="box"></div> css代码: table{ border-collapse: collapse; text ...
- ngrepeat 时注意的地方和一些little tricks
angularjs的一些使用经验总结,此篇文章单谈ng指令之一ngrepeat 1. ngrepeat 时报错 Duplicates in a repeater are not allowed, 正常 ...
- tortoise git使用 git版本库的rsa key来进行ssh连接
接触git以来 ,开始时用了命令行,但是命令行总归不如图形化菜单方便明了,而GIT本身自带的GUI又用的不习惯,以前用过许久的TOTORISE SVN,幸好有TORTOISE GIT,这个版本图形化工 ...
- 战斗机的祈雨仪式(NOIP模拟赛Round 7)
[问题描述] 炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式.战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备. 战斗机需要给自己的Spear of Lo ...
- 魔法使的烟花(NOIP模拟赛Round 7)
[问题描述] 魔法森林里有很多蘑菇,魔法使常常采摘它们来制作魔法药水.为了在6月的那个奇妙的晚上用魔法绽放出最绚丽的烟花,魔法使决定对魔法森林进行一番彻底的勘探. 魔法森林分为n个区域,由n-1条长度 ...
- MFC 实现打印机打印功能
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...
- BCB中选择文件对话框TOpenDialog过滤后缀名使用方法
BCB中使用TOpenDialog选择对话框时,直接OpenDialog->Execute()弹出的对话框是显示所有文件的,如果我们希望过滤指定的文件后缀名就需要在Execute()前做一些初始 ...