JAVA代审-JreCms(SpringBoot版)

admin 2024年11月21日13:15:48评论27 views字数 3776阅读12分35秒阅读模式
 

前言

文章为交流群师傅木雨投稿,参考文章

  • https://segmentfault.com/a/1190000045379572
  • https://xz.aliyun.com/t/13259
文章目录
0、感谢1、项目介绍    软件框架    项目地址    用户名和密码2、环境搭建    所需环境    数据库导入并设置3、漏洞挖掘    后台SQL注入-/admin/content/data    后台SQL注入-/admin/div_data/save    后台存储XSS-/admin/admin/add    前台存储XSS-/guestbook    后台任意文件上传-网站信息    前台任意文件下载    后台任意文件读取    后台任意文件删除    SSTI注入-freemarker    文件上传+SSTI注入RCE4、最后

0、感谢感谢菜狗师傅的文章和无私奉献的教学视频,让我收获颇多。

1、项目介绍

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

软件架构

  1. MVC:SpringBoot Spring MVC
  2. 页面:Freemarker
  3. 缓存:Ehcache
  4. 数据库:Mysql

项目地址

有两个版本

  • SpringBootCMS:https://gitee.com/heyewei/SpringBootCMS
  • JFinalCMShttps://gitee.com/heyewei/JFinalcms

用户名和密码

密码我忘记了,可以在数据库里边查找,密码是通过md5加密的可以使用这个网站来进行解密:https:// www.somd5.com/

2、环境搭建

所需环境

jdk版本:1.8-17

数据库导入并设置

  1. 创建数据一个数据库名:springbootcms
  2. 并修改ip
  3. 修改用户名和密码
  4. 执行sql文件

JAVA代审-JreCms(SpringBoot版)

3、漏洞挖掘

后台SQL注入-/admin/content/data

先查看pom依赖使用的是什么,来执行sql,查看依赖可以发现使用的是 mybatis-pulus

JAVA代审-JreCms(SpringBoot版)

如果使用的是 mybatis-pulus 框架,就需要使用查找数据库相关的关键字,比如

selectupdateinsertDELETElike

先通过全局搜索 select

拼接了sql语句:select * from cms_content where 1=1 "+filterSql+orderBySql

查看代码这里主要需要找到 filterSql 这个变量的参数的传参来自哪里,是否可控

JAVA代审-JreCms(SpringBoot版)

继续分析可以看到,全程只是检查了 title 这个参数去空,然后在进行拼接,这样就会导致sql注入

JAVA代审-JreCms(SpringBoot版)

继续回调,来到 /data 路由

JAVA代审-JreCms(SpringBoot版)

访问路由 /admin/content/data ,这是一个后台的路径,自行登录即可。可以发现这里有一个标题行

JAVA代审-JreCms(SpringBoot版)

在标题随便输入一个内容,然后点击查询,再进行抓包

JAVA代审-JreCms(SpringBoot版)

直接把这个数据包放在sqlmap中即可

python .sqlmap.py -r .1.txt --level 5 ---is-dba

JAVA代审-JreCms(SpringBoot版)

后台SQL注入-/admin/div_data/save

关键字搜索 insert ,可以看到这里有一个插入的sql语句,columnValues 其中的这个参数是可控的,这个参数是由

String value = WebUtils.*getRequest* ().getParameter(divField.getName());

传递过来的

JAVA代审-JreCms(SpringBoot版)

这里有一个前提条件,这个路由必须是管理用户才能进行访问 /admin/div_data/save

JAVA代审-JreCms(SpringBoot版)

输入内容,然后进行抓包

JAVA代审-JreCms(SpringBoot版)

将这个数据包放在sqlmap中

python .sqlmap.py -r .1.txt --level 5 –current-db

后台存储XSS-/admin/admin/add

个人理解XSS审计是需要找到输入点和输出点,一般中输出和输入点都是基于黑盒来进行查找

  1. 黑加白,一般都是简单看一下系统,然后再插入一些语句,看有无渲染,有就有可能存在XSS
  2. 这里直接登录之后,来到 /admin/admin/,根据这个路由来到后端查看源码

JAVA代审-JreCms(SpringBoot版)

来到后端代码,modelMap添加之后进行渲染,当然也可以通过搜索关键字 modelMap ,当然这个代码只是进行展示,没有数据添加的操作,所需需要查看一下该文件中其他路由有没有添加数据的操作JAVA代审-JreCms(SpringBoot版)

查看 getView("admin/index"); 的源码

JAVA代审-JreCms(SpringBoot版)

查看 ADMIN_PATH 的源码

JAVA代审-JreCms(SpringBoot版)

CommonConstant.VIEW_EXTENSION 的源码

JAVA代审-JreCms(SpringBoot版)

最后路径拼接

/admin/view/admin/index.html

查看根据路径查看前端源代码,获取admin表的值并打印到前端

JAVA代审-JreCms(SpringBoot版)

继续回到后端,来到/save ,进行添加

JAVA代审-JreCms(SpringBoot版)

直接添加一个用户信息

JAVA代审-JreCms(SpringBoot版)

返回的结果

JAVA代审-JreCms(SpringBoot版)

前台存储XSS-/guestbook

前台有一个留言板块

JAVA代审-JreCms(SpringBoot版)

查看一下源码, guestbookService.save(guestbook); 就会把输入的内容添加到数据库中,现在就需要找到哪里把数据库的内容显示在界面

