一个路由器两个密码,你的 tplink 路由器还安全吗?
发布于 作者:苏南大叔 来源:程序如此灵动~tplink
路由器在国内甚至国际上,都是占有率第一的。就是这样的一款路由器,如果告诉你,路由器的密码除了你知晓的那个,还有个另外的影子密码,也能进入你的路由器,你是不是吓了一大跳?
最近,苏南大叔,想升级自己的路由器固件,就百度到现在正在使用的一款的路由器的密码漏洞。当然了,这款路由器的最新固件,已经没有这个漏洞了。但是升级固件.... 只有发烧友才会这么干吧.... 本文测试路由器:tplink@TL-WR842N
。
前言
好,苏南大叔手里面的实验产品是个tplink
的TL-WR842N
,这款存在影子密码的路由器的固件版本号为:2.3.4 Build 141118 Rel.74025n
。苏南大叔最终的实验结果是:使用了一个计算出来的密码(并非原本的密码),进入了路由器。这个算的上是个不大不小的漏洞了吧?
如果你手头的路由器也是这款型号,不如试试吧,也许有类似的漏洞。网上其实流传有解密攻略POC
,但是最终最关键的部分,是语焉不详,不知所云。在本篇文章中,苏南大叔将讲述具体的解密算法。
下载config.bin
当然是在你的路由器的ip地址后面加上config.bin
来下载的了。ip
地址呢,一般都是192.168.1.1
,你可以查看你的路由器背面的说明。而这个config.bin
文件里面就包含了加密后的路由器密码!而且是双重加密的。但是,对于一个网站来说,这么重要的东西,居然可以直接下载,这本身就是有问题的,这就是最大的隐患起源。
分析config.bin
文件
这个文件默认打开后,是个乱码,大家都看不懂。需要使用个openssl
的工具进行转换。去openssl
的官方去查找下载这个工具的话,貌似会失望的。这种太程序员的工具类都只是提供源码,让自己编译的。而编译的过程,一般都会较为痛苦。所以,个人建议您:还是跳过这个过程比较好。所以,苏南大叔在百度上面找了一个openssl
的exe
压缩包。
如果你找到的版本里面,有对应openssl
的可执行文件,那就对了。然后把第一步中下载到的config.bin
文件拖到openssl.exe
一起,目的仅仅是执行命令的时候,不用考虑路径问题。执行如下解密命令即可:
openssl enc -d -des-ecb -nopad -K 478DA50BF9E3D2CF -in config.bin
命令里面的参数是怎么来的,苏南大叔表示傻傻的不清楚。执行完毕后,刚才还是乱码的config.bin
文件。变得清晰起来,然后,我们移动到第一行,看一下authKey
这个值,就是加密后的密码。
破解密码
下一个漏洞就是,这个密码的加密算法,是用js
写在前端里面的。直接看登录页的源码,似乎看不出什么问题来,但是如果打开chrome
的开发者模式,切换到source
标签,就可以在lib
目录的Quary.js
文件中,找到加密的算法。关键词是orgAuthPwd
。别问我怎么找到的,职业敏感性而已。
苏南大叔的思路是:随机生成密码,然后把随机的密码,用找出的算法加密,如果加密的结果和authkey
一致,那么就停止计算。while(true)
死循环写在开发者工具的console
里面,然后电脑风扇狂转了一个小时,啥也没跑出来。
所以只能换个思路:既然加密算法已知了,而加密后的密码也是已知的,所以苏南大叔可以倒推原密码。所以,仔细阅读了一下,加密的js
源码,写了个解密的js
放到了node
里面,去跑一下。蛮容易的,就拿到了个密码。原理上来说,确实是可以有很多个密码,用这个加密算法加密后,得到相关的加密结果(authKey
)的。
关键代码描述
原加密算法:
this.securityEncode = function(input1, input2, input3)
{
var dictionary = input3;
var output = "";
var len, len1, len2, lenDict;
var cl = 0xBB, cr = 0xBB;
len1 = input1.length;
len2 = input2.length;
lenDict = dictionary.length;
len = len1 > len2 ? len1 : len2;
for (var index = 0; index < len; index++)
{
cl = 0xBB;
cr = 0xBB;
if (index >= len1)
{
cr = input2.charCodeAt(index);
}
else if (index >= len2)
{
cl = input1.charCodeAt(index);
}
else
{
cl = input1.charCodeAt(index);
cr = input2.charCodeAt(index);
}
output += dictionary.charAt((cl ^ cr)%lenDict);
}
return output;
};
this.orgAuthPwd = function(pwd)
{
var strDe = "RDpbLfCPsJZ7fiv";
var dic = "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciX"+
"TysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgML"+
"wygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3"+
"sfQ1xtXcPcf1aT303wAQhv66qzW";
return this.securityEncode(pwd, strDe, dic);
};
苏南大叔写的简易逆推解密算法:
解密的过程,相对简单。只是需要特殊说明一下:
xor
的逆转算法,还是xor
.....在js
里面,如果A^B=C
,那么A=C^B
。这个按位异或的操作,很罕见。- 解密出来的新密码,虽然不同的位数下,都可以加密得到最终的
authKey
。但是只有和原密码长度一致的新密码,才能进入管理界面。所以,可能在长度方面,还是有所限制的。
结束语
这个tplink
路由器的登录密码的解密算法就记录到这里为止。很久没有做这方面的破解了,很高兴还能够解出来最终的数据。更多加密加密的文章,大家可以点击这里查看:https://newsn.net/tag/加密解密/ 。
这个漏洞,tplink
官方早就有修复,但是带有这问题的路由器,还是存在的。比如苏南大叔现在正在使用的这款路由器。很多年了,蛮好用的.........
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
学习一个
确实牛逼啊,试试
我想问一下 你这个解密的算法怎么用?小白不懂
用node运行
爱了爱了
看看学习一下
解密代码来一波~
很厉害 正在实践
来一波解密代码
good
很厉害 正在实践
来一波解密代码
来一波解密代码
来试试
能否解释一下如何解密hikvision的配置文件?
hikvision 是啥?
learn how to decrpt
learn how to decrpt
ghjk