记一次springboot项目漏洞挖掘

news2024/11/20 23:19:16

前言

前段时间的比赛将该cms作为了题目考察,这个cms的洞也被大佬们吃的差不多了,自己也就借此机会来浅浅测试下这个cms残余漏洞,并记录下这一整个流程,谨以此记给小白师傅们分享下思路,有错误的地方还望大佬们请以指正。

安装

参考官方文档,给出了很详细的安装说明,如安装遇到问题,可到官方论坛寻找解决方法,常见安装失败问题都有。

https://gitee.com/iteachyou/dreamer_cms#https://gitee.com/link?target=https%3A%2F%2Fwww.iteachyou.cc%2Farticle%2F55ec2939c29147eca5bebabf19621655

image-20230506234239542

该cms项目是基于springboot框架开发的,安装的时候需要的环境为 springboot+redis+mysql+ IDEA

配置文件主要是这两个application-prd.yml和application-dev.yml,需要配置好mysql数据库连接、redis连接以及网页静态资源路径,其余的安装上面的一步步安装即可。

image-20230506235812299

安装成功后访问登陆页面

image-20230507105459127

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

image-20230507001517779

漏洞测试

风格管理模板存在任意编辑文件实现命令执行

经测试,发现后台风格管理模板上传主题压缩包时可以进行污染压缩包theme.json文件,达到目录穿越到服务器敏感目录,从而在模板管理在解析时没有进行检测可以任意编辑系统敏感文件导致GetShell,控制服务器权限。

漏洞产生的主要文件:主题上传Controller文件:src/main/java/cc/iteachyou/cms/controller/admin/ThemesController.java, 找到add方法。

img

首先是判断文件是否存在以及JSON解析是否正确;判断Key是否都存在;判断对应值是否为空;创建theme对象;判断设置路径是否已"default"开头。最后校验主题包各种配置是否正确。确认的话就成功上传。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

但是没有对themePath路径问题进行检测,便可构造目录穿越,这也是该漏洞造成的关键原因。

最后是判断上传的压缩包里的各类信息无误后进入处理保存文件逻辑的save方法。

image-20230507003001316

在上传的主题包里的\dreamer\dreamer-cms\templates\default_v3\theme.json文件,将目录穿越的构造替换主题包路径,更改之后theme.json文件内容如下:

{
	"themeName":"新版主题",
	"themeImage":"http://localhost:8888/resource/img/dreamercms-logo.png",
	"themeAuthor":"",
	"themePath":"../../../../../../../../../../../../../../"//此路径要和模板文件夹的名称一致
}

虽然有检测,但是在之前themeDir已经被污染了,所以相当于检测相当于没有。
接着检查是否有权限,startwith方法也没有问题。

img``

最后就是保存文件。到此时后台模板已被刚刚传入的构造污染,可以进行利用,效果如下:

将修改后的主题包上传

image-20230507114351235

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

image-20230507114501540

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

image-20230507130444874

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

image-20230507142840402

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

image-20230507143018335

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

image-20230507143235384

如果修改authorized_key文件便可进行免密登录,利用压缩校验不正确从而上传任意危险文件,例如一句话木马等来获取系统权限;还可以获取系统passwd文件获取敏感信息,也可以写计划任务进行命令执行。

该漏洞分析到此为止,接着是附件管理模板可以进行任意文件下载、删除。

附件管理模板可以进行任意文件下载、删除。

漏洞产生主要文件:

src/main/java/cc/iteachyou/cms/controller/admin/AttachmentController.java
添加附件功能的代码如下:

img

首先肯定是先添加附件,这里没有对attachment参数进行过滤。导致保存附件的时候目录穿越的构造就被保留了下来,对其进行解析后就可以将服务器的指定文件随意下载、删除,从而对服务器构成威胁。

下载、删除功能的代码都在同一个文件,都是通过刚刚的attachment参数,然后使用attachment.getFilepath()获取服务器文件路径,对其进行解析。

