AI+若依
https://www.bilibili.com/video/BV1pf421B71v/?spm_id_from=333.337.search-card.all.click&vd_source=b1acc63fa6d7d73e53111f9e1153f990
若依扫盲
-
通义灵码(AI)
-
CRM客户关系管理系统(后台管理系统)
选型与搭建:技术选型,环境搭建,框架整合(AI凉凉)
设计:基于原型设计库表,接口等(AI辅助)
编码:映射设计为实际功能(AI辅助)
部署:测试与生产(AI辅助) -
若依:选型与搭建一把梭
RuoYi,javaEE,快速搭建与开发各种管理系统工具,非完整体系,需二次开发业务与逻辑
gitee:若依/RuoYi-Vue
专为后台管理系统设计的快速开发平台 -
前置
MySQL,Redis,后端(SpringBoot,MyBatis),前端(Vue3,Axios,Element-Plus),工具(IDEA,VSCode,Git)
若依搭建
混乱的框架版本:
RuoYi (SpringBoot+Bootstrap) 多模块版本(前后端同一项目,淘汰)
RuoYi-Vue (SpringBoot+Vue) 前后端分离(中大型项目不行:性能瓶颈,扩展性等,就要选择微服务版本)
RuoYi-cloud(Springcloud+Vue) 微服务
RuoYi-App(Uniapp+Vue) 移动端(未提供后端代码,可适配RuoYi-Vue和RuoYi-cloud)
RuoYi-other(Vue3+ElementPlus+Vite) 其他(第三方开发生态)
-
RuoYi-Vue版本,前后端分离,单体架构
环境:JDK 11、MySQL 8、Redis 5、Maven 3.6、Node16(Vue3)
技术选型: Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus
官方地址: https://gitee.com/y_project/RuoYi-Vue
扩展地址: https://gitee.com/ys-gitee/RuoYi-Vue3 -
搭建后端项目
IntelliJ IDEA:git克隆一把梭(源码与java包依赖下载,项目文件目录高亮与加粗就OK了)
git克隆一把梭出问题时:Maven -- clean清理 -- package打包(重新第三方依赖下载)-- 刷新
MySQL导入与配置:项目目录sql(若依提供的通用sql脚本,需导入数据库里)
打开数据库的客户端工具:
右键 -- 新建 -- schema(数据库):ry-vue
右键 -- 执行 sql 脚本
启动项目需要连接数据库(连接数据库的配置文件):mybatis -- application-druid.yml
启动redis服务
配置文件对齐redis密码
运行后端项目(找到项目的启动类):ruoyi-admin子模块中,运行RuoYiApplication
debug启动类方法
- 搭建前端项目
git克隆并VScode初始化项目
安装依赖:npm install(未配置全局第三方国内镜像源,速度非常慢)
第三方国内镜像源:npm install --registr=https://registry.npmirror.com
运行前端项目:npm run dev
运行成功后浏览器自动打开后台管理系统的登录页面(前端:后开登录页面)
入门案例
-
前端
vue中:api放的前端请求的js文件(贵司的api安全),views放的视图组件 -
后端
-
准备SQL并导入数据库
-
配置代码生成信息
代码生成模块:数据库脚本中的字段,对应攻防中的参数fuzz字典思维
- 下载代码并导入项目
main:包含java的三层代码(Controller表现层(请求与响应),Service业务层(请求之后进行业务逻辑处理),Mapper DAO持久层(业务逻辑处理之后要不要增删改查等))以及domain(比如数据库在项目中的实体类)
理解一把梭:视图,请求,数据交换(已SQL注入为例的理解,寻找表现层中的登录框,在username注入payload,请求传入到业务层代码,最终汇聚到持久层的数据库拼接语句,传入数据库中执行SQL,导致SQL注入漏洞)
功能 - 权限控制
若依内置权控系统,为企业级提供通用的解决方案
超级管理员(看所有),市场专员(看自己的呗),销售专员(看自己的呗)
SDLC,等保,渗透,代审前期调研一把梭:不同权限账号各一个,方便进行横纵向基线对比。
权限控制前置思维:RBAC,基于角色访控(用户,角色,权限)
比如N个员工中的M个账号(用户) --> 市场专员(角色) -->访问市场功能菜单(权限):知道越权的poc怎么越了吧
图上的设计都是数据:用户表,角色表,功能菜单表
数据之间都是存在多对多的权限关联的:中间表维护权限关系(用户表--角色表);中间表维护权限关系(角色表--功能菜单表)【越权的初始点参数和值,懂了吧】
RBAC:红色的五张表(其他绿色表,细颗粒访控)
功能 - 数据字典
若依内置数据字典:用于维护系统常见的静态数据(性别、状态等的增删改查)
数据字典存入数据库中,复用性:多功能菜单引用同一个静态数据(多个功能点下的,状态使用同一个静态数据(启用,停用))
功能 - 监控相关
在线用户 - 登录信息查redis缓存(登录token,配置信息等敏感数据)(贵司的webshell流量特征session固定值)
缓存监控:客户端连接数(连接数Dos),使用内存,CPU(利用率Dos),网络出入口kps(带宽Dos),贵司所谓的验证码(Dos:内存,网络出入口)
数据监控:若依集成了德鲁伊(druid)的web监控工具
功能 - 定时任务
硬编码定时任务 VS 动态管理任务
这里至少你能看见登录后的方法参数控制:
功能 - 系统接口
使用的Swagger工具生成API在线文档,提供web界面进行接口调用和测试
Swagger配置文件
项目结构
- 后端结构
RuoYiApplication:Springboot+内置tomcat直接运行
RuoYiServletlnitializer:将Springboot打成war包,用外置的Servlet容器来执行
通用工具
框架核心
系统模块
service业务层,mapper持久层,domain实体类
- 配置文件
文件上传时的保存路径:本地或存储桶OSS
服务器性能相关
jwt认证设置
mybatis的映射配置文件和全局配置文件
xss过滤器配置
- 模块依赖关系
ruoyi-admin模块跑起来,后面的模块就都跑起来了
pom.xml文件看看依赖关系
- 前端结构
package.json:第三方依赖的版本信息
- 表结构
源码阅读 - 前端
- 前置知识:SpringBoot3+Vue3全栈
api接口,vue前端组件
简而言之,api接口的js文件里引入了请求类,里面封装了请求响应拦截器工具类等
源码阅读 - 后端
- 不严谨但很实用,简单一把梭:控制着请求(get或post等url API),进行处理服务(后端代码),接着存取可选(数据库),最后可选的返回响应
Controller控制层-->service 业务服务层-->Mapper 数据持久层:接收前段请求,调用service处理业务逻辑(看看是否需要进行数据存取)并返回结果。
注解,接收前端请求
@get/post/put/deleteMapping
查询功能:123456页面(get,代码逻辑,数据库里的表)
导出功能:比如导出xlsx文件(post,代码逻辑,数据库里的表)
获取资源功能:获取详细信息等(get id值等,代码逻辑,数据库里的表)
增加功能:新建(post,代码逻辑,数据库里的表)
修改功能:修改(put,代码逻辑,数据库里的表)
删除功能:删除(delete,代码逻辑,数据库里的表)
service方法定义:ICourseService.java
service的实现类:CourseServicelmpl.java
重写了所有的实现方法,调用Mapper完成数据库的相关操作:以下courseMapper就表示从数据库里直接查询id并返回。
具体实现:CourseMapper.java中实现的,与service的实现类(CourseServicelmpl.java)一一对应
具体每个方法对应的SQL语句,在CourseMapper.xml中实现的
实体类继承基类:Course.java
与数据库一一对应,完成xml的自动映射封装
@PreAuthorize:Spring sec框架提供的权限校验
继承类的属性方法(什么getUserId,这些属性方法对应渗透测试的字典fuzz)
分页拦截器 PageHelper:自动对SQL分页进行拦截,实现分页的拦截逻辑
分页拦截器 第一步开启分页 startPage()去拦截第二步(//2.查询课程列表)的SQL语句:
startPage()拦截 --> select * from 课程表 where xxx(拆成总记录数查询(截取* 改成 count(*)得到总记录数),和拆成list集合查询(拼接limit ?,? 得到分页的查询 ))
第三步的分页结果返回
源码阅读 - 权限注解
Spring Security框架中的权限注解:@PreAuthorize
- 不管是什么花里胡哨的语言(漏洞原理的底层思维不会变,比如SQL注入的漏洞原理就是拼接,这放到什么具体语言中还是拼接),学技术(SQL注入如何拼接),而不是学技巧(java SQL注入怎么代审?怎么发现?)。未授权访问,同理。
- 一把梭,匹配权限标识
干掉权限字符(未匹配到权限标识,权限不足)
获取左边图里的用户登录信息(比如权限集合,权限注解匹配是否在权限集合中存在,存在则放行。不存在则拦截,权限不足)
源码阅读 - 前后端交互
- vue.js Axios工具(请求响应拦截器,增强请求响应)
项目工程里配置文件拼接前缀:dev-api 开发,生产,测试等
前后端分离:请求,代理转发,实现跨域访问
拦截 /dev-api 前缀进行跨域访问(target);重写(rewrite),匹配 /dev-api,替换为空
- 基于跨域的蜜罐或溯源(还有基于客户端漏洞比如浏览器,基于VPS的基础设施比如反渗透VPS或域名找回等手机号数据关联,基于本地文件读取的配置硬编码比如某个生活应用下的ID号等中间关联数据,基于反向钓鱼比如需要先"安装"什么才能访问资产等)
二开 - 新建业务模块
https://www.bilibili.com/video/BV1pf421B71v?p=17&vd_source=b1acc63fa6d7d73e53111f9e1153f990
- 存储桶存于本机的环境变量中(因为阿里云OSS官网文档有这个,所以信息收集带上)