我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
一、密码找回漏洞与测试
1、密码找回漏洞简介
为了防止用户遗忘密码,大多数网站都提供了找回密码功能。常见的找回密码方式有:邮箱找回密码、根据密码保护问题找回密码、根据手机号码找回密码等。虽然这些方式都可以找回密码,但实现方式各不相同。无论是哪种密码找回方式,在找回密码时,除了自己的用户密码,如果还能找回其他用户的密码,就存在密码找回漏洞。
密码找回漏洞在逻辑漏洞中占了较大的比例。测试密码找回漏洞与其他逻辑漏洞的方法相同,其中必经的两个步骤是:熟悉业务流程(密码找回过程)与对流程中的HTTP请求分析
。
2、密码找回漏洞测试
(1)源码审计:forget.php
<?php
include 'init.php';
//以下是关键漏洞代码:此处创建token的方法过滤简单!!!属于可预测型token!!!
function create_pass($username,$email){
$token=md5(time().$username.$email);
return $token;
}
echo '<meta charset="UTF-8">';
//以下是验证用户是否存在
if($_GET['c']=='forget'){
$username= trim($_POST['username']);
$re=mysql_query("select * from member where username='{
$username}'");
$row = mysql_fetch_array($re);
$_email = $row['email'];
if($row){
echo "<form method='post' action='?c=email'>";
echo "用户{
$row['username']}存在 请输入用户的邮箱";
echo "<input type='text' name='email'/>";
echo "<input type='hidden' name='username' value='{
$row['username']}'/>";
echo "<input type='submit' value='发送key'/></form>";
}
}
//以下是验证邮箱是否合法,然后模拟把含有token的修改密码链接发送给邮箱
if($_GET['c']=='email'){
$username= trim($_POST['username']);
$re=mysql_query("select * from member where username='{
$username}'");
$row = mysql_fetch_array($re