泽兴芝士网

一站式 IT 编程学习资源平台

海外 | 如何控制你的家用TP-LINK交换机?

不久前我买了一个小型的TP-LINK TL-SG105E (版本 1) 交换机用于测试。这台交换机具有的端口镜像功能,可以将所有数据从一个端口发送到另一个端口,从而让我便捷、高效地嗅探到端口上通过的数据。

这并不是一篇关于端口镜像的文章,而是关于交换机管理界面以及如何解码管理设备的通信流量并从中获取信息的文章,例如下文将提到设备的登录凭证等内容。

你可以看到,这款交换机是作为基本家用设备来设计的,没有什么花哨的web界面,使用程序也是简单智能配置的实用程序,方便用户通过定制协议来配置交换机。

通信流量

我在使用交换机的时候通过Wireshark打开了网络嗅探器,下面是一张被嗅探到的会话截图:

要弄清楚截图中的内容,重点看截图最下方的两个会话,它涵盖了笔记本电脑(192.168.0.2)与交换机(192.168.0.1) 之间通过29808/udp端口进行的通信。

最先跳出来的信息都被发送到了255.255.255.255的广播地址,截图如下:

这就意味着该子网络内的所有设备(即连接到交换机上的任何设备)都会收到此数据!

这是我没想到的。换个思路,我们也许可以窃取交换机凭证,再来看一下数据流:

情况不妙,这些数据流被编码了。我们可以看到数据重复了,如果使用数据包的十六进制视图,结果就一目了然了:

注意以5d 74开头的每一行(即每个数据包),意味着存在一个简单的恒定加密模式,要么是简单地使用XOR重组或替换,要么就是静态密钥加密。

接下来,要解码这段数据,需要检查应用程序是如何加密数据的。

解码应用程序

在对安装的应用程序进行快速检测之后发现,该程序是用java编写的,并且被编译成了一个可移植、可执行的PE文件。该文件可以在7-zip中打开,提取出编译好的Java classes:

一旦被打开,class文件就可以被提取到一个临时目录中,然后用 jd gui 工具来打开。这是一个图像化的前端jd Java编译器。搜索反编译后的class文件,你会发现,搜索指向了
com.tplink.smb.easySmartUtility.RC4 class,你可以在里面找到其加密的算法,以及用于加密的密钥:

现在我知道了加密数据的算法——它使用的是一个静态密钥,并且我也知道了密钥。所以下一步就是:

解密文本

因为我懒得写一个解密程序,所以做了个快速的概念证明。首先获取Wireshark的会话内容,然后选择“按原始保存数据”的选项来保存它,将这些数据保存为了一个十六进制的字符串集合:

5d746a047dbeb0b2971adf7535477e53422ba2f5d78baeed508f463dc202909aa4ec81c65d75ae6a62b7dd37971adf7535477e5c422ba2f5d787aeed508f463dc202909a521281c6d8d52b365d77ae6a62b7dd37971adf7535477e5f422ba2f5d797aeed508f74b0c202909a591381c0464e465f27d942b5a44608403418222a80b19b775d75ae6a62b7dd37971adf7535477e5e422ba2f5d787aeed508f74b0c202909a5b1981c6d8d52b365d75ae6a62b7dd37971adf7535477e59422ba2f5d787aeed508f74b0c202909a5b1181c6d8d52b365d75ae6a62b7dd37971adf7535477e58422ba2f5d787aeed508f74b0c202909a5b1a81c6d8d52b365d75ae6a62b7dd37971adf7535477e5b422ba2f5d787aeed508f74b0c202909a521281c6d8d52b365d77ae6a62b7dd37971adf7535477e5a422ba2f5d793aeed508f4e5cc202909a591381c0464e465f27d942b5a44608403418222a7c4e9b77c7eb76085d75ae6a62b7dd37971adf7535477e45422ba2f5d787aeed508f4e5cc202909a491381c6d8d52b365d75ae6a62b7dd37971adf7535477e44422ba2f5d787aeed508f4e5cc202909a6b1381c6d8d52b365d75ae6a62b7dd37971adf7535477e47422ba2f5d787aeed508f4e5cc202909a6b1281c6d8d52b365d75ae6a62b7dd37971adf7535477e46422ba2f5d787aeed508f4e5cc202909a7b1381c6d8d52b365d75ae6a62b7dd37971adf7535477e41422ba2f5d787aeed508f4e5cc202909a1b1381c6d8d52b36

每一个换行符终止线都代表一个数据包。因为每一行的开始都是相同的十六进制值(用于加密每个数据包),所以我们可以用一个循环逐句破解。

我在github上发布过一个用python编写的通用的RC4函数,具体文章如下:
https://github.com/pentestpartners/snippets/blob/master/decode-sg-105e.py。为防止脚本“小子”轻易地滥用它,我已经删除了密钥。

下面是使用python解密数据流的过程:

红框突出显示的内容是管理员凭据(admin:admin)。从这里入手,我就可以轻松控制交换机了。

安全防护

这是个安全问题吗?如果你使用这一款交换机,或是它的加强版本(the SG-108e),这可能是个问题,你需要知道它的数据流并不安全

从理论上来说,你可以在上面配置一个 VLAN ,然后只使用一个接口作为管理接口,这样就可以解决安全问题。

我与TP-Link的支持者进行过讨论,为了保证我没有误解他们,我会直接引用如下:

1.在设备和交换机之间广播发送通信

在工业中实用设备间最常见的通信方式就是广播,其它产品,例如Netgear,使用的也是这一方式。

众所周知,广播存在一些缺点,但是这些缺点的前提都是因为局域网不够安全。

在大多数情况下,局域网都是个相对安全的环境,我们将在局域网前端设置NAT路由器和防火墙,这样可以阻挡大多数攻击。防火墙和安全软件可以保护我们局域网的安全,但是当局域网不再安全时,即使我们不使用广播,其他方式(比如ARP欺骗)同样也可以获取设备与交换机之间的通信流量。

2.逆向解码及静态加密

我们的智能交换机是家庭和小型办公用品,所以配置的芯片并没有很高的安全性。

正如你所知道的,实用程序是用java编写的,这意味着反编译是无法避免的,只要知道怎样操作,任何人都可以做到。这是java普遍性带来的必然结果,我们不可能改变这一点。所以我们的研发人员需要考虑在代码中添加更多的防护,来确保交换机更加安全。

从设备特定用途的角度来说,TP-Link支持者的立场是可以理解的。虽然我希望管理通信使用的是单点通信,而不是广播,但是这并不会影响我购买和使用这款交换机。——————————————————————————————————————

本文由e安在线独家翻译,本文章及图片出于传递更多信息之目的,属于非营利性的翻译转载。如无意中侵犯了某个媒体或个人的知识产权,请联系我们,我们将立即删除。其他媒体、网络或个人从本网下载使用须自负版权等法律责任。

原文链接:
https://www.pentestpartners.com/blog/how-i-can-gain-control-of-your-tp-link-home-switch?sukey=
3997c0719f151520f73f91b1ce54de0baa3783fdf686e66eb19e15b8fe701b709920fdd29245d3103e3baa1561c1d74d

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言