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

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

缺陷编号:wooyun-2015-099669

漏洞标题:帝友P2P任意密码支付密码重置让我超越马云爸爸不再是梦想

相关厂商:厦门帝网信息科技有限公司

漏洞作者: Rtsjx

提交时间:2015-03-05 19:41

修复时间:2015-06-08 19:42

公开时间:2015-06-08 19:42

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:10

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-05: 细节已通知厂商并且等待厂商处理中
2015-03-10: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-05-04: 细节向核心白帽子及相关领域专家公开
2015-05-14: 细节向普通白帽子公开
2015-05-24: 细节向实习白帽子公开
2015-06-08: 细节向公众公开

简要描述:

本屌为穷逼,买不起贵司10+W的而且代码质量高到可怕的产品,所以下了一个D版系统看源码。在网贷之家随机挑了几个站点测试,发现问题都存在……

详细说明:

听说P2P借贷火成狗,然后看了看几家P2P借贷的站点,长得都差不多,看起来好像就是一个妈生的。本来想吐槽一下,关乎钱的事情,就不能认真点吗?但是,转念一想,艾玛,这不是一个通用程序么……赶紧脱掉裤子爽一发。
听说这货的产品卖得死贵(>15W),翻阅了一下写的代码,质量实在对不起这个价格。之前在乌云上厂商还会接点bug打发打发白帽,现在听说弄了个绿M的检测报告之后屌都不屌乌云一下。
扯蛋完毕,本屌是小白一个,还请各位看官海涵。
============================分割线============================
其实这不是一个漏洞,而是属于默认密钥未被重置的问题。
先来看看d友的密码重置过程:
发起密码重置 –> 验证用户名与邮箱是否一致 –> 生成并发送令牌 –> 验证令牌 –> 重置密码完成
问题出在验证令牌的流程上。
我们来看看/modules/member/index.php上对密码重置是怎么验证的:

……
elseif ($_U[‘query_class’] == ‘updatepwd’){
$updatepwd_msg = “”;
if(isset($_REQUEST[‘id’])){
$id = urldecode($_REQUEST[‘id’]);
【$data = explode(“,”,authcode(trim($id),”DECODE”));】
$user_id = $data[0];
$start_time = $data[1];
if ($user_id==””){
$updatepwd_msg = “您的操作有误,请勿乱操作”;
}elseif (time()>$start_time+10*60){
$updatepwd_msg = “此链接已经过期,请重新申请”;
}else{
$result = usersClass::GetUsers(array(“user_id”=>$user_id));
if ($result == false){
$updatepwd_msg = “您的操作有误,请勿乱操作”;
}else{
$_U[‘user_result’] = $result;
}
}
……


可以看到$data决定了是否能够重置密码,能够重置谁的密码。正常情况下,$data应当是一个拥有两个及以上元素的数组,其中第一个元素表示需要重置的用户ID,第二个元素表示令牌的生成时间(10分钟后过期)。
在$data的解码过程中,authcode函数非常重要,接着来看看authcode函数的处理过程,该函数位于文件/core/function.inc.php:

function authcode($string,$operation = ‘DECODE’,$key = ”,$expiry = 0) {
$ckey_length = 4;
$key = md5($key ?$key : “dw10c20m05w18″);
$keya = md5(substr($key,0,16));
$keyb = md5(substr($key,16,16));
$keyc = $ckey_length ?($operation == ‘DECODE’?substr($string,0,$ckey_length): substr(md5(microtime()),-$ckey_length)) : ”;
……


可以看到,这个函数拥有一个默认的密钥,而之前验证的过程中,并没有指定一个特别的密钥。
社会主义的直觉告诉我,那这里就有个世界和平问题。
我随便挑了一个用了这个软件的站点,发起密码重置请求,得到了字符串:

QQ截图20150305152129.png


本地使用默认密钥反解这个字符串,得到:

QQ截图20150305153013.png


接着,把3494改成1,并加密回去,看看能不能重置这货的密码:

QQ截图20150305153153.png


呵呵。
更为可怕的是,这货的支付密码还能以同样的方式被重置:

QQ截图20150305153749.png


嗯,看来过不了几天我就能超越马云爸爸了。哎,警察同志您先别开枪……

漏洞证明:

修复方案:

版权声明:转载请注明来源 Rtsjx@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-06-08 19:42

厂商回复:

最新状态:

暂无


漏洞评价:

评论

  1. 2015-03-05 19:52 | 无心、 ( 实习白帽子 | Rank:71 漏洞数:20 | 你不是风儿,我也不是沙,再怎么缠绵也到不...)

    .......超越马云,这个公司都没有马云值钱吧。。。

  2. 2015-03-05 21:03 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)

    用这个系统的企业不少吧

  3. 2015-03-05 21:23 | #6c6c6c ( 普通白帽子 | Rank:291 漏洞数:47 | 像一条狗孤独的活着,渴望的活着,绝望的活...)

    说实话,这代码确实不咋的,页面还可以,各种凌乱的文件

  4. 2015-03-05 23:06 | laoyao ( 路人 | Rank:14 漏洞数:5 | ด้้้้้็็็็็้้้้้็็็็...)

    马云多有钱呢, 这么说吧 , 从你现在开始 每天中500 W 到你死那天都没他钱多 就是这个意思

  5. 2015-03-06 07:44 | 浮世浮城 ( 普通白帽子 | Rank:284 漏洞数:60 | 我存于这俗世烟火的浮世,我爱这时光倒影的...)

    你还是人么 马云的爸爸都不放过

  6. 2015-03-06 08:19 | saga ( 路人 | Rank:11 漏洞数:2 | 世界上只有10种人,懂二进制的,和不懂二进...)

    马云都说了梦想是要有的,万一实现了呢?小伙子我支持你! 下次记得带上我

  7. 2015-03-06 09:32 | BMa ( 普通白帽子 | Rank:1776 漏洞数:200 )

    是超越马云的爸爸 哈哈

  8. 2015-05-25 14:38 | 继续沉默 ( 实习白帽子 | Rank:62 漏洞数:9 | 好好学习,天天向上)

    你这个是哪个版本的,我是没找到你这个代码在哪里。

  9. 2015-06-08 19:59 | Neeke ( 普通白帽子 | Rank:101 漏洞数:24 | 求传授刷Rank方法?)

    忽略了

  10. 2015-06-08 20:31 | 空格 ( 路人 | Rank:6 漏洞数:3 | 呃?)

    忽略完然后修复?呵呵哒

  11. 2015-06-08 21:22 | 找寻者 ( 路人 | Rank:2 漏洞数:1 | 学习啊)

    wooyun的一个建议:当主动忽略时,直接向核心和第三方公开之后直接对大众公开

  12. 2015-06-09 09:29 | 好人一生平安 ( 路人 | Rank:2 漏洞数:2 | ...)

    好莽啊,直接忽略。

  13. 2015-08-06 20:49 | hack2012 ( 实习白帽子 | Rank:31 漏洞数:3 | 关注信息安全 http://www.waitalone.cn/)

    兄弟,源代码在哪里下载呀?

  14. 2015-09-09 15:25 | Herolon ( 普通白帽子 | Rank:185 漏洞数:42 | ******)

    太淫荡了