【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

admin 2025年1月13日20:24:25评论25 views字数 8314阅读27分42秒阅读模式

前言

本系列为【炼石计划@Java代码审计】知识星球实战50套开源系统删减版,也就是每一套分享部分内容给大家学习。如果觉得写得还不错,并且想要从实践中学习JavaWeb代码审计的朋友,欢迎了解加入【炼石计划@Java代码审计】知识星球,与500位志同道合的朋友共同学习成长。

文末获取配套练习环境

进入正题

一、前置知识

A、涉及相关技术简介

A1、Maven简介

Maven 是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),反映在配置中,就是一个 pom.xml 文件。是一组标准集合,一个项目的生命周期、一个依赖管理系统,另外还包括定义在项目生命周期阶段的插件(plugin)以及目标(goal)。

当我们使用 Maven 的使用,通过一个自定义的项目对象模型,pom.xml 来详细描述我们自己的项目。

简单来说,我们开发一个JavaWeb项目是需要加载很多依赖的,使用Maven可以便于管理这些依赖。

  • pom.xml

POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。Maven项目中必须包含pom.xml文件。

需要导入的依赖应该在pom.xml中进行配置与填写。比如导入某些依赖,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

project- project 是 pom.xml 中描述符的根。

modelVersion - modelVersion 指定 pom.xml 符合哪个版本的描述符。maven 2 和 3 只能为 4.0.0。

parent - maven 支持继承功能。子 POM 可以使用 parent 指定父 POM ,然后继承其配置。

dependencies - 在dependencise中进行依赖配置

groupId - 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着 java 的包结构。

artifactId -  单独项目的唯一标识符。比如我们的 tomcat、commons 等。不要在 artifactId 中包含点号(.)。

version -  版本信息。

  • 使用IDEA创建Maven项目

1、打开IDEA,点击Create New Porject,选择Maven,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

2、默认即可(在真实需求中,可以根据自己的项目,选择不同模板),点击Next,然后点击Finish。一个最基本的Maven项目结构如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

配置源加速,自行百度就可以了。

A2、SpringBoot简介

SpringBoot是一款基于JAVA的开源框架。目的是为了简化Spring应用搭建和开发流程。是目前比较流行,大中小型企业常用的框架。正因为极大简化了开发流程,才收到绝大开发人员的喜爱。SpringBoot核心原理是自动装配(自动配置),在这之前,开发一个JavaWeb,Spring等项目要进行很多配置,使用了SpringBoot就不用在过多考虑这些方面。并且在SpringBoot中还内置了Tomcat。

  • SpringBoot之HelloWorld

通过经典HelloWorld程序,来看看Springboot项目搭建多么简便。

1、打开IDEA,选择Create New Project,选择Spring Initializer,右侧勾选Default,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

2、点击Next,Srping Initializr Project Settings配置内容默认就好,我们不做实际项目开发,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

3、点击Next,进入依赖项选择页面,我们选择Web -> Spring Web这一个即可,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

4、点击Next,填写项目名称和存放地址。练习项目,默认就可以,点击Finish,完成创建。

5、Maven自动加载完所需依赖后,整体项目结构如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

@SpringBootApplication注解表示这个类为SpringBoot的主配置类,SpringBoot项目应运行这个类下面的main方法来启动SpringBoot应用。

6、创建HelloController,创建一个controller包,下面创建一个HelloController,在该controller中编写代码,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

7、点击右上方运行,打开浏览器输入http://127.0.0.1:8080/hello,即可看到helloworld,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

@Controller注解:标注该类为controller类,可以处理http请求。@Controller一般要配合模版来使用。现在项目大多是前后端分离,后端处理请求,然后返回JSON格式数据即可,这样也就不需要模板了。

@ResponseBody注解:将该注解写在类的外面,表示这个类所有方法的返回的数据直接给浏览器。@RestController 相当于 @ResponseBody 加上 @Controller

@RequestMapping注解:配置URL映射,可以作用于某个Controller类上,也可以作用于某Controller类下的具体方法中,说白了就是URL中请求路径会直接映射到具体方法中执行代码逻辑。

@PathVariable注解:接受请求URL路径中占位符的值,示例代码如下图所示:

@Controller
@ResponseBody
@RequestMapping("/hello")
public class HelloController {
  @RequestMapping("/whoami/{name}/{sex}")
  public String hello(@PathVariable("name") String name, @PathVariable("sex") String sex){
      return "Hello" + name + sex;
  }
}

