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的时候 就成功了。
然后直接访问
重置成功。
修复方案
还是不要用随机的把。。