记一次springboot项目漏洞挖掘
前言
前段时间的比赛将该cms作为了题目考察,这个cms的洞也被大佬们吃的差不多了,自己也就借此机会来浅浅测试下这个cms残余漏洞,并记录下这一整个流程,谨以此记给小白师傅们分享下思路,有错误的地方还望大佬们请以指正。
安装
参考官方文档,给出了很详细的安装说明,如安装遇到问题,可到官方论坛寻找解决方法,常见安装失败问题都有。
https://gitee.com/iteachyou/dreamer_cms#https://gitee.com/link?target=https%3A%2F%2Fwww.iteachyou.cc%2Farticle%2F55ec2939c29147eca5bebabf19621655

该cms项目是基于springboot框架开发的,安装的时候需要的环境为 springboot+redis+mysql+ IDEA
配置文件主要是这两个application-prd.yml和application-dev.yml,需要配置好mysql数据库连接、redis连接以及网页静态资源路径,其余的安装上面的一步步安装即可。

安装成功后访问登陆页面

管理员账号密码已经给了,直接登录。

漏洞测试
风格管理模板存在任意编辑文件实现命令执行
经测试,发现后台风格管理模板上传主题压缩包时可以进行污染压缩包theme.json文件,达到目录穿越到服务器敏感目录,从而在模板管理在解析时没有进行检测可以任意编辑系统敏感文件导致GetShell,控制服务器权限。
漏洞产生的主要文件:主题上传Controller文件:src/main/java/cc/iteachyou/cms/controller/admin/ThemesController.java, 找到add方法。

首先是判断文件是否存在以及JSON解析是否正确;判断Key是否都存在;判断对应值是否为空;创建theme对象;判断设置路径是否已"default"开头。最后校验主题包各种配置是否正确。确认的话就成功上传。
帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
但是没有对themePath路径问题进行检测,便可构造目录穿越,这也是该漏洞造成的关键原因。
最后是判断上传的压缩包里的各类信息无误后进入处理保存文件逻辑的save方法。

在上传的主题包里的\dreamer\dreamer-cms\templates\default_v3\theme.json文件,将目录穿越的构造替换主题包路径,更改之后theme.json文件内容如下:
{"themeName":"新版主题","themeImage":"http://localhost:8888/resource/img/dreamercms-logo.png","themeAuthor":"","themePath":"../../../../../../../../../../../../../../"//此路径要和模板文件夹的名称一致
}
虽然有检测,但是在之前themeDir已经被污染了,所以相当于检测相当于没有。
接着检查是否有权限,startwith方法也没有问题。
``
最后就是保存文件。到此时后台模板已被刚刚传入的构造污染,可以进行利用,效果如下:
将修改后的主题包上传

风格页面会多出一个新的主题

点击启用。然后查看模板管理页面,发现目录穿越成功,成功进入服务器的根目录,这时就相当于在自己服务器上编辑修改文件。

测试文件为/home/www 目录下的1.txt文件,原本是空文件。

在页面修改该文件,添加内容

然后保存,再到服务器里查看,成功将内容加入。

如果修改authorized_key文件便可进行免密登录,利用压缩校验不正确从而上传任意危险文件,例如一句话木马等来获取系统权限;还可以获取系统passwd文件获取敏感信息,也可以写计划任务进行命令执行。
该漏洞分析到此为止,接着是附件管理模板可以进行任意文件下载、删除。
附件管理模板可以进行任意文件下载、删除。
漏洞产生主要文件:
src/main/java/cc/iteachyou/cms/controller/admin/AttachmentController.java
添加附件功能的代码如下:

首先肯定是先添加附件,这里没有对attachment参数进行过滤。导致保存附件的时候目录穿越的构造就被保留了下来,对其进行解析后就可以将服务器的指定文件随意下载、删除,从而对服务器构成威胁。
下载、删除功能的代码都在同一个文件,都是通过刚刚的attachment参数,然后使用attachment.getFilepath()获取服务器文件路径,对其进行解析。
先看下载功能的代码:

这里也没有对 filePath变量进行过滤,所以总的来说就是添加附件和下载附件的两处代码,都没有对相应的变量进行检测过滤,从而导致漏洞产生。
删除功能的代码:

