JeecgBoot passwordChange 任意用户密码重置漏洞

admin 2025年1月13日09:43:58272 views字数 660阅读2分12秒阅读模式
00

产品简介
Jeecg Boot是一个企业级低代码开发平台,基于前后端分离的架构,融合了SpringBootSpringCloud、Ant Design、Vue、Mybatisplus、Shir0、JWT等多种主流技术,旨在帮助企业快速构建各种应用系统,提高开发效率,降低开发成本。采用最新主流的前后分离框架,使得开发更加灵活,易于维护和扩展。而且拥有强大的代码 生成器,可以一键生成前后端代码,极大地提高了开发效率。同时,代码生成器还提供了自定义模板风格的功能,满足不同项目的需求。可以应用在任何J2EE项目的开发中,尤其适合SAAS项目、企业信息管理系统(MIS)、内部办公系统(OA)、企业资源计划系统(ERP)、客户关系管理系统(CRM)等。

01
漏洞概述

JeecgBoot 框架passwordChange接口存在任意用户密码重置漏洞,未经身份验证的远程攻击者可以利用此漏洞重置管理员账户密码,从而接管系统后台,造成信息泄露,导致系统处于极不安全的状态。

02
搜索引擎
FOFA:
body="/sys/common/pdf/pdfPreviewIframe"
JeecgBoot passwordChange 任意用户密码重置漏洞
03
漏洞复现
JeecgBoot passwordChange 任意用户密码重置漏洞
PS:有些环境无jeecg-boot目录 
JeecgBoot passwordChange 任意用户密码重置漏洞
尝试登录
JeecgBoot passwordChange 任意用户密码重置漏洞
04
自查工具

nuclei

JeecgBoot passwordChange 任意用户密码重置漏洞

afrog

JeecgBoot passwordChange 任意用户密码重置漏洞

xray

JeecgBoot passwordChange 任意用户密码重置漏洞
05
修复建议

1、关闭互联网暴露面或接口设置访问权限

2、厂商已尚未提供漏洞修补方案,请关注厂商主页及时更新:

https://www.jeecg.com/

06

原文始发于微信公众号(nday POC):JeecgBoot passwordChange 任意用户密码重置漏洞

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月13日09:43:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JeecgBoot passwordChange 任意用户密码重置漏洞https://cn-sec.com/archives/3623642.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.
评论  2  访客  2
    • noname 0

      /**
      * 用户更改密码
      */
      @GetMapping("/passwordChange")
      public Result passwordChange(@RequestParam(name="username")String username,
      @RequestParam(name="password")String password,
      @RequestParam(name="smscode")String smscode,
      @RequestParam(name="phone") String phone) {
      Result result = new Result();
      if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(password) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone) ) {
      result.setMessage("重置密码失败!");
      result.setSuccess(false);
      return result;
      }

      SysUser sysUser=new SysUser();
      //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
      String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+phone;
      Object object= redisUtil.get(redisKey);
      //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
      if(null==object) {
      result.setMessage("短信验证码失效!");
      result.setSuccess(false);
      return result;
      }
      if(!smscode.equals(object.toString())) {
      result.setMessage("短信验证码不匹配!");
      result.setSuccess(false);
      return result;
      }
      sysUser = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername,username).eq(SysUser::getPhone,phone));
      if (sysUser == null) {
      result.setMessage("当前登录用户和绑定的手机号不匹配,无法修改密码!");
      result.setSuccess(false);
      return result;
      } else {
      String salt = oConvertUtils.randomGen(8);
      sysUser.setSalt(salt);
      String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
      sysUser.setPassword(passwordEncode);
      this.sysUserService.updateById(sysUser);
      //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]密码重置添加敏感日志------------
      baseCommonService.addLog("重置 "+username+" 的密码,操作人: " +sysUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
      //update-end---author:wangshuai ---date:20220316 for:[VUEN-234]密码重置添加敏感日志------------
      result.setSuccess(true);
      result.setMessage("密码重置完成!");
      //修改完密码后清空redis
      redisUtil.removeAll(redisKey);
      return result;
      }
      }
      建议贵站不要随便采集公众号的文章,建议文章都审核一遍,要不来这看文章就没意义了!!

        • admin

          @ noname 我们后续将尽力改善,感谢师傅的支持和指导

      发表评论

      匿名网友 填写信息