来源:未知 时间:2015-04-15 13:40 作者:xxadmin 阅读:次
[导读] 一处逻辑 漏洞 导致绕过 虽然验证码进行了加密,但是逻辑上还有点问题 问题出在 ..\includes\cls_captcha.php 通过验证函数可以看到直接返回,并没有对验证失败进行处理 function check_word(...
|
一处逻辑漏洞导致绕过 虽然验证码进行了加密,但是逻辑上还有点问题
function check_word($word)
{
$recorded = isset($_SESSION[$this->session_word]) ? base64_decode($_SESSION[$this->session_word]) : '';
$given = $this->encrypts_word(strtoupper($word)); //MD5加密处理
return (preg_match("/$given/", $recorded)); //验证规则
}
if (intval($_CFG['captcha']) & CAPTCHA_ADMIN)
{
include_once(ROOT_PATH . 'includes/cls_captcha.php');
/* 检查验证码是否正确 */
$validator = new captcha();
if (!empty($_POST['captcha']) && !$validator->check_word($_POST['captcha']))
{
sys_msg($_LANG['captcha_error'], 1);
}
}
$_POST['username'] = isset($_POST['username']) ? trim($_POST['username']) : '';
$_POST['password'] = isset($_POST['password']) ? trim($_POST['password']) : '';
$sql="SELECT `ec_salt` FROM ". $ecs->table('admin_user') ."WHERE user_name = '" . $_POST['username']."'";
echo $sql."<br/>";
$ec_salt =$db->getOne($sql);
if(!empty($ec_salt))
{
/* 检查密码是否正确 */
$sql = "SELECT user_id, user_name, password, last_login, action_list, last_login,suppliers_id,ec_salt".
" FROM " . $ecs->table('admin_user') .
" WHERE user_name = '" . $_POST['username']. "' AND password = '" . md5(md5($_POST['password']).$ec_salt) . "'";
}
else
{
/* 检查密码是否正确 */
$sql = "SELECT user_id, user_name, password, last_login, action_list, last_login,suppliers_id,ec_salt".
" FROM " . $ecs->table('admin_user') .
" WHERE user_name = '" . $_POST['username']. "' AND password = '" . md5($_POST['password']) . "'";
}
$row = $db->getRow($sql);
if ($row)
{....}
解决方案:通过以上代码,可以看出是验证码session没有置空导致的,每次登陆都session(null)就行了 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com