WooYun-2014-50304:Thinksaas找回密码处设计错误利用账户可找回密码。

漏洞作者: ′雨。认证白帽子

来源:http://www.wooyun.org/bugs/wooyun-2014-050304

简要描述

找回密码处 设置的链接不好把。。

详细说明

找回密码处 发送邮件给找回密码的地址 但是找回密码的地址只有一个变量。

只要知道要找回的账户 就可以直接爆破。

.../thinksaas2/index.php?app=user&ac=resetpwd&mail=admin@...&set=1d8c9f71eaa6923fc9d3cd5d10aea4ce

找回密码的地址。 app ac mail 这些都是知道的 只有set不知道。

在/app/user/action/forgetpwd.php处。

$resetpwd = md5(rand());

            $new['user']->update('user',array(

                'email'=>$email,

            ),array(

                'resetpwd'=>$resetpwd,

            ));

            //发送邮件

            $subject = $TS_SITE['base']['site_title'].'会员密码找回';

            $content = '您的登陆信息:<br />Email:'.$email.'<br />重设密码链接:<br /><a href="'.$TS_SITE['base']['site_url'].'index.php?app=user&ac=resetpwd&mail='.$email.'&set='.$resetpwd.'">'.$TS_SITE['base']['site_url'].'index.php?app=user&ac=resetpwd&mail='.$email.'&set='.$resetpwd.'</a>';

            echo $content;

可以看到 只有$resetpwd 不知道。 但是

$resetpwd = md5(rand());

是随机的 然后再md5 RAND_MAX 只有 32768

所以可以爆破之。

写个脚本 循环给1-32768 md5 一次 然后再载入burpsuite 进行爆破。

在测试过程中 最少的一次 只有300多。 最多的一次20000多 这个都看运气了。。

爆破速度也是很快的 吃个饭完了就好了。

漏洞证明

循环脚本。

循环出来的数据。

然后载入Burpsuite

设置好变量

开始爆破。

观察length 可以知道哪个是正确的。 可以看到我这个在7446的时候 就成功了。

然后直接访问

重置成功。

修复方案

还是不要用随机的把。。