0

    Sangfor华东天勇战队:jeecg-boot登录分析

    2023.07.05 | admin | 134次围观

    realkey获取

    7evs1680077379806

    可以看到代码逻辑如下,md5(小写验证码+checkKey),这里checkKey是时间戳

    然后继续往下

    这里checkcode取值为空,这是为什么呢,是因为redisUtil中没有获得,登录的时候会存到redis中,不可能获得不了,是因为超过了60s,redis中自动清除了key,那么这也就限制了登录的时间,一定程度防止了中间人攻击

    那么我们快速操作一次

    可以看到if语句checkCode.toString().equals(lowerCaseCaptcha条件相等,因此绕过了if语句执行以下的语句

    密码加密

    继续看看密码加密部分

    进入encrypt()方法看看,这里传入三个参数plaintext,password,salt分别为用户名,密码,盐值

    通过getPBEKey()得到key值,通过PBEWithMD5AndDES算法进行加密,最终返回十六进制字符串[-53, 54, 44, -2, -17, -65, 61, -115]

    syspassword和userpassword进行对比,可以看到密码校验成功博客园登录用什么加密方式,绕过if继续下面的获得用户信息

    这里明显就是用户登录框输入账号密码,然后进行加密,与mysql数据库中的值进行比对

    这里引起我的疑问,就是数据是怎么从数据库中拿到的

    用到了lambda特性,从SysUser获得getUsername,那么跟踪SysUser

    来自于queryWrapper,那么queryWrapper来自LambdaQueryWrapper()类,

    那么就跟到了mybatis-plus中了

    那么这一块就是通过封装好的查询类queryWrapper进行查询的,先是通过eq进行用户名判断,然后.getOne()返回出这一条关于admin的数据

    可以看到这样就获得了数据库中的admin数据,也就获得了admin的password为cb362cfeefbf3d8d

    加密方式,可以看到

    这种加密方式具体算法我们不清楚,但是加密方法PasswordUtil.encrypt传入了三个参数用户名,密码,盐值,用户名密码都是登录处获得的博客园登录用什么加密方式,盐值是从数据库中拿到的,

    那么盐值是怎么生成的呢,那我们不由自主的想到了注册

    那么先不看salt怎么生成,我们先看token怎么生成的

    进入Userinfo()

    继续往下走

    利用Jwt生成token常用的代码块, 网上一搜一大堆

    接下来设置redis中的token缓存时间

    密码加密方式

    PasswordUtil passwordUtil = new PasswordUtil();
    String userpassword = passwordUtil.encrypt("admin", "123456", "RCGTeGiH");
    System.out.println(userpassword);
    

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论