删除的话就没什么好说的,和上面一样的原理,试想下,如果可以任意删除服务器的配置文件,那不就相当于服务器要崩的节奏。
漏洞演示如下:
还是利用刚刚/home/www目录下的1.txt文件

在添加附件模块先随便上传一个本地文件(这里随便上传了一个theme.txt文件)

burpsuite抓包如下

需要改的就是这个filepath参数对应的文件路径,将其修改为
../../../../../../../../../../../../../home/www/1.txt
然后放包。

刷新页面,观察到多了一个theme.txt文件,下载下来并打开内容如下:


服务器里的/home/www/1.txt里的内容193840sswwloP 已成功写入本地theme.txt文件,任意下载文件成功。
删除效果,点击右边的删除。

发现该1.txt文件被删除了,任意删除文件成功。
模板管理存在任意文件包含
产生漏洞的主要文件:
src/main/java/cc/iteachyou/cms/taglib/tags/IncludeTag.java

If语句只是简单判断值是否为空,但是没有检测过滤字符,导致可以传入目录穿越的构造../../../../../../../../../../../../../home/www/1.txt进行文件包含,读取里面内容。接着在模板管理找到index_about.html
将../../../../../../../../../../../../../home/www/1.txt写入div标签并保存,如下图

接着访问主页里的关于我们:

可以看到,成功进行了文件包含,如将构造/home/www/1.txt换成/etc/passwd这类敏感文件,则被攻击者获取到关键信息,这里也测试下:
修改构造

页面如期输出/etc/passwd文件里的信息。

