【JAVA代审】基于Spring boot的医药管理系统审计

admin 2025年4月23日00:32:12评论0 views字数 4488阅读14分57秒阅读模式
【JAVA代审】基于Spring boot的医药管理系统审计
【JAVA代审】基于Spring boot的医药管理系统审计

点击上方蓝字·关注我们

免责声明
【JAVA代审】基于Spring boot的医药管理系统审计

由于传播、利用本公众号菜狗安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号菜狗安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。

前言
【JAVA代审】基于Spring boot的医药管理系统审计
本篇文章首发在先知社区,作者C@ig0 (本人)  先知社区名称:caigo 转载原文链接为:https://xz.aliyun.com/news/17687
文章目录
【JAVA代审】基于Spring boot的医药管理系统审计
环境搭建代码审计    鉴权逻辑    未授权任意密码重置    未授权SQL注入    水平越权    任意文件上传    未授权任意文件下载最后           

环境搭建

源获取在网站最后

环境准备

IDEA 2024.2.3Maven 3.9.9JDK 1.8.0_65

使用IDEA打开项目,修改JDK和maven配置,等待Maven加载

【JAVA代审】基于Spring boot的医药管理系统审计

修改配置文件:src/main/resources/application.yml

【JAVA代审】基于Spring boot的医药管理系统审计创建对应数据库,导入SQL文件

【JAVA代审】基于Spring boot的医药管理系统审计

接着启动项目即可

后台登录页面

http://localhost:8080/yiyaoguanlixitong/admin/dist/index.html

管理员:admin/admin员工:a1/123456员工:a2/123456员工:a3/123456
【JAVA代审】基于Spring boot的医药管理系统审计

代码审计

鉴权逻辑

优先关注项目是否存在拦截器和过滤器

【JAVA代审】基于Spring boot的医药管理系统审计

发现存在拦截器

【JAVA代审】基于Spring boot的医药管理系统审计

代码分析

这里代码访问两部分,一部分是用户校验逻辑,一部分是允许未授权访问的逻辑,我们一个个看

用户鉴权逻辑

    // 根据token获取用户信息    TokenEntity tokenEntity = null;    if(StringUtils.isNotBlank(token)) {        tokenEntity = tokenService.getTokenEntity(token);    }    // 如果用户信息存在,将用户相关信息存入session,并允许继续执行    if(tokenEntity != null) {        request.getSession().setAttribute("userId", tokenEntity.getUserid());        request.getSession().setAttribute("role", tokenEntity.getRole());        request.getSession().setAttribute("tableName", tokenEntity.getTablename());        request.getSession().setAttribute("username", tokenEntity.getUsername());        return true;    }    // 如果用户未登录,返回错误信息    PrintWriter writer = null;    response.setCharacterEncoding("UTF-8");    response.setContentType("application/json; charset=utf-8");    try {        writer = response.getWriter();        writer.print(JSONObject.toJSONString(R.error(401"请先登录")));    } finally {        if(writer != null){            writer.close();        }    }    // 返回false,中断执行    return false;

通过token校验用户身份,这里token的生成逻辑中存在随机数,伪造不了

【JAVA代审】基于Spring boot的医药管理系统审计

