查看: 18708|回复: 5

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

[复制链接]
  • TA的每日心情
    慵懒
    2022-4-16 15:45
  • 签到天数: 247 天

    [LV.8]以坛为家I

    发表于 2015-1-20 11:55:25 | 显示全部楼层 |阅读模式
    虽然验证码进行了加密,但是逻辑上还有点问题

    问题出在

    ..\includes\cls_captcha.php

    通过验证函数可以看到直接返回,并没有对验证失败进行处理
    [PHP] 纯文本查看 复制代码
    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
    [PHP] 纯文本查看 复制代码
    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)
    
        {....}

    d87368736319710956ede21cb68e674420150118101429.png

    评分

    参与人数 1i币 +4 收起 理由
    clocks + 4 感谢分享

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    发表于 2015-1-20 13:25:48 | 显示全部楼层
    试试看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-9-13 00:40
  • 签到天数: 444 天

    [LV.9]以坛为家II

    发表于 2015-1-20 20:11:56 | 显示全部楼层
    这都被你发现了,,,果然的挖掘党啊
    同时表示对你的分享表示感谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-6-1 14:33
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2015-1-21 12:59:49 | 显示全部楼层
    挖啊挖。漏洞好像一直挖不完
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-1-23 11:21:14 | 显示全部楼层
    最近大牛都在玩密码爆破了 乌云也在讨论验证码识别
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-1-27 11:19:55 | 显示全部楼层
    逻辑不错,学习!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-23 05:38 , Processed in 0.027985 second(s), 20 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部