apache-shenyu_2.5.1_spel
分析
shenyu-plugin/shenyu-plugin-mock/src/main/java/org/apache/shenyu/plugin/mock/generator/ExpressionGenerator.java
1 | |
可以看见没有对穿传入的字符进行过滤,context也是使用的StandardEvaluationContext,也就是我们可以直接传入恶意字符,造成命令执行。
在官网的文件docs/plugin-center/mock/mock-plugin ,记录着使用spel时的格式。
${expression|spel}
- 说明:直接使用Spel表达式生成数据
- 示例:
${expression|T(java.time.LocalDate).now()}、${expression|1==1}
复现
先在 http://ip:9095/#/config/plugin 开启Mock插件。
然后在http://ip:9095/#/plug/Mock/mock , 加入一个选择器,填入名称"/spel",类型为全流量, 执行循序为1.
然后添加规则,填入名称”/spel”,匹配规则为”or”,url = /spel,处理为 httpStatusCode为200时,responseContent 填入sel表达式
1 | |
对应数据包
1 | |
然后点击同步mock。
最后访问shenyu-bootstrap的地址http://ip:9195/spel, 触发spel记载。
它会在shenyu-bootstrap的服务器的/tmp下生成一个deadbeef文件
Call Stack
1 | |
apache-shenyu_2.5.1_spel
https://unam4.github.io/2025/04/04/apache-shenyu-2-5-1-spel/