2023Hvv/Jeecg-Boot Freemarker 模版注入漏洞.md

60 lines
2.0 KiB
Markdown
Raw Normal View History

2023-08-16 17:47:36 +08:00
来源刨洞安全
2023-08-15 14:36:32 +08:00
2023-08-16 17:47:36 +08:00
SSTI
2023-08-15 14:36:32 +08:00
2023-08-16 17:47:36 +08:00
根据线索:
2023-08-15 14:36:32 +08:00
2023-08-16 17:47:36 +08:00
![图片](./Jeecg-Boot Freemarker 模版注入漏洞.assets/640.png)
直接用 `JADX` 找到对应代码
![image-20230816170240853](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170240853.png)
很直接嘛,直接传入 `sql`,那直接构造请求先试试:
![image-20230816170248064](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170248064.png)
居然还有黑名单
![image-20230816170255493](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170255493.png)
这里起码还有个 `SQL` 注入漏洞
线索中说明了用 `Freemarker` 处理了传入的 `sql` 语句,那直接打 `SSTI` 试试
![image-20230816170302778](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170302778.png)
![image-20230816170307411](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170307411.png)
JDBC RCE
漏洞利用有个前提,必须有 `H2` 驱动的依赖
`JADX` 在反编译的代码中搜索 `testConnection`,找到对应的接口
2023-08-15 14:36:32 +08:00
```
2023-08-16 17:47:36 +08:00
org.jeecg.modules.jmreport.desreport.a.a#a(org.jeecg.modules.jmreport.dyndb.vo.JmreportDynamicDataSourceVo)
2023-08-15 14:36:32 +08:00
```
2023-08-16 17:47:36 +08:00
![image-20230816170325141](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170325141.png)
`IDEA` 中查看
代码被压的爹妈都不认识了
![image-20230816170336818](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170336818.png)
![image-20230816170341778](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170341778.png)
根据入参 `@RequestBody JmreportDynamicDataSourceVo var1` 知道,传入一个 `JmreportDynamicDataSourceVo` 对象的 `JSON`
**JmreportDynamicDataSourceVo**
![image-20230816170351509](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170351509.png)
里面能自定义 `dbUrl`,那么就直接构造参数,试试看
`dbUrl` 用前段时间的 `metabase poc` 改改
![image-20230816170359088](./Jeecg-Boot Freemarker 模版注入漏洞.assets/image-20230816170359088.png)