先看下载功能的代码:

img

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

删除功能的代码:

img

删除的话就没什么好说的,和上面一样的原理,试想下,如果可以任意删除服务器的配置文件,那不就相当于服务器要崩的节奏。

漏洞演示如下:

还是利用刚刚/home/www目录下的1.txt文件

image-20230507155131691

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

image-20230507145916803

burpsuite抓包如下

image-20230507145925542

需要改的就是这个filepath参数对应的文件路径,将其修改为

../../../../../../../../../../../../../home/www/1.txt

然后放包。

image-20230507150052833

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

img

image-20230507155205283

服务器里的/home/www/1.txt里的内容193840sswwloP 已成功写入本地theme.txt文件,任意下载文件成功。

删除效果,点击右边的删除。

image-20230507155303188

发现该1.txt文件被删除了,任意删除文件成功。

模板管理存在任意文件包含

产生漏洞的主要文件:
src/main/java/cc/iteachyou/cms/taglib/tags/IncludeTag.java

img

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

../../../../../../../../../../../../../home/www/1.txt写入div标签并保存,如下图

img

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

img

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

img

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

img

总结

本文测试是在该cms旧版本上进行的,新版本对已有问题已进行了修复,这次对该java实现的cms漏洞挖掘收获满满,对cms安装、部署以及代码审计中要注意的点得到了良好的锻炼。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云办公时代,企业如何保护数据资产安全?

云办公是一种基于云计算技术的办公方式,它将传统的办公软件和数据存储方式转移到了云端服务器上。用户可以通过互联网访问各种办公应用程序和数据,实现远程协作、移动化办公和信息共享等功能。 常见的云办公应用包括文档处理、电子邮件、日历、在线会议、…

ABAP 锁对象

需求场景 最近收到用户反馈,发现同一个托运单生成了两个不同的服务订单以及根据同一个送货单生成了两个托运单,经过排查,发现原因都是由同样的问题导致的,多窗口或者多用户同时对一条数据操作,就会出现这种现象。这个…

Learning C++ No.19【搜索二叉树实战】

引言: 北京时间:2023/5/2/9:18,五一放假第四天,昨天本来想要发奋图强将该篇博客写完,但是摆烂了一天,导致已经好几天没有码字,敲代码了,此时难受的感觉涌上心头,但是摆烂…

DNF类游戏动作实现(C语言)

没有接触制作小游戏前,感觉做游戏很不可思议,游戏里的人物是怎么移动的,怎么攻击,释放技能。。。。。。现在逐渐了解到之后,发现2d游戏人物的动作更多是图片的拼接,动作是否精细,由这个动作的帧…

鲲鹏展翅 信安高飞 | 鲲鹏开发者峰会2023-麒麟信安技术论坛成功举办!

2023年5月6日-7日,以“创未来 享非凡”为主题的鲲鹏开发者峰会2023在东莞松山湖举办。鲲鹏产业生态繁荣,稳步发展,正在成为行业核心场景及科研领域首选,加速推动数字化转型。 作为鲲鹏生态重要合作伙伴,麒麟信安受邀举…

企企通:B2B商城四种“玩法”,一站式解决端到端全链路需求!

商城系统在电商零售领域中,一直是助力商家搭建商城的核心工具,随着电商行业的发展,各种新模式随即出现,与此同时也出现了各种各样的商城系统,而B2B商城是这其中最为常见的商城系统。 近年来,由于电子商务的…

相遇于此,相交链表的解题心得

本篇博客会讲解力扣“160. 相交链表”的解题思路,这是题目链接。 老规矩,先来审题。这道题的题干有点长,简而言之,就是判断2个链表是否相交,如果相交就返回第一个相交结点,不相交就返回NULL。看看题目原文…

【C++中可调用对象和function】

C中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、仿函数。其中,lambda表达式和bind对象是C11标准中提出的(bind机制并不是新标准中首次提出,而是对旧版本中bind1st和bind2st的合并)。个人认为五种可调用对象中,…

