我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

tplink路由器在国内甚至国际上,都是占有率第一的。就是这样的一款路由器,如果告诉你,路由器的密码除了你知晓的那个,还有个另外的影子密码,也能进入你的路由器,你是不是吓了一大跳?

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - tplink-password
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-1)

最近,苏南大叔,想升级自己的路由器固件,就百度到现在正在使用的一款的路由器的密码漏洞。当然了,这款路由器的最新固件,已经没有这个漏洞了。但是升级固件.... 只有发烧友才会这么干吧.... 本文测试路由器:tplink@TL-WR842N

前言

好,苏南大叔手里面的实验产品是个tplinkTL-WR842N,这款存在影子密码的路由器的固件版本号为:2.3.4 Build 141118 Rel.74025n。苏南大叔最终的实验结果是:使用了一个计算出来的密码(并非原本的密码),进入了路由器。这个算的上是个不大不小的漏洞了吧?

如果你手头的路由器也是这款型号,不如试试吧,也许有类似的漏洞。网上其实流传有解密攻略POC,但是最终最关键的部分,是语焉不详,不知所云。在本篇文章中,苏南大叔将讲述具体的解密算法。

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - 000
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-2)

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - 001
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-3)

下载config.bin

当然是在你的路由器的ip地址后面加上config.bin来下载的了。ip地址呢,一般都是192.168.1.1,你可以查看你的路由器背面的说明。而这个config.bin文件里面就包含了加密后的路由器密码!而且是双重加密的。但是,对于一个网站来说,这么重要的东西,居然可以直接下载,这本身就是有问题的,这就是最大的隐患起源。

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - config
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-4)

分析config.bin文件

这个文件默认打开后,是个乱码,大家都看不懂。需要使用个openssl的工具进行转换。去openssl的官方去查找下载这个工具的话,貌似会失望的。这种太程序员的工具类都只是提供源码,让自己编译的。而编译的过程,一般都会较为痛苦。所以,个人建议您:还是跳过这个过程比较好。所以,苏南大叔在百度上面找了一个opensslexe压缩包。

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - 333
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-5)

如果你找到的版本里面,有对应openssl的可执行文件,那就对了。然后把第一步中下载到的config.bin文件拖到openssl.exe一起,目的仅仅是执行命令的时候,不用考虑路径问题。执行如下解密命令即可:

openssl enc -d -des-ecb -nopad -K 478DA50BF9E3D2CF -in config.bin

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - open_cmd
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-6)

命令里面的参数是怎么来的,苏南大叔表示傻傻的不清楚。执行完毕后,刚才还是乱码的config.bin文件。变得清晰起来,然后,我们移动到第一行,看一下authKey这个值,就是加密后的密码。

破解密码

下一个漏洞就是,这个密码的加密算法,是用js写在前端里面的。直接看登录页的源码,似乎看不出什么问题来,但是如果打开chrome的开发者模式,切换到source标签,就可以在lib目录的Quary.js文件中,找到加密的算法。关键词是orgAuthPwd。别问我怎么找到的,职业敏感性而已。

苏南大叔:一个路由器两个密码,你的 tplink 路由器还安全吗? - quary
一个路由器两个密码,你的 tplink 路由器还安全吗?(图7-7)

苏南大叔的思路是:随机生成密码,然后把随机的密码,用找出的算法加密,如果加密的结果和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);
};

苏南大叔写的简易逆推解密算法:

newsn.net:这里是【评论】可见内容

解密的过程,相对简单。只是需要特殊说明一下:

  • xor的逆转算法,还是xor.....在js里面,如果A^B=C,那么A=C^B。这个按位异或的操作,很罕见。
  • 解密出来的新密码,虽然不同的位数下,都可以加密得到最终的authKey。但是只有和原密码长度一致的新密码,才能进入管理界面。所以,可能在长度方面,还是有所限制的。

结束语

这个tplink路由器的登录密码的解密算法就记录到这里为止。很久没有做这方面的破解了,很高兴还能够解出来最终的数据。更多加密加密的文章,大家可以点击这里查看:https://newsn.net/tag/加密解密/

这个漏洞,tplink官方早就有修复,但是带有这问题的路由器,还是存在的。比如苏南大叔现在正在使用的这款路由器。很多年了,蛮好用的.........

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   加密解密    tplink