@RequestParam注解:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解),常用于POST请求处理表单。

A3、SpringSecurity简介

Spring 是一个非常流行和成功的java应用开发框架。Spring Security 基于Spring 框架,提供了一套web应用安全性的完整解决方案。

一般来说,Web 应用的安全性包括两部分:

  1. 用户认证(Authentication)

  用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

  1. 用户授权(Authorization)

  用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。

一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

对于上面提到的两种应用情景,Spring Security 框架都有很好的支持。

在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。

在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

A4、Mybatis简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

MyBatis可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

官网:

https://mybatis.org/mybatis-3/zh/index.html

配置文件常存放在src/main/resources/mapper中,配置文件命名为xxxxMapper.xml

Mybatis拼接sql有下面两种方式:

#{}告诉 MyBatis 创建一个预编译语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中。

${} 仅仅是纯粹的 string 替换,在动态 SQL 解析阶段将会进行变量替换,类似于直接替换字符串,会导致SQL注入产生。like+#{ }

A5、Swagger简介

Swagger 是一款RESTful接口的文档在线自动生成加功能测试的软件。目的是为了减少与其他团队的沟通成本,因此会使用Swagger构建RESTful API文档来描述所有的接口信息。

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

官方网站:

https://swagger.io/

常见Swagger敏感信息泄露的路径:

/swagger/
/api/swagger/
/swagger/ui/
/api/swagger/ui/
/swagger-ui.html/
/api/swagger-ui.html/
/user/swagger-ui.html/
/swagger/ui/
/api/swagger/ui/
/libs/swaggerui/
/api/swaggerui/
/swagger-resources/configuration/ui/
/swagger-resources/configuration/security/
......

Swagger组件特征固定title:Swagger UI

A6、Thymeleaf简介

官方学习文档:

https://www.thymeleaf.org/
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html

Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发。模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的html文档。从字面上理解模板引擎,最重要的就是模板二字,这个意思就是做好一个模板后套入对应位置的数据,最终以html的格式展示出来,这就是模板引擎的作用。

例子:

<table>
<thead>
  <tr>
    <th th:text="#{msgs.headers.name}">Name</th>
    <th th:text="#{msgs.headers.price}">Price</th>
  </tr>
</thead>
<tbody>
  <tr th:each="prod : ${allProducts}">
    <td th:text="${prod.name}">Oranges</td>
    <td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td>
  </tr>
</tbody>
</table>

拓展学习,大致了解每个标签作用:

https://www.w3xue.com/exp/article/20199/54847.html

A7、SpringBoot Actuator简介

Actuator主要用于公开有关正在运行的应用程序的运行信息 - 运行状况,指标,信息,转储,env等等。它使用HTTP端点或JMX bean来使我们能够与它进行交互。

一些常见的执行端点:

/beans:此端点返回应用程序中配置的所有bean的列表。
/env:提供有关Spring Environment属性的信息。
/health:显示应用程序运行状况
/info:显示应用程序信息,我们可以在Spring环境属性中配置它。
/mappings:显示所有 @RequestMapping 路径的列表 。
/shutdown:允许我们正常关闭应用程序。
/threaddump:提供应用程序的线程转储。

完整可执行的端点,详见官网:
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints

A8、Druid简介

Druid是阿里研发的一款数据库连接池,其开发语言为java,druid集合了c3p0、dbcp、proxool等连接池的优点,还加入了日志监控、session监控等数据监控功能,使用Druid能有效的监控DB池连接和SQL的执行情况。

项目地址:

https://github.com/alibaba/druid

B、相关漏洞

上述常见的组件存在已知的漏洞,具体对应如下(不完全统计):

漏洞名称
Spring Security验证绕过漏洞
Spring Security认证绕过
Spring Boot框架SPEL表达式注入漏洞
Spring Security未经授权的访问
Spring Boot Actuator命令执行漏洞
Spring Boot Actuator hikari配置不当导致的远程命令执行漏洞
Spring Boot Actuator jolokia 配置不当导致的XXE漏洞
Spring Boot Thymeleaf 模板注入
Spring Boot Tomcat导致的JNDI注入
Spring Boot eureka xstream deserialization rce
Spring Boot h2 database query rce
Spring Boot mysql jdbc deserialization rce
Spring Boot sql
Spring Boot whitelabel error page SpEL rce
Spring Boot 修改环境属性导致的rce
Spring Boot 提取内存密码
Spring Boot 获取被星号脱敏的密码的明文 (方法一)
Spring Boot 路由地址及接口调用详情泄漏
Spring Boot 配置不当而暴露的路由
Druid未授权访问