未授权访问接口

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {    // 获取请求的Servlet路径    String servletPath = request.getServletPath();    // 对特定路径进行放行,不需要进行后续的权限验证    if("/dictionary/page".equals(request.getServletPath())  || "/file/upload".equals(request.getServletPath()) || "/yonghu/register".equals(request.getServletPath()) ){        //请求路径是字典表或者文件上传 直接放行        return true;    }    // 支持跨域请求    response.setHeader("Access-Control-Allow-Methods""POST, GET, OPTIONS, DELETE");    response.setHeader("Access-Control-Max-Age""3600");    response.setHeader("Access-Control-Allow-Credentials""true");    response.setHeader("Access-Control-Allow-Headers""x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));    // 检查处理方法上的IgnoreAuth注解    IgnoreAuth annotation;    if (handler instanceof HandlerMethod) {        annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);    } else {        // 如果处理器不是HandlerMethod实例,直接放行        return true;    }    // 从header中获取token    String token = request.getHeader(LOGIN_TOKEN_KEY);    /**     * 不需要验证权限的方法直接放过     */    if(annotation!=null) {        return true;    }}

/dictionary/page和/file/upload路由,以及存在@IgnoreAuth注解的路由可以不需要token验证

未授权任意密码重置

通过未授权方法分析,全局搜索@IgnoreAuth注解

【JAVA代审】基于Spring boot的医药管理系统审计

有很多接口存在未授权,这里挑个危害大点的演示

【JAVA代审】基于Spring boot的医药管理系统审计

通过用户名重置密码

【JAVA代审】基于Spring boot的医药管理系统审计

查看数据库

【JAVA代审】基于Spring boot的医药管理系统审计

修改成功

未授权SQL注入

先判断数据库使用技术

【JAVA代审】基于Spring boot的医药管理系统审计

采用mybatis

全局搜索${

【JAVA代审】基于Spring boot的医药管理系统审计

看到有不少,我这里演示一处我测试后可以的【JAVA代审】基于Spring boot的医药管理系统审计

关注column参数,跳转到Dao层

【JAVA代审】基于Spring boot的医药管理系统审计

接着往上,一步步到controller

【JAVA代审】基于Spring boot的医药管理系统审计
【JAVA代审】基于Spring boot的医药管理系统审计

通过url的columnName传入,这里通过参数名也可以看出是通过数据库表列查数据的,并且可以看到这个接口存在@IgnoreAuth,也就是不需要token验证,这里我测试下得先构造个正常请求然后放到sqlmap

数据包

GET /yiyaoguanlixitong/option/users/id* HTTP/1.1Host192.168.242.1:8081Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: JSESSIONID=179AE5E24A3E8C5B70785BE1551E6E71Accept: application/json, text/plain, */*User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Referer: http://192.168.242.1:8081/yiyaoguanlixitong/admin/dist/index.html
【JAVA代审】基于Spring boot的医药管理系统审计

水平越权

登录普通用户,测试后台功能点

【JAVA代审】基于Spring boot的医药管理系统审计

看到这个就忍不住测越权,抓包查看

【JAVA代审】基于Spring boot的医药管理系统审计

根据路由定位代码

【JAVA代审】基于Spring boot的医药管理系统审计

【JAVA代审】基于Spring boot的医药管理系统审计通过传入的用户id进行数据修改,没有看到校验用户id和当前用户id的校验,那么这里存在越权

【JAVA代审】基于Spring boot的医药管理系统审计

测试修改id为2的用户

【JAVA代审】基于Spring boot的医药管理系统审计

成功修改

任意文件上传

全局搜索关键词upload

【JAVA代审】基于Spring boot的医药管理系统审计

这里获取我们上传文件的文件后缀后没有进行检测直接进行拼接,最后通过file.transferTo(dest);上传文件

【JAVA代审】基于Spring boot的医药管理系统审计

成功上传

【JAVA代审】基于Spring boot的医药管理系统审计

未授权任意文件下载

全局搜索关键词download

【JAVA代审】基于Spring boot的医药管理系统审计

这里没有对我们传入的文件名进行检测,存在目录穿越,可以跨目录读文件,并且也是未授权接口

构造请求数据包测试

POST /yiyaoguanlixitong/file/download?fileName=../../db.sql HTTP/1.1Host192.168.242.1:8081Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryjAVOsCyJC8wB9fbqTokenCookie: JSESSIONID=179AE5E24A3E8C5B70785BE1551E6E71Accept-Language: zh-CN,zh;q=0.9Accept: */*Origin: http://192.168.242.1:8081Referer: http://192.168.242.1:8081/yiyaoguanlixitong/admin/dist/index.htmlAccept-Encoding: gzip, deflateUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36Content-Length: 290
【JAVA代审】基于Spring boot的医药管理系统审计

最后

源码获取微信公众号回复“医药管理系统”获取下载地址

二期公开课《PHP代码审计速成》目前已经开课,持续更新中...

【JAVA代审】基于Spring boot的医药管理系统审计

直播通知和课件都会在交流群中发布,有需要的师傅可以加我VX,备注:交流群,我拉你进群

【JAVA代审】基于Spring boot的医药管理系统审计
性感群主不定期在线水群解答问题

原文始发于微信公众号(菜狗安全):【JAVA代审】基于Spring boot的医药管理系统审计

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

发表评论

匿名网友 填写信息