FM33A048B LPUART

概述 LPUART 是一个低功耗UART 接口,其工作仅需32768Hz 时钟,可以支持到最高9600 波特率的数据接收。LPUART 功耗极低,可以在Sleep/DeepSleep 模式下工作。 特点: ⚫ 异步数据收发 ⚫ 标准UART帧格式 ◼ 1bit起始位 ◼ 7或8bit数据…

【ChatGPT Prompt Engineering】面向Java开发者的ChatGPT提示词工程(1)

各位Java开发者们,欢迎来到万猫学社!在这里,我将和大家分享ChatGPT提示词工程的系列文章,希望能够和大家一起学习和探讨提示词的最佳实践。 虽然互联网上已经有很多有关提示词的材料,比如那些“每个人都必须知道的30个…

lua是什么?lua的基本语法知识点

目录 一、lua是什么? 二、lua的基本语法 1.运行lua脚本文件 2.注释 3.标示符 4.关键词 5.全局变量 三、数据类型 8个基本类型 1.nil(空) 2.boolean(布尔) 3.number(数字) 4.string(字符串) 5…

一图看懂 six 模块:最常见的 POSIX 系统调用, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 six 模块:最常见的 POSIX 系统调用, 资料整理笔记(大全) 摘要模块图类关系图模块全展开【six】统计常量intboolstrtuplelist 模块24 fun…

电脑屏幕开机后一直闪不停怎么办?电脑屏幕闪烁的解决方法

不少电脑用户经常会遇到的一种情况,就是开机后,发现电脑屏幕一直闪不停,十分伤眼。驱动人生就为大家带来电脑屏幕闪烁的解决方法。 首先,驱动人生建议可以排查一下出现电脑屏幕闪烁的原因,从而更加针对性的解决故障。…

SpringBoot 整合第三方技术Junit+MyBatis+Druid

测试类中加两个注解就行 SpringBootTest(classes Application.class)//添加SpringBoot 的启动类,万无一失 RunWith(SpringJUnit4ClassRunner.class) public class SpringBootJunitTest {Testpublic void test(){System.out.println("ddddddddddddddddddd&quo…

四象限法则定量分析法,如何客观划分需求优先级?

四象限法按照重要和紧急程度,划分为4个象限:重要且紧急、重要不紧急、不重要但紧急、不重要不紧急。那么我们如何客观地对需求进行评估,并将其放到对应的象限? 我们可以使用定量分析方法对象限进行划分和定值。在横纵坐标中&#…

php+mysql求职招聘人才网站

1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户[10]。 2.系统用户管理:不…

温湿度换算绝对含水量

常压下 公式如下 y z * ( 8.0141786694E-09*x^5 2.3071566385E-06*x^4 1.3157923494E-04*x^3 1.1376256438E-02*x^2 3.1867343275E-01*x 4.9021104226E00 ) 式子中 z 相对湿度 单位百分比 x 摄氏度 单位度 取值范围 5-100度 y 绝对湿度 单位 克每立方…

OSPF原理—详细!!

OSPF(open shortest path first):开放式最短路径优先 定义:是基于链路状态算法的路由协议 为什么要用OSPF? 网络发生变化,静态路由需要手动配置,太麻烦无法响应网络变化,需要手动更…

鸟哥的Linux私房菜——基础学习篇(第三版) (11-17章)

基础学习篇 第十一章 :认识和学习bash第十二章 :正则表达式与文件格式化处理第十三章 :学习shell script第十四章 :Linux账号管理与ACL权限设定第十五章 :磁盘配额(Quota)与进阶文件系统管理第十六章 :例行…

C++List类详解

目录 1.List介绍 2.List的常见使用 2.1 list的构造函数 2.2 list iterator的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 2.6 list的迭代器失效 3.List的模拟实现 3.1 list模拟实现(可跳过) 3.2 反向迭代器实现 3.2.1 list反…