总结
本文测试是在该cms旧版本上进行的,新版本对已有问题已进行了修复,这次对该java实现的cms漏洞挖掘收获满满,对cms安装、部署以及代码审计中要注意的点得到了良好的锻炼。
相关文章:
记一次springboot项目漏洞挖掘
前言 前段时间的比赛将该cms作为了题目考察,这个cms的洞也被大佬们吃的差不多了,自己也就借此机会来浅浅测试下这个cms残余漏洞,并记录下这一整个流程,谨以此记给小白师傅们分享下思路,有错误的地方还望大佬们请以指正…...
R语言 | 数据框
目录 一、认识数据框 7.1 建立第一个数据框 7.2 验证与设定数据框的列名和行名 二、认识数据框的结构 三、获取数据框内容 3.1 一般获取 3.2 特殊字符$ 3.3 再看取得的数据 四、使用rbind()函数增加数据框的行数据 五、使用cbind()函数增加数据框的列数据 5.1 使用$符号…...
基于SpringBoot的招生管理系统的设计与实现
背景 本次设计任务是要设计一个招生管理系统,通过这个系统能够满足管理员和学生的招生公告管理功能。系统的主要功能包括首页、个人中心、学生管理、专业信息管理、专业报名管理、录取通知管理、系统管理等功能。 管理员可以根据系统给定的账号进行登录࿰…...
Oracle Profile详解
Profile的作用主要表现在三个方面 1、密码策略 2、对用户所能使用的资源进行管理 3、profile存放在数据字典里面,默认有一个名字为default的profile set linesize 160 set pagesize 30 select resource_name,resource_type,limit from dba_profiles where profile‘…...
r语言tidyverse教程:5 字符串处理stringr
文章目录 R语言系列: 编程基础💎循环语句💎向量、矩阵和数组💎列表、数据帧排序函数💎apply系列函数tidyverse:readr💎tibble💎tidyr💎dplyr💎stringr stri…...
知识变现海哥:知识变现的本质就是卖
知识变现的本质就是卖,而有人买的本质,就是你解决了某方面的需求。 好的成交,从来都是相互的, 只靠一边主动推销来维系是远远不够的。 绝对不是靠忽悠,而是靠实力。 先讲一个故事。 19世纪时,一个年轻的…...
jdbc和druid和mybatis之间的关系
第一种方式 jdbc整合了:加载数据库驱动,创建连接,写原生语句,执行,关闭这些东西. 第二种方式 mybatis对jdbc进行封装,他允许你通过配置的形式,配置数据库参数,并且允许你通过xml来写动态sql语句.if:test让你可以把sql变得灵活起来.并且还能将你的查询结果直接映射到你想要的…...
云原生Istio案例实战
目录 1 Istio监控功能1.1 prometheus和grafana1.2 访问prometheus1.3 访问grafana 2 项目案例:bookinfo2.1 理解什么是bookinfo2.2 sidecar自动注入到微服务2.3 启动bookinfo2.4 通过ingress方式访问2.5 通过istio的ingressgateway访问2.5.1 确定 Ingress 的 IP 和端…...
解读赛力斯年报:华为智选车的B面
作者 | Amy 编辑 | 德新 赛力斯,华为智选车的B面。 2021年,赛力斯SF5进入华为渠道销售,华为自此开启了智选车模式。到年末,双方更是推出AITO品牌。AITO凭借M5/M7等车型在2022年拿下了超过7.5万台的销量,成为增长最快的…...
互联网内卷严重?你咋不看看其他行业呢?无非是三十晚上无月亮,大家都一样
一千个人眼中有一千个哈姆雷特,互联网行业就像一座围城,城外的人想进来,城内的人要么卷要么躺要么润 真实的感受你可以现在约几个面试体验一下。内卷到什么程度? 产品和运营岗,业务经验不完全对口简历都过不了&am…...
CompletableFuture异步任务编排使用
CompletableFuture异步任务编排使用 runAsync 和 supplyAsyncallOf 和 anyOfjoin 和 getwhenComplete 和 whenCompleteAsync 和 exceptionallyhandle 和 handleAsync 串行编排runAsync().thenRunAsync()supplyAsync().thenAcceptAsync((res) ->{})supplyAsync().thenApplyAs…...
Scala的高级用法
文章目录 1. 默认参数值1.1 方法默认参数1.2 类默认参数 2. 特质 (Traits)2.1 子类型2.2 扩展特征,当做接口来使用 3.元组3.1 定义与取值3.2 元组用于模式匹配3.3 用于for循环 4 高阶函数4.1 常见的高阶函数map4.2 简化涨薪策略代码 5.嵌套方法6.多参数列表…...
【31.在排序数组中查找元素的第一个和最后一个位置】
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1:…...
如何构建“Buy Me a Coffee”DeFi dApp
🥸 本教程来自官网:https://docs.alchemy.com/docs。对原文部分内容进行了修改。教程中所有实例经过本人实践,代码可见:https://github.com/ChuXiaoYi/web3Study 区块链技术令人惊叹,因为它使我们能够使用代码和软件编…...
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
目录 二值状态统计判断用户登陆态SETBIT 命令GETBIT 命令第一步,执行以下指令,表示用户已登录。第二步,检查该用户是否登陆,返回值 1 表示已登录。第三步,登出,将 offset 对应的 value 设置成 0。 用户每个…...
3 天,入门 TAURI 并开发一个跨平台 ChatGPT 客户端
TAURI 是什么 TAURI 是一个使用 Rust 编写的程序框架,它允许我们使用 Web 技术和 Rust 语言构建跨端应用。它提供了大量特性,例如系统通知、网络请求、全局快捷键、本地文件处理等,它们都可以在前端通过 JavaScript 便捷的调用。 TAURI 应用…...
14个最佳创业企业WordPress主题
要创建免费网站?从易服客建站平台免费开始 500M免费空间,可升级为20GB电子商务网站 创建免费网站 您网站的设计使您能够展示产品的独特卖点。通过正确的主题,您将能够解释为什么客户应该选择您的品牌而不是其他品牌。 在本文中࿰…...
MySQL基础(三十)PowerDesigner的使用
1 PowerDesigner的使用 PowerDesigner是一款开发人员常用的数据库建模工具,用户利用该软件可以方便地制作 数据流程图 、概念数据模型 、 物理数据模型,它几乎包括了数据库模型设计的全过程,是Sybase公司为企业建模和设计提供的一套完整的集…...
nginx 服务器总结
一. 负载均衡的作用有哪些? 1、转发功能 按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高 系统并发量。 2、故障移除 通过心跳检测的方式,判断应用服务器当前是否可以正常…...
基于Hebb学习的深度学习方法总结
基于Hebb学习的深度学习方法总结 0 引言1 前置知识1.1 Hebb学习规则1.2 Delta学习规则 2 SoftHebb学习算法2.1 WTA(Winner Take All)2.2 SoftHebb2.3 多层Hebb网络2.4 Hebb学习的性能测评 3 参考文献 0 引言 总所周知,反向传播算法(back-propagating, B…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
