ecshop一处验证码绕过逻辑漏洞

暗月博客 2019年11月21日21:20:23评论427 views字数 1496阅读4分59秒阅读模式
摘要

一处逻辑 漏洞 导致绕过 虽然验证码进行了加密,但是逻辑 上还有点问题

问题出在

../includes/cls_captcha.php

通过验证函数可以看到直接返回,并没有对验证失败进行处理

简要描述:

一处逻辑漏洞导致绕过

详细说明:

虽然验证码进行了加密,但是逻辑上还有点问题

问题出在

../includes/cls_captcha.php

通过验证函数可以看到直接返回,并没有对验证失败进行处理

code 区域

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)); //验证规则      }

也就是说如果登陆失败的时候没有对验证码SESSION置空的话,就可以在这次请求中反复尝试进行破解。

下面代码可以看到并没有对验证错误的时候进行处理

../ecshop/admin/privilege.php

code 区域

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)      {....}

漏洞证明:

ecshop一处验证码绕过逻辑漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
暗月博客
  • 本文由 发表于 2019年11月21日21:20:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ecshop一处验证码绕过逻辑漏洞http://cn-sec.com/archives/72747.html

发表评论

匿名网友 填写信息