二、项目安装

A、所需环境

本项目安装基于windows 10操作系统搭建而成。

1、Java环境部署

Java版本如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

JDK下载链接:

https://www.oracle.com/java/technologies/downloads/#java8-windows

安装步骤操作简单,只需下一步即可,不过多赘述。

2、Maven环境部署

关于Maven环境部署与安装,可参考下面的文章,安装最新版即可。

https://www.runoob.com/maven/maven-setup.html

在IDEA中内置了Maven,对于我们来说足够用了。

Maven加速配置

配置国内源下载一些依赖组件会非常快,但会有极个别情况,有些组件使用国内源无法下载,则需要再更改配置,大家留有印象就好。

①、访问c:Users当前用户.m2目录,当前用户文件夹需要根据当前用户来定,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

②、打开settings.xml文件,复制粘贴以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups></pluginGroups>
<proxies></proxies>
  <localRepository>C:Users当前用户.m2repository</localRepository>
<servers>
</servers>

<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>

<profiles>
</profiles>

<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>

注意代码中的当前用户该位置路径应与你当前用户一致。

3、Mysql环境部署

个人偏好于使用phpstudy,它集成了很多常用组件,如apache,mysql等。作为练习,方便至极,一键启动即可使用。

官方下载链接:

https://www.xp.cn/

下载完成后,双击进入软件。进入首页处,选择mysql套件,点击启动即可,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

点击左侧数据库,可以对数据库进行密码修改操作。

4、IDEA

官方下载地址,可选择使用Ultimate版本。

https://www.jetbrains.com/zh-cn/idea/download/#section=windows

B、环境搭建

安装整体过程首先将数据导入mysql数据库中,然后将项目导入IDEA中,修改配置文件中数据库信息,点击启动即完成环境搭建。

①、在phpstudy中启动Mysql

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

②、启动cmd命令行,进入mysql数据库,命令:mysql -u root -p,然后键入你的密码。

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

③、使用命令创建数据库:create database rbac;。使用命令选择rbac数据库:use rbac;

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

④、导入rbac.sql文件,该文件位于RefiningStone-RBAC 项目文件夹内。在导入时务必注意路径中的正斜杠。使用命令source导入数据,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

最后全部为Query OK...,无报错,即为全部导入成功。

⑤、打开IDEA,点击Open or import,选择项目文件夹下的pom.xml文件,最后选择打开方式为Open as project,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

也可以右键选择文件夹,点击Open folder as Intellij IDEA project......

第一次导入项目,Maven会自动下载所需依赖,会花费一些时间。

⑥、几个现象表明项目部署成功。pom.xml文件无报错,项目代码已编译为classEdit Configurations...处显示可以运行。

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

⑦、进入src - main - resources - application.yml,对配置文件进行相关修改,主要修改Mysql数据库连接账号密码,具体可以去phpstudy下数据库处查看。

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

⑧、万事具备,点击右上侧启动即可。下侧console控制台中信息无任何报错,即为启动成功,另外需要注意的是启动端口是多少,启动端口可以在application.yml文件中更改port的值。

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

⑨、打开浏览器,键入http://127.0.0.1:8088/login.html,访问项目。

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

至此,环境已搭建完毕,可以开始后面的练习了。

下期我们对该系统进行代码审计以及漏洞验证。

环境领取

欢迎点击下方链接获取配套练习环境。

前八套练习环境

【备注,后台回复关键字前八套环境

即可获取不限速下载链接】

炼石计划@Java代码审计

欢迎点击下方链接了解加入【炼石计划@Java代码审计】知识星球,在这里我们专注Java代码审计技术的提升。现阶段正在进行的为50套JavaWeb系统代码审计实战。赶紧和500位志同道合的朋友卷起来吧!

JavaWeb代码审计实战开源系统学习心得,赶紧进来看

[加入后请务必查看指定文章使用手册]

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

炼石计划@PHP代码审计

欢迎点击下方链接了解加入【炼石计划@PHP代码审计】知识星球,在这里我们专注PHP代码审计技术的提升。七大阶段学习,让你最终掌握PHP代码审计。抱团学习取暖,避免走弯路,实现弯道超车。

PHP代码审计学习路线

【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

原文始发于微信公众号(闪石星曜CyberSecurity):【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

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

发表评论

匿名网友 填写信息