小工具      在线工具  汉语词典  css  js  c++  java

记一次springboot项目漏洞发现

spring boot,后端 额外说明

收录于:40天前

前言

前段时间,这个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是否存在;判断对应的值是否为空;创建一个主题对象;判断设置路径是否以“default”开头。最后验证主题包的各项配置是否正确。如果确认,则上传成功。

但在不检测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.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进行文件包含,读取里面内容。接着在模板管理找到索引_about.html

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

然后访问主页上的关于我们:

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

该页面按预期输出 /etc/passwd 文件中的信息。

总结

本文的测试是在老版本的cms上进行的。新版本修复了现有问题。这次用java实现的cms漏洞挖掘非常有成果。 cms安装、部署和代码审核过程中的注意事项 好好锻炼了。

. . .

相关推荐

额外说明

项目中如何使用缓存?缓存如果使用不当会产生什么后果?雷迪斯

    1、面试题 在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果? 2、面试官心里分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚,那确实比较尴尬 只要问到缓存,上来第一个问题,肯定能是先问问你项目哪里用了缓存?为啥要用?不用行不行

额外说明

springcloud的seesion无状态设置

  security:   sessions: stateless      所有的Rest服务一定要设置为无状态,以提升操作性能

额外说明

PyQt5数据库开发2 5.2 QSqlRelationalTableModel

目录 一、Qt窗体设计 1. 新建Qt项目 2. 添加组件 3. 添加资源  4. 添加Action  5.

额外说明

突破边界:文本检测算法的革新与应用前景

突破边界:文本检测算法的革新与应用前景 1.文本检测理论篇(文本检测方法介绍) 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。 文本在图像中的表现形式可以视为一种‘目标‘,通用的目标检测的

额外说明

⾯向对象有哪些特性

封装:封装把⼀个对象的属性私有化,同时提供⼀些可以被外界访问的属性的⽅法。 继承:继承是使⽤已存在的类的定义作为基础创建新的类,新类的定义可以增加新的属性或新的⽅法,也可以继承⽗类的属性和⽅法。通过继承可以很⽅便地进⾏代码复⽤。 关于继承有以下三个要点:

额外说明

[译] Oracle Database 21c 中的空间管理增强功能

原文地址:https://oracle-base.com/articles/21c/space-management-enhancements-21c 原文作者:Tim Hall 本文介绍 Oracle 数据库 21c 中的空间管理增强功能。 目录 Se

额外说明

【Github】Github创建远程库

GitHub网址:https://github.com/ GitHub是全球最大的同性交友网站,技术宅男的天堂,新世界的大门 GitHub由于站点在国外,所以有时访问很慢,这里我们可以借助加速器:UU加速器加速学术资源是免费的。 Github创建远程库

额外说明

EasyX添加图片+鼠标操作

添加图片  定义图片变量名  IMAGE 图片变量名;     载入图片函数 loadimage(&图片变量名, "1.jpg", int width, int height); (说明: width是图片拉伸后的宽度,height是图片拉伸后

额外说明

html2canvas中onrendered方法无法执行的解决办法

html2canvas中onrendered方法无法执行的解决办法 "html2canvas": "^1.0.0-alpha.12";//有毛病的版本,不建议使用 "html2canvas": "^0.5.0-beta4",//正常版本 html2

额外说明

深度的卷积神经网络CNN(MNIST数据集示例)

        前面篇幅介绍的全连接层和简单卷积神经网络,层数都比较少,现在来加多几层,对于加深了的深度神经网络,其实就是我们常说的深度学习,类似搭积木,只需要叠加层即可。现在来构建一个深度的CNN,这里使用的卷积层全是3x3的小型滤波器,特点是随着层的

ads via 小工具