不久前,我买了一个小型的TP-LINK交换机做测试,具体型号为TP-LINK TL-SG105E ( 版本1),因为它有一个带镜像功能的端口,这可以让我很轻松的嗅探到经过各个接口的数据的具体情况。 本文就是围绕这个端口镜像功能展开的,主要介绍该交换机的管理界面以及我是如何破解这个流量管理入口并且得到一些敏感信息(比如各个设备的凭证信息)。 如下图,只是一个简单的配置页面(Easy Smart Configuration Utility)来让你能配置相关的协议。
流量我很好奇这点,所以使用交换机的时候,用Wireshark进行了抓包。如下图:
底部两条会话比较重要,这条信息流向是从我的笔记本( 192.168.0.2 )的29808/udp端口 流向交换机( 192.168.0.1 ) 打开后我们可以观察到,所有信息流向都是先把信息传给广播地址255.255.255.255:
这就意味着子网中(即所有和该交换机连接的设备)的所有设备都能收到这些流量包。 这并不理想,所以我们也许可以试试直接偷交换机的凭证信息,先来看一看数据流:
用十六进制查看这些包:
注意,每个包都是以5d 开始的,这表明这里是通过一个简单并且不变的编码模式产生的,可能是直接通过XOR或者移位产生,也有可能是通过一个静态的键值产生。 因此,接下来的解码是要确定程序是如何对数据进行编码的。 解码程序安装完的程序是一个被编译成可执行的程序(PE文件),用7-zip可以打开该程序,7-zip可以提取到Java编译过得类,可以知道改程序是用Java写的:
打开后 class文件被展开成一个目录,然后 用 工具jd-gui打开,jd-gui是一个java类的反编译工具,可以解析class文件。查找所有反编译的类,最后把目标定位在com.tplink.smb.easySmartUtility.RC4这个类里面,这个类给出了算法已经加密时候用的key:
现在,我们知道了加密算法已经加密密钥,接下来。。。干起来吧 解密内容我也懒得再写一个程序来解密了,我直接在概念上验证下吧。首先,我把Wireshark中的会话的原始数据包保存下来,把他用十六进制编译,并且把他保存成如下: 每一个换行就是一个包的结束,这些行都是以相同的十六进制数为开始。我们知道,每个包都是用相同的加密程序加密的,所以我们只要循环的对每行进行加密就行。 针对通用的RC4方法,我写了个python脚本,放在github上了 https://github.com/pentestpartners/snippets/blob/master/decode-sg-105e.py,为了防止脚本小子滥用这个脚本,我已经把密钥移除了。 下图就是用python脚本解密的数据流:
图中红色部分就是管理员的账号密码,通过这个就可以轻松的控制交换机了。 怎么做才能保证安全?如果你使用了这款交换机,或者另一个(SG-108e),那么你应该注意到它的通讯并不安全。 理论上你可以通过配置VLAN,只让一个接口可以访问管理页面,这样可以很好的解决问题。 以下是TP-Link厂商的观点: 1.关于设备和交换机之间的广播发送 这点在设备的通讯方面是很常见的,其他的产品,例如Netgear 也是通过这种方式的。 正如你所说,广播式网络的确存在你所说的问题,我们也在思考这些问题,但是这个问题的前提是局域网不安全。 实际上,在大多数场景下局域网是安全的环境。我们通常会在局域网前面架设NAT路由器和防火墙,大部分的黑客行为在这里就会被阻断。防火墙和一些安全软件就可以保护我们的局域网安全。如果局域网已经处在不安全的状态下,就算我们不适用广播通讯,其他的方法,例如ARP欺骗也可以得到同样的东西。 2.加密和解密的问题 Our Easy Smart Switch的定位是给家庭和少部分办公室使用的交换机,因此他的芯片并不足够强大到可以提供一个高度的安全服务。 加密程序是用Java写的,这意味着反编译是无法避免的,只要你知道如何反编译,就能反编译出这些程序。这是Java的普遍存在的问题,同时我们是无法改变这一点的。不过我们正在考虑在这方面加大我们的研发力度,在下个版本的程序中提高加密算法的安全性。 虽然我一直想把这种广播变成单播,不过站在他们的立场想,这样做是有道理的。我也并不会停止使用这款产品。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|