JAVA代审-JreCms(SpringBoot版)

添加数据之后,不会直接展示再前台,需要管理员审核才会显示再前台

JAVA代审-JreCms(SpringBoot版)

登录管理员端,就可以审核了,并且就可以看到前台插入的XSS

JAVA代审-JreCms(SpringBoot版)

看一下后端代码 /admin/guestbook ,使用 modelMap 来添加用户数据并进行渲染

JAVA代审-JreCms(SpringBoot版)

getView("guestbook/index"); 这个和上边的一样,通过上边的方法来找到对应的 径,获取 guestbook 中对应的值然后打印到前端

/admin/view/guestbook/index.html

JAVA代审-JreCms(SpringBoot版)

后台任意文件上传-网站信息

先搭建完成系统,查看系统,哪里有上传点,一般上传点都是基于,后台

先登录管理员端,找到了一个可以上传点,就是网站信息站点logo那里进行上传

JAVA代审-JreCms(SpringBoot版)

点上传时进行抓包,这样就可以获取到路由

JAVA代审-JreCms(SpringBoot版)

通过这个 /admin/file/upload 这个路由查找后端代码,查看到后端代码没有一点拦截,直接上传 文件即可

JAVA代审-JreCms(SpringBoot版)

由于这里没有jsp解析,所以就只能进行任意文件上传,返回包中的路径直接拼接即可访问

JAVA代审-JreCms(SpringBoot版)

访问结果如下

JAVA代审-JreCms(SpringBoot版)

前台任意文件下载

这个任意文件下载,可以不用登录危害还是挺大的

直接关键字搜索FileInputStream,可以发现这里有一个文件读取的相关操作

JAVA代审-JreCms(SpringBoot版)

源代码如下,现在就直接 传递路由,并设置fileKey的值就可以实现任意文件下载

JAVA代审-JreCms(SpringBoot版)

现在直接拼接路径并传递上 fileKey 的值,想要查看什么文件进行路径返回即可

JAVA代审-JreCms(SpringBoot版)

后台任意文件读取

继续关键字查找,.read,在这个代码中,传入的templatePath参数,并使用readFileToString,进行读取

JAVA代审-JreCms(SpringBoot版)

传入参数并进行读取,然后将读取的内容添加到模板中,进行渲染显示

JAVA代审-JreCms(SpringBoot版)

先访问一下系统看看在什么功能点,这个路由需要登录后台才行,点击编辑即可来到上边的功能代码

JAVA代审-JreCms(SpringBoot版)

进行放包测试

JAVA代审-JreCms(SpringBoot版)

后台任意文件删除

扩散一下思维,可以看到这个功能点还有一个删除功能,看一下源码看看有没有任意文件删除

JAVA代审-JreCms(SpringBoot版)

路由代码,这个代码逻辑其实和任意文件读取是一样的,只是这里使用的是删除功能

JAVA代审-JreCms(SpringBoot版)

深入delete() 这个方法,也是很任意文件读取一样,参数可控

JAVA代审-JreCms(SpringBoot版)

利用手法和任意文件读取是一样的

JAVA代审-JreCms(SpringBoot版)

这个地方的漏洞点很多,这里还会进行模板渲染,这个漏洞后边会介绍

SSTI注入-freemarker

查看pom依赖,通过pom依赖可以发现使用的是 freemarker 模板来进行渲染

JAVA代审-JreCms(SpringBoot版)

由于这套系统是SpringBoot框架的系统,所以直接搜索配置文件的关键字即可

spring.freemarker.template-loader-path=

通过配置文件可以发现, freemarker 模板会渲染所有内容

JAVA代审-JreCms(SpringBoot版)

现在审计思路就简单了,只要哪里可以写入文件内容,哪里就会存在渲染

目前有两个功能点,一个文件上传,一个模块管理

在模块管理,在 search.html 里边添加内容poc

 poc: <#assign value="freemarker.template.utility.Execute"?new()>${value("calc")}

JAVA代审-JreCms(SpringBoot版)

抓包,内容在 content 中

JAVA代审-JreCms(SpringBoot版)

现在写入进去了,就要找到哪里进行渲染,最后在 search 这个路由里边进行渲染

JAVA代审-JreCms(SpringBoot版)

访问即可实现命令执行

JAVA代审-JreCms(SpringBoot版)

文件上传+SSTI注入RCE

文件上传就是上边分析的后台任意文件上传

这里先上传一个任意文件类型的SSTI文件

文件内容如下 rce.jpg

 <!doctype html> <html lang="zh"> <head> </head> <body> <!-- footer end --> <#assign value="freemarker.template.utility.Execute"?new()>${value("calc")} </body> </html>

‍上传文件,这里我上传的是一个jpg文件

JAVA代审-JreCms(SpringBoot版)

现在就需要找到能渲染的地方,直接关键字搜索 html ,找到一个好地方,直接渲染参数 html 的 值,并且这个html的参数是我们可控的,简直就是完美

JAVA代审-JreCms(SpringBoot版)

直接进行路径拼接

JAVA代审-JreCms(SpringBoot版)

4、最后

文章最后感谢交流群木雨师傅的投稿,文章中有部分内容写的不是非常详细,但是整体还是非常不错的,部分思路也值得学习。

 

 

原文始发于微信公众号(菜狗安全):JAVA代审-JreCms(SpringBoot版)

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

发表评论

匿名网友 填写信息