java代码审计之学生管理系统

admin 2024年12月11日00:44:22评论35 views字数 2770阅读9分14秒阅读模式

项目技术分析

根据readme和pom文档可以知道该项目采用了以下技术:

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.22</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.62</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>
java代码审计之学生管理系统
image-20220901102052329

项目结构很清楚,不做过多阐述。

代码审计

XSS漏洞

仍然先从简单的XSS开始看,全局搜索XSS关键字,虽然有很多包含XSS的词语,但是感觉都不像是XSS过滤器,因此怀疑存在XSS漏洞。

java代码审计之学生管理系统
image-20220901102556004

随意的在一个业务系统下进行测试。

java代码审计之学生管理系统
image-20220901102659492
java代码审计之学生管理系统
image-20220901102710506

逻辑漏洞

任意密码重置

全局输入resetPasswd可以发现无论是TeacherController或者StudentController中描述的重置密码方式都没有做有效的权限验证。

public String resetPasswrd(String id) {
  Teacher teacher = new Teacher();
  teacher.setId(id);
  teacher.setPassword(MD5Util.MD5("123456"));
if (teacherService.updateTeacher(teacher) > 0) {
   return StrUtil.RESULT_TRUE;
}
  return "修改失败!";
}

以Teacher为例子,在Controller层中没有发现对权限有相关过滤代码,只有单纯的获得id。接下来去看teacherServiceimpl层里面的东西,其中的updateTeacher也是直接去调用了daoupdateTeacher方法。

  @Override
  public int updateTeacher(Teacher t) {
    return teacherDao.updateByPrimaryKeySelective(t);
  }

所以我猜测应该是存在任意重置密码的漏洞的

这个业务本来只能让管理员访问,但是我用了一下普通教师的账户,去访问该路由/teacher/resetPswd

java代码审计之学生管理系统
image-20220901112615206

对应了源码中的"修改失败",所以觉得八成是存在该漏洞。

我以id为1560321的身份访问/teacher/resetPswd?id=1560322,回弹true,并且在数据库中查看修改成功。

java代码审计之学生管理系统
image-20220901112933330

证明漏洞存在。

同时如果用学生账户,也可以重置其他任意学生的账户。

任意用户删除

同时举一反三,发现其/teacher/delete功能也有同样的毛病,可以直接删除同一权限下的其他账户。

使用id为1560321的老师账户访问以下路由:

/teacher/delete?id=1560322

java代码审计之学生管理系统
image-20220901115132498

可以看到已经删除成功了。

CSRF漏洞(比较鸡肋)

CSRF主要是看代码中是否校验Referer,是否给cookie设置Samesite属性,敏感操作是否生成CSRFtoken,如果都不存在的话,就看请求参数中是否存在不可被攻击者猜测的字段,比如验证码等参数。

在每个账户修改密码的业务系统中,抓包可以发现:

java代码审计之学生管理系统
image-20220901121833089

发现并没有相关做验证的字段,手工进行验证,生成CSRFPOC。使用管理员账户,登录系统后,点击poc。

java代码审计之学生管理系统
image-20220901122328376
java代码审计之学生管理系统
image-20220901122346556

但是比较鸡肋的一点就在于,他需要输入旧密码在后端进行验证。

java代码审计之学生管理系统
image-20220901122506229

这里就没有什么办法,但是如果你是以老师或者学生的身份,可以先去重置它的默认密码,然后进行修改。

原文始发于微信公众号(黑糖安全):java代码审计之学生管理系统

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月11日00:44:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   java代码审计之学生管理系统https://cn-sec.com/archives/1667913.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息