当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(69) 关注此漏洞

缺陷编号: WooYun-2014-63655

漏洞标题: ECSHOP前台任意用户登录

相关厂商: ShopEx

漏洞作者: 路人甲

提交时间: 2014-06-05 15:28

公开时间: 2014-09-03 15:30

漏洞类型: 设计缺陷/逻辑错误

危害等级: 高

自评Rank: 15

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 无

15人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-05: 细节已通知厂商并且等待厂商处理中
2014-06-06: 厂商已经确认,细节仅向厂商公开
2014-06-09: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-07-31: 细节向核心白帽子及相关领域专家公开
2014-08-10: 细节向普通白帽子公开
2014-08-20: 细节向实习白帽子公开
2014-09-03: 细节向公众公开

简要描述:

由于代码设计缺陷 导致网站任意用户登录

详细说明:

影响文件:flow.php 188行开始

code 区域
elseif ($_REQUEST['step'] == 'login')
{
include_once('languages/'. $_CFG['lang']. '/user.php');

/*
* 用户登录注册
*/
if ($_SERVER['REQUEST_METHOD'] == 'GET')
.....
else
{
include_once('includes/lib_passport.php');
if (!empty($_POST['act']) && $_POST['act'] == 'signin')
{
$captcha = intval($_CFG['captcha']);
if (($captcha & CAPTCHA_LOGIN) && (!($captcha & CAPTCHA_LOGIN_FAIL) || (($captcha & CAPTCHA_LOGIN_FAIL) && $_SESSION['login_fail'] > 2)) && gd_version() > 0)
{
if (empty($_POST['captcha']))
{
show_message($_LANG['invalid_captcha']);
}

/* 检查验证码 */
include_once('includes/cls_captcha.php');

$validator = new captcha();
$validator->session_word = 'captcha_login';
if (!$validator->check_word($_POST['captcha']))
{
show_message($_LANG['invalid_captcha']);
}
}

if ($user->login($_POST['username'], $_POST['password'],isset($_POST['remember'])))
{
.....
}





上面代码中执行了 登录操作 $user->login($_POST['username'], $_POST['password'],isset($_POST['remember'])



login方法如下:(

code 区域
function login($username, $password, $remember = null)
{
if ($this->check_user($username, $password) > 0)
{
if ($this->need_sync)
{
$this->sync($username,$password);
}
$this->set_session($username);
$this->set_cookie($username, $remember);

return true;
}
else
{
return false;
}
}

function check_user($username, $password = null)
{

$post_username = $username;

/* 如果没有定义密码则只检查用户名 */
if ($password === null)
{
$sql = "SELECT " . $this->field_id .
" FROM " . $this->table($this->user_table).
" WHERE " . $this->field_name . "='" . $post_username . "'";

return $this->db->getOne($sql);
}
else
{
$sql = "SELECT " . $this->field_id .
" FROM " . $this->table($this->user_table).
" WHERE " . $this->field_name . "='" . $post_username . "' AND " . $this->field_pass . " ='" . $this->compile_password(array('password'=>$password)) . "'";

return $this->db->getOne($sql);
}
}





登录操作最终执行check_user方法,当用户密码为null时,只判断用户名。而在flow.php中并没有对密码进行判断或者初始化。可以只通过账号就可以实现登录。



url: ./flow.php?step=login

POST: act=signin&username=xxxx&captcha=yyyyy

captcha是验证码,有时候是不需要验证码的

漏洞证明:

影响文件:flow.php 188行开始

code 区域
elseif ($_REQUEST['step'] == 'login')
{
include_once('languages/'. $_CFG['lang']. '/user.php');

/*
* 用户登录注册
*/
if ($_SERVER['REQUEST_METHOD'] == 'GET')
.....
else
{
include_once('includes/lib_passport.php');
if (!empty($_POST['act']) && $_POST['act'] == 'signin')
{
$captcha = intval($_CFG['captcha']);
if (($captcha & CAPTCHA_LOGIN) && (!($captcha & CAPTCHA_LOGIN_FAIL) || (($captcha & CAPTCHA_LOGIN_FAIL) && $_SESSION['login_fail'] > 2)) && gd_version() > 0)
{
if (empty($_POST['captcha']))
{
show_message($_LANG['invalid_captcha']);
}

/* 检查验证码 */
include_once('includes/cls_captcha.php');

$validator = new captcha();
$validator->session_word = 'captcha_login';
if (!$validator->check_word($_POST['captcha']))
{
show_message($_LANG['invalid_captcha']);
}
}

if ($user->login($_POST['username'], $_POST['password'],isset($_POST['remember'])))
{
.....
}





上面代码中执行了 登录操作 $user->login($_POST['username'], $_POST['password'],isset($_POST['remember'])



login方法如下:(

code 区域
function login($username, $password, $remember = null)
{
if ($this->check_user($username, $password) > 0)
{
if ($this->need_sync)
{
$this->sync($username,$password);
}
$this->set_session($username);
$this->set_cookie($username, $remember);

return true;
}
else
{
return false;
}
}

function check_user($username, $password = null)
{

$post_username = $username;

/* 如果没有定义密码则只检查用户名 */
if ($password === null)
{
$sql = "SELECT " . $this->field_id .
" FROM " . $this->table($this->user_table).
" WHERE " . $this->field_name . "='" . $post_username . "'";

return $this->db->getOne($sql);
}
else
{
$sql = "SELECT " . $this->field_id .
" FROM " . $this->table($this->user_table).
" WHERE " . $this->field_name . "='" . $post_username . "' AND " . $this->field_pass . " ='" . $this->compile_password(array('password'=>$password)) . "'";

return $this->db->getOne($sql);
}
}





登录操作最终执行check_user方法,当用户密码为null时,只判断用户名。而在flow.php中并没有对密码进行判断或者初始化。可以只通过账号就可以实现登录。



url: ./flow.php?step=login

POST: act=signin&username=xxxx&captcha=yyyyy

captcha是验证码,有时候是不需要验证码的

修复方案:

初始化密码

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-06 09:16

厂商回复:

非常感谢您为shopex信息安全做的贡献
我们将尽快修复,发布补丁
非常感谢

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-06-05 15:29 | Finger 认证白帽子 ( 普通白帽子 | Rank:777 漏洞数:95 | 最近有人冒充该账号行骗,任何自称Finger并...)
    0

    这错误...

  2. 2014-06-05 16:39 | YouYaX(乌云厂商)
    0

    一般涉及任意用户的都是cookie的问题

  3. 2014-06-05 16:44 | Finger 认证白帽子 ( 普通白帽子 | Rank:777 漏洞数:95 | 最近有人冒充该账号行骗,任何自称Finger并...)
    0

    @YouYaX 那可不一定

  4. 2014-06-05 17:21 | magerx ( 普通白帽子 | Rank:257 漏洞数:45 | 别说话。)
    0

    莫非空。。

  5. 2014-06-05 18:41 | ′ 雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    0

    @YouYaX 亲 你好活跃

  6. 2014-06-05 19:41 | YouYaX(乌云厂商)
    0

    @′ 雨。 学习知识

  7. 2014-06-05 21:34 | erevus ( 普通白帽子 | Rank:197 漏洞数:32 )
    0

    @YouYaX 目测是调用时没有判断密码

  8. 2014-06-05 22:28 | YouYaX(乌云厂商)
    1

    ecshop是开源免费的,商派不紧张的,要是攻破shopex,那么估计第一时间修复了

  9. 2014-06-05 23:18 | blue 认证白帽子 ( 普通白帽子 | Rank:779 漏洞数:70 | 我心中有猛虎,细嗅蔷薇。)
    0

    听上去很强大,这个厉害啊,赞!

  10. 2014-06-05 23:29 | 大白菜 ( 实习白帽子 | Rank:52 漏洞数:19 )
    0

    这个好活跃

  11. 2014-06-06 10:02 | 秋风 ( 普通白帽子 | Rank:438 漏洞数:44 | 码农一枚,关注互联网安全)
    0

    NB!

  12. 2014-06-10 01:31 | 网络小兵 ( 路人 | Rank:13 漏洞数:3 | t00ls)
    0

    20分啊

  13. 2014-06-10 02:19 | 网络小兵 ( 路人 | Rank:13 漏洞数:3 | t00ls)
    0

    有人猜中了啊,已经成功复现。

  14. 2014-06-10 11:44 | 笨猫猫 ( 实习白帽子 | Rank:35 漏洞数:5 | 喵勒个咪的)
    0

    应该不是cookie 看了是验证了密码的

  15. 2014-09-03 18:14 | 杜工 ( 路人 | Rank:1 漏洞数:3 | 架构人生)
    0

    这种情况...很不理解程序员为什么要写这个逻辑,故意留漏洞?

  16. 2015-10-12 22:22 | whitemonty ( 路人 | Rank:7 漏洞数:4 | Secur1ty just lik3 a girl. B0th of th3m ...)
    0

    @杜工 我也很好奇,好奇葩的逻辑

登录后才能发表评论,请先 登录